Docker und Dashbuttons via dash_dhcp?

Begonnen von FunkOdyssey, 22 Januar 2018, 17:42:43

Vorheriges Thema - Nächstes Thema

FunkOdyssey

Hallo,

ich habe im GitHub-Projekt https://github.com/doublexminus/xx-fhem#dash_dhcp-amazon-dashbuttons gelesen, dass man die Ports der Dashbuttons (67) einfach über den Port-Docker-Parameter auf 6767 umrouten kann. Persönlich habe ich das über die "docker-compose.yml" umgesetzt.

  -p 67:6767

Drücke ich auf die Dashbuttons, so sehe ich im tcpdump auch die empfangen Pakete:

sudo tcpdump -i eth0 port 67 or port 68 -e -n

Gehe ich aber in meinem FHEM-Container (egal ob privileged oder nicht), so wird dort nichts empfangen. Der FHEM-Container läuft selbstverständlich nicht im Host-Modus.

Innerhalb des Containers läuft FHEM eigentlich auch mit Root-Rechten. Dürfte die Weiterleitung auf Ports > 1000 dann nicht sowieso egal sein?

Hat sich zufälligerweise irgendjemand mit Docker und den Dashbuttons beschäftigt und kann mir einen Tipp geben?

Lesestoff:
https://github.com/doublexminus/xx-fhem#dash_dhcp-amazon-dashbuttons
https://haus-automatisierung.com/hardware/fhem/2017/12/11/fhem-tutorial-reihe-part-49-dash-button.html
https://maker-tutorials.com/fhem-geraete-mit-amazon-dash-button-schaltensteuern-raspberry-pi-home-automation/

FunkOdyssey

Zwischenstand:

Ich bin in einem anderen Docker-Projekt zufällig darüber gestolpert, dass man dem Container evtl. mehr Rechte mitgeben muss.

    cap_add:
      - NET_ADMIN
      - NET_RAW


Das scheint sinnvoll, da dann auch der volle Zugriff auf das Netzwerk eingerichtet wird. Aber ich habe mein FHEM nicht (wie im oben erwähnten Docker-Projekt als "network_mode: host" laufen).

Ich hätte wetten können, dass der erste Versuch in dash_dhcp erfolgreich war. Aber ich kann es nicht mehr rekonstruieren. Irgendwie reagiert mein dash_dhcp gar nicht mehr. Auch eine Neuanlage der dash_dhcp-Konfiguration führte nicht zum Erfolg.

Internals:
   CFGFN     
   CONNECTS   2
   FD         216
   LAST_CONNECT 2018-01-29 22:15:46
   LAST_DISCONNECT 2018-01-29 22:15:46
   NAME       dash_buttons
   NR         1109
   NTFY_ORDER 50-dash_buttons
   PORT       6767
   STATE      listening
   TYPE       dash_dhcp
   READINGS:
     2018-01-29 22:15:46   state           listening
Attributes:
   allowed    xc:63:be:xc:01:x8
   port       6767


Ich habe die Mac-Adresse auch vorsichtshalber mal groß geschrieben. Und es auch mit devAlias (dann mit Bindestrichen) versucht.


eszych

Hallo FunkOsyssey,

ich hatte das gleiche Problem.
Wichtig is zu wissen, dass ein DHCP Request als UDP geschickt wird, Docker aber standardmäßig Portumleitungen auf TCP anlegt.
Das läßt sich auch leicht verifizieren, wenn Du auf dem Docker Host mit deiner Einstellung netstat -atn aufrufst.
Dort sollte irgendwo der Port 67 auftauchen. Wenn Du netstat -aun aufrufst, dann taucht da aber kein Port 67 auf...

Wenn Dir das ganz zu hoch ist, hier mal der Auszug aus meiner docker-compose.yml:
    fhem:
        restart: always
        expose:
            - "8080"
            - "8083"
            - "7072"
            - "67"
        ports:
            - 7072:7072
            - 8083:8083
            - 8080:8080
            - 67:6767/udp
        build: fhem
        container_name: fhem
        privileged: true


ach ja - es ist eine docker-compose.yml Version "2"...

Mit der Einstellung funktioniert es bei mir.

Viel Erfolg!
Raspberry Pi 2 - FHEM 5.7
HM-LAN, HM-CFG-USB-2
HM-Sec-SCo, HM-Sec-SC-2, HM-TC-IT-WM-W-EU,
HM-LC-SW4-DR, HM-LC-Sw1-DR, HM-ES-PMSw1-DR,    
HM-ES-PMSw1-Pl - Rademacher Hompilot DuoFern

FunkOdyssey

Ach, so etwas doofes. Das hat mich Tage an Nerven gekostet und ich habe das schlussendlich anders gemacht:
- Dash_dhcp in einem leeren FHEM-Container im Host-Modus
- Anbindung per FHEM2FHEM mit dem Produktiv-FHEM-Container

Also jede Menge unnötiger Ballast. Und das nur, weil ich nicht aufs Protokoll geachtet habe. Obwohl ich das sogar gesehen habe. Nur wüsste ich nicht, dass Docker nur TCP forwarded.

Danke dir. Läuft auf Anhieb. Auch ohne ,,privileged". Die ,,cap_add"-Zeilen habe ich sowieso aktiv.

doublexminus

Ich weiß, es ist schon ein paar Tage her, dass hier das Problem aufgetaucht ist.

Da ich grade selbst dabei bin, mein FHEM mit Docker (auf alpine-basis) neu aufzusetzen, bin ich lustiger weise selbst darüber gestolpert.

Ich werde dann wohl mal die Beschreibung updaten, so das man direkt sieht das es sich um UDP handelt :D

solidphili

Sorry für das Hochziehen des alten Threads.
Ich versuche den Dash Button in meiner FHEM Docker Instanz zum Laufen zu bekommen. Ich kriege den UDP Port nicht hinzugefügt.
In meinem Container bekomme ich die Fehlermeldung "Lokaler Port 67,.... steht in Konflikt mit anderen Ports und anderen Diensten". Mit netstat finde ich keinen Dienst der diesen Port benutzt.
Ich hab auch einen Tipp gefunden, in dem stand, man solle hier nach Applikationen und Ports suchen: /usr/local/etc/services.d
Leider finde ich dort auch nichts.

Jemand vielleicht ne Idee?

volschin

Zitat von: FunkOdyssey am 25 Februar 2018, 20:21:53
Danke dir. Läuft auf Anhieb. Auch ohne ,,privileged". Die ,,cap_add"-Zeilen habe ich sowieso aktiv.
Das Leben kann so einfach sein.  :) Vielen Dank.

Bei mir reicht die einfache Ergänzung:
        ports:
            - 67:6767/udp

Es sieht also so aus, dass weder ein cap_add noch ein privileged=true für die Funktion notwendig ist, also keine Sicherheitseinbuße.
Intel NUC+Ubuntu 22.04+Docker+FHEM6
HomeMatic: HM-MOD-RPI-PCB+HM-USB-CFG2+hmland+diverse, HUE: Hue-Bridge, RaspBee+deCONZ+diverse
Amzn Dash-Buttons, Siro Rollos
4xRPi, 4xCO20, OWL+USB, HarmonyHub, FRITZ!Box 7590, Echo Dots+Show8, Logi Circle 2, HomeBridge
TIG Stack (Telegraf, InfluxDB, Grafana)

Gear

#7
Um kein neues Thema zu öffnen, frage ich hier mal nach:

Habe FHEM im Docker:
services:

####>---- FHEM ----<######################################################################################################

  fhem:
    container_name: FHEM
    image: fhem/fhem:latest
    hostname: fhem
    privileged: true
    restart: always
    networks:
      internal:
        ipv4_address: 172.18.0.2
    ports:
      - 8083:8083
      - 7072:7072
      - 67:6767/udp
    cap_add:
      - NET_ADMIN
      - NET_RAW
    environment:
      PIP_PKGS: "fhem beautifulsoup4"
    volumes:
      - /My/Path/2/FHEM:/opt/fhem

####>---- Network ----<######################################################################################################

networks:
  internal:
    driver: bridge
    ipam:
      config:
        - subnet: 172.18.0.0/16
          gateway: 172.18.0.1
          ip_range: 172.18.0.1/24


Habe auf dem Host folgendes ausgeführt:
sudo iptables -I PREROUTING -t nat -i enp1s0 -p udp --src 0.0.0.0 --dport 67 -j DNAT --to 0.0.0.0:6767
sudo apt-get install iptables-persistent


Mein FHEM Define:
defmod DHCP.Catcher dash_dhcp
attr DHCP.Catcher DbLogExclude .*
attr DHCP.Catcher allowed XX:XX:XX:XX:XX:XX
attr DHCP.Catcher port 6767


Device getestet auf eine RPi ohne Docker.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Wernieman

Warum machst Du per iptables eine NAT-Umleitung??
- 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

Gear

Weil ich das damals irgendwo nach einer Anleitung gemacht hatte.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Wernieman

Kann es sein, das DU alle Befehle irgendwie "nur nach Anleitung" gemacht hast? Die apt-get Installationen machen erstmal keinen Sinn ...
- 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

Gear

Ich habe das nach der Anleitung gemacht, das ist aber auch schon ewig her.
Habe es nur aus meinen Notizen genommen und für das neue System auch so gemacht.

https://haus-automatisierung.com/hardware/fhem/2017/12/11/fhem-tutorial-reihe-part-49-dash-button.html
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Gear

@Werner
Jetzt verstehe ich, was du meinst.
Doch der Befehl speichert die aktuellen Netzwerksettings feste ein.
Sonst müsste man das nach einem Neustart neu setzen.
So bin ich damals auf das Tutorial gestoßen.
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <

Wernieman

tcpdump brauchst Du aber dafür nicht ....

Und leider OT .. von dem Tutorial halte ich nichts. Mangels Hardware kann ich Dir nur nicht weiterhelfen ...
- 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

Gear

Na ja, ich nutze keine Dash-Buttons.
Man kann hier auf jedes Gerät was sich am DHCP-Server anmeldet reagieren.

z.B. wenn das Smartphone sich anmeldet, ein TV-Stick, oder was auch immer.

Und ob das Tutorial gut ist oder nicht, es hat auf dem RPi bisher funktioniert.
Aber wie auch immer...
> ODroid H3 => OMV => Docker => FHEM <
Fritz!Box 7590, Fritz!Repeater 6000, MQTT, RaspberryMatic, Zigbee2MQTT, ESP32, ESP8266, Shelly, Grafana ...
> 3D-Druck <