Portfreigabe mit FHEM einschalten

Begonnen von Amenophis86, 26 November 2016, 10:21:49

Vorheriges Thema - Nächstes Thema

Wernieman

Was angestellt werden kann ... kommt auf das Produkt drauf an.

z.B: bei einer direkten Freigabe von FHEM kann man praktisch alles mit FHEM-Rechten auf Deinem Rechner ausführen, da FHEM in der Eingabe auch perl-Code erlaubt. Deshalb ist .z.B. in dem Falle ein Zusätzlicher Loginmechanismuß absolut notwendig.

In diesem Falle (ftp) sehe ich das Problem darin, das
-  FTP eigentlich mehr als einen Port verwendet
- Alle Passwörter wirklich im Klartext über die Leitung gehen
- ftp ... deshalb mittlerweile "am sterben ist"

Btw:
Per ssh kannst Du auch Portforwarding machen, d.h. der Zugriff auf ALLES im Netz ist immer noch möglich, nur eben auf der Sicherheitsstufe ssh
- 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

Mitch

Also ich habe das bei mir so gelöst:

1. Portfreigabe nur 3000 für Alexa, 443 für HTTPS auf genau eine Webseite
2. keinen öffentlichen DynDNS Service
3. VPN Zugriff (danach gehen FTP, FHEM, ssh, usw.
4. ReverseProxy
5. Enterprise Firewall von Ubiquiti (KEINE FRITTE)

Ich hatt enoch nie das Problem, dass ich nicht an irgend welche Daten kam, oder fhem nicht benutzen kann.
Wenn ich an einem fremden Rechner bin, wo kein VPN geht, dann halt mit dem iPhone oder iPad. Dort habe ich VPN und ssh Client, also alles, was man braucht.
Für den reinen Datenaustausch habe ich meinen eigene Privatcloud basierend auf NextCloud.
FHEM im Proxmox Container

Jamo

Hier der code um mittels des Moduls Fritzbox eine Portfreigabe zu aktivieren bzw zu deaktivieren:

define FritzBox_Port dummy
attr   FritzBox_Port webCmd on:off

define FritzBox_Port_n notify FritzBox_Port:.* {\
  if ($EVENT eq "off") {\
    fhem("get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient fh.em.ip.ad NewEnabled 0 NewPortMappingDescription HTTPS-Server NewLeaseDuration 0")\
  } \
  else {\
    fhem("get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient fh.em.ip.ad NewEnabled 1 NewPortMappingDescription HTTPS-Server NewLeaseDuration 0")\
  }\
}

Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Amenophis86

Ja geil, vielen Dank.

Allerdings noch Fragen dazu:

1. FritzBox = Das wirkliche FritzBox Device in FHEM?
2. NewExternalPort 3000 = Die Portnummer, welche von außen angefragt wird?
3. NewInternalPort 3000 = Die Portnummer, auf die weitergeleitet werden soll?
4. NewInternalClient fh.em.ip.ad = Die IP oder Name des Geräts im Netzwerk, auf welches weitergeleitet werden soll?
5. NewPortMappingDescription HTTPS-Server = Der Name für die Portfreigabe?

Ist zwar relativ eindeutig, aber frage lieber nochmal nach, um sicher zu gehen :)
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Wernieman

#19
@inoma:

Kleine Kritik:
Warum macht Du ein notify .* mit einem IF, wenn Du es auch gleich beim notify machen könntest?
also eines auf FritzBox_Port:on und eines auf FritzBox_Port:off

Hat den Nachteil: 2 Notify anstatt einem
Hat den Vorteil: Ds Notify wird wirklich nur aufgerufen, wenn es nötig ist.

z.B. für on
define FritzBox_Port_on notify FritzBox_Port:on get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient fh.em.ip.ad NewEnabled 0 NewPortMappingDescription HTTPS-Server NewLeaseDuration 0

Findet meinereiner übersichtlicher (aber Geschmackssache)

P.S. Nicht getestet, da ich mich mit tr064 nicht auskenne
- 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

Marlen

Hi,

ich bekomm immer diesen Fehler! Was mach ich falsch?

2017.02.16 13:58:03 3: FritzBox_Port_n return value: Service='WANIPConnection:1'   Control='wanipconnection1'   Action='AddPortMapping'
Parameter1='NewRemoteHost' => '0.0.0.0'
Parameter2='NewExternalPort' => '8083'
Parameter3='NewProtocol' => 'TCP'
Parameter4='NewInternalPort' => '8083'
Parameter5='NewInternalClient' => 'http://192.168.178.33'
Parameter6='NewEnabled' => '1'
Parameter7='NewPortMappingDescription' => 'HTTPS-Server'
Parameter8='NewLeaseDuration' => '0'
----------------------------------------------------------------------
$VAR1 = {
          'UPnPError' => {
                           'errorDescription' => 'Invalid Args',
                           'errorCode' => '402'
                         }
        };

Wernieman

Ich berfüchte, Du darfst nicht copy&paste, sondern musst anpassen.
Oder ist Deine IP 0.0.0.0 ???
- 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

Marlen

Und was ist dann NewRemoteHost? Die IP meiner Fritzbox?

Marlen

O.k.

Danke @ inoma  :-* :-* :-*

Klappt super!

LG
  Marlen

Amenophis86

Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Jamo

#25
Einfach mal manuell in der Fritzbox die gewünschte Portfreigabe einrichten.
Dann in FHEM in die Kommandozeile folgendes eingeben:

get FritzBox tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0

Dann erscheint sowas wie:

Service='WANIPConnection:1'   Control='wanipconnection1'   Action='GetGenericPortMappingEntry'
Parameter1='NewPortMappingIndex' => '0'
----------------------------------------------------------------------
{
  'GetGenericPortMappingEntryResponse' => {
                                            'NewEnabled' => '1',
                                            'NewLeaseDuration' => '0',
                                            'NewExternalPort' => '3000',
                                            'NewPortMappingDescription' => 'HTTPS-Server',
                                            'NewInternalClient' => 'fh.em.ip.ad',
                                            'NewInternalPort' => '3000',
                                            'NewProtocol' => 'TCP',
                                            'NewRemoteHost' => '0.0.0.0'
                                          }
}


Das sind dann die Werte, die man weiter oben in Antwort #17 dann eingeben muss.

Die  'fh.em.ip.ad' ist meine IP Adresse, auf dem der FHEM Server läuft, also bei mir der RaspberryPi. die Portfreigabe 3000 brauche ich für Alexa.

@Werniemann, Antwort #21: Ich glaube die '0.0.0.0' heisst einfach, dass für alle ankommenden Anfragen, egal von welcher IP, die Portfreigabe gilt.
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Jamo

Hier nochmal eine etwas schickere Version, die $EVENT zum ein-/ausschalten des Ports verwendet:
define FritzBox_Port3000 dummy
attr   FritzBox_Port3000 eventMap on:1 off:0
attr   FritzBox_Port3000 webCmd on:off

define FritzBox_Port3000_n notify FritzBox_Port3000:(1|0) get FritzBox tr064Command WANIPConnection:1 wanipconnection1 AddPortMapping NewRemoteHost 0.0.0.0 NewExternalPort 3000 NewProtocol TCP NewInternalPort 3000 NewInternalClient de.in.e.IP NewEnabled $EVENT NewPortMappingDescription Alexa-3000 NewLeaseDuration 0
attr   FritzBox_Port3000_n verbose 0


Die Parameter auslesen mit:
get FritzBox tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

heinzfo

Hallo

Bei meiner FB7390 war die Portfreigabe kein Problem.

Mit der FB7590 FW7.0 und vorher FW6.92 bekomme ich leider diesen Fehler bei "get xxxx tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0"


Service='WANIPConnection:1'   Control='wanipconnection1'   Action='GetGenericPortMappingEntry'
Parameter1='NewPortMappingIndex' => '0'
----------------------------------------------------------------------
$VAR1 = {
          'Error' => '401 Unauthorized'
        };



Was kann das sein?

Die restlichen Funktionen mit dem FRITZBOX Modul funktionieren einwandfrei.
Das Passwort hab ich nochmal gesetzt, hilft leider nicht.
Das "attr xxxx allowTR064Command 1" hat den Wert 1

Danke und beste Grüße
Heinz

Fixel2012

Zitat von: heinzfo am 27 Juli 2018, 18:34:53
Hallo

Bei meiner FB7390 war die Portfreigabe kein Problem.

Mit der FB7590 FW7.0 und vorher FW6.92 bekomme ich leider diesen Fehler bei "get xxxx tr064Command WANIPConnection:1 wanipconnection1 GetGenericPortMappingEntry NewPortMappingIndex 0"


Service='WANIPConnection:1'   Control='wanipconnection1'   Action='GetGenericPortMappingEntry'
Parameter1='NewPortMappingIndex' => '0'
----------------------------------------------------------------------
$VAR1 = {
          'Error' => '401 Unauthorized'
        };



Was kann das sein?

Die restlichen Funktionen mit dem FRITZBOX Modul funktionieren einwandfrei.
Das Passwort hab ich nochmal gesetzt, hilft leider nicht.
Das "attr xxxx allowTR064Command 1" hat den Wert 1

Danke und beste Grüße
Heinz

Port freigaben gehen meines Wissens seit der 6.8 nur noch für das Gerät, was auch die Portfreigabe durchführt. Dies wurde aus Sicherheitsgründen von AVM so implementiert.
Fhem 5.8 auf Raspi 3, HMLAN und 868MHz CUL mit einigen Komponenten, Z-Wave Rollladenaktoren, Tablet UI, 433 MHz CUL mit Baumarktsteckdosen und Temp Sensoren, Amazon Echo, Echo Dot, 2x SONOS  play1, 1x SONOS Connect AMP,  presence, HUE, Lightify

heinzfo