Trigger stunnel/vpn mit Telegram

Begonnen von witty, 25 September 2020, 17:16:08

Vorheriges Thema - Nächstes Thema

witty

... bitte nicht gleich grillen wenn es ein bisschen OT ist:

Ich bin seit jeher von der fhem-Einbindung von Telegram begeistert.
Vor allem, dass der RPi nach außen keine Ports offen haben muss und them trotzdem steuerbar bleibt ...

Ich habe zu Hause einen RPi1, der über ssh und OpenVPN von außen erreichbar ist.
In meinem Wochenendhäuschen habe ich einen RPi2 mit 4G-Modem und benutze Telegram zum Fernsteuern.
Was ich gerne erreichen würde:
* Keyword über Telegram an RPi2
* RPi2 verbindet sich (zB stunnel) zu meinem RPi1
* ich kann mich per ssh remote zu meinem RPi2 verbinden
* Keyword über Telegram an RPi2
* RPi2 trennt Verbindung ...

Ist das möglich?

Otto123

Hi,

denke mal ein bisschen "näher" - FHEM kann fast alles. ;)

Mal ohne Telegramm und ohne FHEM nachgedacht:

  • kannst Du Dich denn von deinem RPI2 über stunnel zum RPi1 verbinden, kann user fhem das?
  • kann sich denn Dein user fhem über ssh zum RPi2 verbinden?

Warum eigentlich vom RPi1 zum RPi2 die ssh Verbindung aufbauen? Dazu müsstest Du dem RPi1 sagen das der RPi2 jetzt da ist - ok geht über PRESENCE.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

witty

Die Idee ist, dass RPi2 zwar dauernd Zugriff aufs Internet hat, aber von Remote NICHT zugegriffen werden kann (also kein Port nach außen offen ist).
Für Wartungsarbeiten würde ich mich aber - nach einem bestimmten ,,Signal" - zu RPi2 verbinden wollen.
Nach einem anderen ,,Signal" ist RPi2 dann wieder nicht von außen erreichbar.

Als ,,Signal" dachte ich zB an eine Telegram-Message.
Als Reaktion darauf zB Aktivieren des sshd (oder Aufbau eines stunnels zu meinem RPi1)

Otto123

Da waren drei Fragezeichen  ::)

Was hat denn ein laufender ssh mit offenen Ports zu tun?
Wenn Dein Pi1 eine Einwahl per OpenVPN ermöglicht, dann lass doch den Pi2 bei "Telegram" eine VPN Verbindung aufbauen und dann hast Du über diesen Tunnel Zugriff vom Pi1 auf den Pi2.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

witty

genau das habe ich nun gemacht
vermutlich etwas umständlich, aber es erfüllt den Zweck:

if (sudo lsof -i -P -n|grep openvpn) ; then
  # disconnect
  echo "signal SIGTERM"|nc 127.0.0.1 999;
else
  # connect
  sudo openvpn --config openvpn/xxx.ovpn --management 127.0.0.1 999
fi



RPi1 (at home)
eth0:192.168.1.1/255.255.0.0
tun0:10.8.0.25 (OpenVPN Server)--\
                                 |
RPi2 (remote)                    |
tun0:10.8.0.26 (OpenVPN Client)--/
eth0:192.168.0.2----------\
                          |
Internet Modem (remote)   |
eth0:192.168.0.1----------/


was mir jetzt noch fehlt (vlt kann mir da jemand untern die Arme greifen  :o):

Nachdem RPi2 zu RPi1 verbunden ist, brauche ich Browser-Zugriff (ich vermute mit ssh-tunnel sollte das gehen ...)

1: vom "at home"-Netzwerk auf den FHEM-WebClient auf RPi2
2: vom "at home"-Netzwerk auf den Webserver auf dem Internet Modem (remote)

bin für jede Hilfe dankbar!!!!

Wernieman

Warum verwendest Du stunnel UND ssh? ssh KANN Port von sich aus tunneln. Gerade bei solch einem Aufbau ist damit ein "Tunnel per ssh" eigentlich viel Sinnvoller.

Also auf "ping" mach der entfernte PI eine SSH Verbindung mit Port-Forwarding (Interer PI Port X auf externen Pi Port X) zum nahen PI auf. Dann kannst Du über den "Port-Tunnel" alles machen.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Otto123

Hi,

die Lösung für 1. und 2. heisst (eventuell) Routingeintrag. Kann man an unterschiedlichen Stellen einrichten. Ich rede mal Beispielhaft vom Windows Host:
route add Ziel gateway
route add 192.168.0.2 10.8.0.25

Damit wird eine Hostroute gesetzt (mask 255.255.255.255) kann man auch als Netzwerkroute (192.168.0.0 mask 255.255.255.0 10.8.0.25) machen.

Damit das funktioniert:
- muss das Gateway bekannt sein: 10.8.0.25
- Muss der Client 192.168.0.2 eine Route bekommen ins Netzwerk deines Windows Host. (Vielleicht hat er die automatisch durch die Einwahl - muss aber nicht so sein)
- muss der VPN Server 10.8.0.25 wirklich routen
192.168.0.1 kann diese Route nicht kennen, den musst Du sie also eintragen, falls er das kann.

Der

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

Ansonsten relativ gut beschrieben im Ubuntu HowTo zu openvpn:
https://wiki.ubuntuusers.de/OpenVPN/
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Ben_Ni

Hallo zusammen,

ich schalte mich mal hier dazu.
Vorweg: EIN DICKES, FETTES Lob an dieses Forum!!! Ich nutze seit ca. 3-4Jahren FHEM und hab ganz klein angefangen und hab inzwischen ein recht ausgewachsenes System. Vor allem durch fleißiges Lesen hier im Forum. Bisher konnte ich mir eigentlich immer selbst helfen...wenn auch manchmal eher - nennen wir's einmal - kreativ. Aus Programmierersicht wahrscheinlich eher umständlich bis katastrophal ;-)

Nun zu meiner Frage bzw. Ausgangssituation: ich arbeite an einer Hochschule, und die bietet nen VPN-Zugang. Diesen möchte ich nutzen, um von außerhalb auf mein System zuzugreifen. Über die Fritzbox ansich klappts nicht, dual stack lite (oder so) und Vodafon Kabelanschluss sei Dank :-(
Wie auch immer. ich habe folgenden Plan: per Telegram ein Kommando an fhem (funktioniert!) -> FHEM triggert auf die Telegram-Nachricht(krieg ich problemlos hin) und FHEM soll an das darunterliegende Linux-System den Befehl für das Aufbauen der VPN-Verbindung schicken (PROBLEM!) An der Stelle wirds (für mich) kniffelig: FHEM läuft in einem LXC-Container unter Proxmox. OpenVpn im entsprechenden Fhem-Container installiert und über Kommandozeile als root-user erfolgreicher Verbindungsaufbau möglich ("openvpn /etc/openvpn/client.ovpn"). Per "sudo visudo" dem fhem-user noch die rechte passwortlosen ausführen für openvpn gegeben. Dann per "passwd fhem" mal ein PW für fhem gesetzt und mich an der Konsole erolgreich per fhem-user angemeldet und erfolgreich die VPN-Verbindung aufbauen können...auch mal reboots dazwischen.

Wenn ich jetzt aber aus FHEM heraus per z.B. notify probiere den Befehl abzusetzen, klappt's nicht. Nagut..bauste dir halt noch ein script mit entsprechenden Rechten in /opt/fhem/FHEM zum Starten und Stoppen des ganzen. Als FHEM-user an der Konsole kein Problem, aus FHEM heraus aber auch nicht erfolgreich. Ich hab viel probiert, inklusive Befehle per ssh von einem System aufs nächste schicken (was aus der Konsole heraus auch funktioniert) usw....ALLES ERFOLGLOS.

Ich schreibe jetzt hier ganz bewußt nicht jeden Schritt auf, da ich hoffe, Ihr könnt mir so unvorbelasteter helfen.

Besten Dank schon mal und nen schönen Feierabend

Grüße Benni

MadMax-FHEM

#9
Also wenn es als User fhem auf der Cosole damit:


openvpn /etc/openvpn/client.ovpn


geht, dann sollte das hier (inkl. Anführungszeichen!!):


"openvpn /etc/openvpn/client.ovpn"

oben in das FhemWeb-Fenster auch gehen.
Evtl. noch VOR openvpn den Pfad (z.B. mittels "which openvpn" abfragen) angeben, sicher ist mal sicher... ;)

Und wenn das dann geht, einfach in deinem Telegram-Empfangs-notify genauso, also:


define nTele notify Telebot:msg.* "openvpn /etc/openvpn/client.ovpn"


Den vorderen Teil des notify musst du nat. passend machen, das ist hier nur "beispielhaft"...

EDIT: solltest du im notify Perl nutzen (wollen), dann eben so: define nTele notify Telebot:msg.* {if(something){fhem("\"openvpn /etc/openvpn/client.ovpn\"")}}

Gruß, Joachim

P.S.: du darfst auch ruhig einen eigenen Thread aufmachen ;)
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

Hi,

ZitatDann per "passwd fhem" mal ein PW für fhem gesetzt und mich an der Konsole erolgreich per fhem-user angemeldet und erfolgreich die VPN-Verbindung aufbauen können...auch mal reboots dazwischen.

Wenn ich jetzt aber aus FHEM heraus per z.B. notify probiere den Befehl abzusetzen, klappt's nicht. Nagut..bauste dir halt noch ein script mit entsprechenden Rechten in /opt/fhem/FHEM zum Starten und Stoppen des ganzen. Als FHEM-user an der Konsole kein Problem, aus FHEM heraus aber auch nicht erfolgreich. Ich hab viel probiert, inklusive Befehle per ssh von einem System aufs nächste schicken (was aus der Konsole heraus auch funktioniert) usw....ALLES ERFOLGLOS.
geht auch mit sudo -su fhem ... ohne Passwort setzen - aber egal.
Was hasste denn in FHEM probiert? Befehle, Scripts - Glaskugelkanal?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ben_Ni

Hi zusammen,

danke für die Antworten/Gegenfragen. Also, wie gesagt, das mit dem Telegram-Notify bekomme ich hin...irgendwie :-) das Problem ist tatsächlich, dass ich mein linux nicht davon überzeugen kann, den Befehl von fhem korrekt auszuführen.
Was hab ich aus FHEM probiert?:
{ system(Befehl)}
{ system('Befehl')}
{ system("Befehl")}
{qx(Befehl)}
{qx('Befehl')}
{qx("Befehl")}
aus der FHEM-Kommandozeile wie aus einem Test-notify heraus. Mal mit, mal ohne sudo vorweg. Mal per script, mal im script per sudo, mal ohne. Alles erfolglos.
...Bin echt am Verzweifeln :-(
Und wenn ich zulange an der LXC-Kiste probiert habe, spiele ich ein unverbasteltes Backup zurück, um immer wieder quasi neu anzusetzen (und jedesmal "protokolliere" ich in notepad++ meine Schritte). Das aber nur am Rande

Wie gesagt: ich werde da echt nicht schlau draus: als fhem-user im terminal klappts ja!!!

Grüße
Benni

MadMax-FHEM

Es wäre hilfreich statt "Befehl" wirklich zu schreiben was du probiert hast ;)

Hast du schon eines der Vorschläge probiert?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

#13
Hi Benni,

Du zeigst nur pseudos, der Teufel steckt im Detail.
Aus FHEM würde ich erstmal das machen "Shell Befehl".

Zeig bitte was echtes. { system(Befehl)}, {qx('Befehl')} und {qx("Befehl")} ist grundlegend falsch - kannst Du streichen :) Da musst Du Fehlermeldungen bekommen!

Mal noch meine Notiz zu dem Thema.

BTW: sudo ist kein Allheilmittel! Wenn Du sudo brauchst um eine vpn Verbindung zu öffnen hast Du ALLES falsch gemacht!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wernieman

Und arbeite, wie MadMax schon schrieb, am besten mit vollen Pfaden. In einer Deamon-Umgebung muß es nicht immer funktionieren.

Also wie geschrieben, den vollen Pfad kannst Du raus finden mit
whereis <Commando>
Hier natürlich <Commando> durch openvpn ersetzen
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html