Autor Thema: FHEM hinter Proxy  (Gelesen 10859 mal)

Engel

  • Gast
FHEM hinter Proxy
« am: 09 November 2016, 22:06:28 »
Moin liebe FHEM-Community,

ich bin zwar neu hier im Forum, aber mit FHEM seit fast 2 Jahren vertraut.
Nun hat sich mir aber ein bislang unüberwindbares Problem aufgetan:

Wie konfiguriere ich FHEM, so dass das System auch hinter einem (Firmen-)Proxy läuft?
D.h. es soll das Update funktionieren und auch Module wie Weather oder HTTPMOD.
Ich habe schon viel im Forum gelesen und leider nur eine Info über Socket-Kommunikation (HTTPUtils) gefunden. Genau diese blockiert der Proxy.

Derzeit habe ich einen RasPi 3 mit Rasbian Jessi lite und FHEM aufgesetzt.
Zudem habe ich CNTLM aufgesetzt und Aptitude mit den nötigen Proxy-Einstellungen versorgt.

Damit funktionieren UPDATE, WEATHER und HTTPMOD leider nicht :-(

Arbeitet FHEM tatsächlich mit Socket-Kommunikation?
Wo kann ich in FHEM Proxy-Einstellungen vornehmen?

Vielen Dank und Gruß,
Engel

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 26086
Antw:FHEM hinter Proxy
« Antwort #1 am: 10 November 2016, 10:14:49 »
Die meisten Module in FHEM verwenden das FHEM-Eigenen HttpUtils.pm, und der kennt sich (noch) mit Proxy nicht aus.

Ich bin bereit das zu aendern, allerdings bin nicht sicher, ob ich ein Proxy zwecks Testen aufstellen will, deswegen waeren mir Patches lieber. Da ich mich bisher mit Proxies nicht beschaeftigt habe: setzt man dabei einen "normalen" HTTP-Request ab, es geht bloss nicht an dem Adressaten, sondern an den Proxy? Muss man sonst was noch ins Header schreiben?

Zitat
Arbeitet FHEM tatsächlich mit Socket-Kommunikation?
Ja. Was auch immer mit der Frage gemeint war :)

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 21340
Antw:FHEM hinter Proxy
« Antwort #2 am: 10 November 2016, 11:31:47 »
was denn sonst ausser sockets? neben sockets und files gibt es nichts mehr das noch relevant ist oder?

auch http ist ein protokoll das über sockets geht. und sogar IPoAC kommt nicht ohne aus :).



hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, …

https://github.com/sponsors/justme-1968

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 28341
Antw:FHEM hinter Proxy
« Antwort #3 am: 10 November 2016, 11:36:36 »
Was ist das denn für ein Proxy der http oder https blockiert?
Ist das ein reiner Mailproxy?
Ich betreibe selber ein Proxy vorm FHEM. Du gibst einfach im Betriebssystem (Linux) an das Du einen Proxy hast und schon werden die entsprechenden Protokolle über den Proxy geleitet.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net
Informativ Informativ x 1 Liste anzeigen

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 26086
Antw:FHEM hinter Proxy
« Antwort #4 am: 10 November 2016, 11:46:03 »
Zitat
Du gibst einfach im Betriebssystem (Linux) an das Du einen Proxy hast und schon werden die entsprechenden Protokolle über den Proxy geleitet.

D.h. entweder connect(2) oder gethostbyname(3) "luegt"? Kommt mir komisch vor, ich haette eine Unterstuetzung vom Programm erwartet. Laeuft bei dir das FHEM-update uebers Proxy?

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 28341
Antw:FHEM hinter Proxy
« Antwort #5 am: 10 November 2016, 11:59:02 »
Ja, wobei ich da sagen muß, dadurch das das Update eine http Anfrage ist kommt die sowieso zum Proxy und damit durch. Ist ein transparenter Proxy. Nur https oder ftp müssen explizit im profile script mit angegeben werden.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 28341
Antw:FHEM hinter Proxy
« Antwort #6 am: 10 November 2016, 12:02:44 »
cat /etc/profile.d/system_proxy.sh

export https_proxy=http://pi-proxy01:3128
export ftp_proxy=http://pi-proxy01:3128
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Mein Dokuwiki:
https://www.cooltux.net

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 21340
Antw:FHEM hinter Proxy
« Antwort #7 am: 10 November 2016, 15:52:33 »
ganz so einfach ist das nicht :)

es gibt zwei arten von proxy:
- transparent die greifen auf netzwerk/firewall/... ebene ein und sind (mehr oder weniger) unsichtbar
- 'normale' proxies konfiguriert werden müssen und für die der client unterstützung explizit implementieren muss weil er aktiv
  die verbindung zum proxy statt zum eigentlichen ziel aufbauen muss.
  wie diese konfiguration genau passiert hängt vom client ab.

  im http rfc steht etwas zu proxies.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, …

https://github.com/sponsors/justme-1968

Engel

  • Gast
Antw:FHEM hinter Proxy
« Antwort #8 am: 11 November 2016, 18:25:51 »
Vielen Dank für die Rückckmeldungen  :)

Es ist ein aktiver Proxy, der Zugriffe auf bestimmte Seiten sperrt wie z.B. private Mail oder auch indizierte Seiten.

Die Einstellungen, die CoolTux in die system_proxy.sh geschrieben hat, habe ich schon gesetzt.

Ohne diese Einstellungen funktioniert wget nur mit dem Zusatz "-e use_proxy=yes" und der Angabe des Proxy "-e http_proxy=127.0.0.1:3128".
Hinter "127.0.0.1:3128" verbirgt sich CNTLM. CNTLM "ergänzt" für den eigentlichen Proxy die Credentials (Username und Passwort)

Ein Update in FHEM funktioniert nicht  :(
Resultat: http://fhem.de/fhemupdate/controls_fhem.txt: Can't connect(1) to http://fhem.de:80: IO::Socket::INET: Bad hostname 'fhem.de:80'

Ein wget auf die Datei funktioniert.

Offline TL

  • Jr. Member
  • **
  • Beiträge: 77
Antw:FHEM hinter Proxy
« Antwort #9 am: 17 November 2016, 02:42:38 »
Moin!

Die meisten Module in FHEM verwenden das FHEM-Eigenen HttpUtils.pm, und der kennt sich (noch) mit Proxy nicht aus.

Ich bin bereit das zu aendern, allerdings bin nicht sicher, ob ich ein Proxy zwecks Testen aufstellen will, deswegen waeren mir Patches lieber. Da ich mich bisher mit Proxies nicht beschaeftigt habe: setzt man dabei einen "normalen" HTTP-Request ab, es geht bloss nicht an dem Adressaten, sondern an den Proxy? Muss man sonst was noch ins Header schreiben?

Ich habe auch das Problem, dass hinter meinem Proxy (Squid) leider im Bezug auf FHEM einiges nicht funktioniert. Daher wäre es wirklich toll, wenn sich das ändern würde!

Habe daher gerade mal mit dem Wireshark nachgeschaut - es ist genau, wie Du schreibst: Der Header ändert sich nicht, Du musst nur die Pakete an die Adresse und den Port schicken, die z.B. in den Environment-Variablen http_proxy / https_proxy / ftp_proxy hinterlegt sind. Das müsste eigentlich schon alles sein. Falls der proxy eine Authentifizierung mit Username/Passwort verlangt, wird wohl komplizierter, aber das habe ich zumindest nicht eingerichtet. Für die meisten würde das oben beschriebene vermutlich ausreichen.


Edit: Die Env-Variable "no_proxy" müsste wohl auch noch berücksichtigt werden.

Viele Grüße,
   Thomas
« Letzte Änderung: 17 November 2016, 08:52:44 von TL »
Einen Pi, sie zu knechten, sie alle zu finden,
ins FHEM zu treiben und ewig zu binden.
Zustimmung Zustimmung x 1 Liste anzeigen

Offline Prof. Dr. Peter Henning

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8642
Antw:FHEM hinter Proxy
« Antwort #10 am: 19 November 2016, 20:35:12 »
Der bessere Weg ist, vom lokalen Rechner einen SSH-Tunnel auf die Firewall aufzumachen - damit ist der Proxy in der Regel auch umgangen. Mit diesem SSH-Tunnel können beliebige Ports externer Rechner auf den internen Rechner gemappt werden. Nicht nur zum Update von FHEM, sondern auch für andere Zwecke sehr hilfreich.

LG

pah

Offline TL

  • Jr. Member
  • **
  • Beiträge: 77
Antw:FHEM hinter Proxy
« Antwort #11 am: 19 November 2016, 22:56:31 »
Moin!

Der bessere Weg ist, vom lokalen Rechner einen SSH-Tunnel auf die Firewall aufzumachen - damit ist der Proxy in der Regel auch umgangen. Mit diesem SSH-Tunnel können beliebige Ports externer Rechner auf den internen Rechner gemappt werden. Nicht nur zum Update von FHEM, sondern auch für andere Zwecke sehr hilfreich.

Könntest Du das bitte für mich einmal genauer ausführen? Meine Netzwerkumgebung sieht grob ungefähr so aus:


   FHEM-
   Update- ______Internet_____Router_____Firewall_____Proxy_____Lokales FHEM
   Server

(Router, Firewall,Proxy und lokales FHEM sind jew. eigenständige Rechner. Mindestens der Proxy-Server macht kein IP-Forwarding von IP-Paketen.)

Wie sollte mir jetzt ein SSH-Tunnel dabei helfen, vom lokalen FHEM aus den FHEM-internen Update-Befehl durch den Proxy zu bringen? Wie müsste der ssh-Befehl dafür genau aussehen?

Viele Grüße,
   Thomas
Einen Pi, sie zu knechten, sie alle zu finden,
ins FHEM zu treiben und ewig zu binden.

Engel

  • Gast
Antw:FHEM hinter Proxy
« Antwort #12 am: 04 Januar 2017, 10:32:34 »
Moin zusammen,

zunächst möchte ich allen FHEM-Entwicklern und -Usern ein frohes neues Jahr wünschen.

Nachdem ich die Arbeit letztes Jahr unterbrechen musste, habe ich mich nun weiter an die Analyse gemacht.

Zunächst habe ich exemplarisch ein wget auf query.yahooapis.com gemacht. Alles in Ordnung, da (wie im Browser auf einem anderen Rechner) HTTP 400 zurück geliefert werden. Ein wget auf fhem.de funktioniert auch ohne Probleme.

Dann habe ich via fhem eine Anfrage an query.yahooapis.com ausgelöst. Der Proxy antwortet auf eine DNS-Anfrage mit einer Antwort (A Record), die einen Authoritative Nameserver als SOA enthält. Ferner wird sofort versucht die Adresse durch Anhängen einer erweiteren Adresse aufzulösen.

Im Log von FHEM stehen die Einträge "gethostbyname query.yahooapis.com failed". Mir ist noch unklar, warum die Methode "gethostbyname" fehl schlägt ...

Leider fehlt mir ein wenig Handwerkszeug zum Debuggen der HttpUtils. Ich bin mit perldebug nicht vertraut und google hat auf die Schnelle nicht weiter helfen können.
Könnte mir jemand eine kurze Erläuterung geben, wie ich im Umfeld von FHEM einzelne Module oder speziell HttpUtils mit gethostbyname debuggen kann?

Vielen Dank für die Unterstützung
Engel

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 26086
Antw:FHEM hinter Proxy
« Antwort #13 am: 04 Januar 2017, 10:54:57 »
Die einfachste Version ist "attr global verbose 5".
Etwas aufwendiger: an strategischen Stellen in HttpUtils.pm eine
Log 1, "XXX: $XXX";Zeile einstreuen. Dabei kann man fuer komplexe Datenstrukturen auch
Log 1, "XXX: ".Dumper($XXX);verwenden, muss man aber einmal oben
use Data::Dumper; dazupacken.

Achtung: falls man die Variable "attr global dnsServer a.b.c.d" setzt, dann verwendet HttpUtils statt gethostbyname die eigene, nicht blockierende Implementierung.

Engel

  • Gast
Antw:FHEM hinter Proxy
« Antwort #14 am: 06 Januar 2017, 16:05:40 »
So, nun habe ich mich ausführlich mit HttpUtils beschäftigt.
@Rudolf: Vielen Dank für den Support

Inzwischen habe ich eine Version erstellt, die mit und ohne Proxy eingesetzt werden kann. Unterstützt werden http- und https-Anfragen.
Der Proxy wird nur angesprochen, wenn er in der fhem.cfg eingerichtet ist. Zusätzlich wird CNTLM benötigt.

Probleme habe ich noch mit zwei neu eingeführten globalen Variablen (proxyHost & proxyPort): Wo müssen diese eingetragen werden, damit die Warnungen verschwinden?

Ich würde gern meine Weiterentwicklung zurück fließen lassen. Das es sich um eine wichtige Komponente handelt, natürlich nicht ohne Review. Testen konnte ich die Klasse nur eingeschränkt mit meinen Setups mit und ohne Proxy.
Muss ich meine Änderungen nun in ein git einstellen?