TLS und lockaler DNS

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Oekel
Beiträge: 201
Registriert: 28. Aug 2021 10:34
Answers: 0

TLS und lockaler DNS

Beitrag von Oekel »

Moin,

ich habe mir bei duckDNS eine Domain besort und einen lokalen dns-Server im Docker aufgesetzt (Mit *.duckDNS wildcard) damit ich die nervigen Warnungen im Browser loswerde.

Nun bin dabei die compose vom ganzen smartHome mittels traefik labels zu ergängen, um via subdomains dieses Ziel zu erreichen.
Bei etlichen wie zwave2mqtt, zigbee2mqtt, unifi, frontail bekomme ich es nach diesem Schema hin. Nur ObenHab selber will sich nicht drauf einlassen.

Da ich mir schon die Blöße gegeben habe die KI zu befragen und zu keinem Ergebnis gekommen bin, hoffe ich dass ihr vielleicht mal etwas dazu anmerken könnt?

Code: Alles auswählen

version: '3.8'

services:
  openhab:
    image: "openhab/openhab:4.3.2"
    container_name: openhab-x
    restart: unless-stopped
    labels:
      - "docker-volume-backup.stop-during-backup=openhab-x-service"
      - traefik.enable=true
      #- traefik.http.routers.openhab-x-http.rule=Host(`openhab.hb.x.duckdns.org`)
      #- traefik.http.routers.openhab-x-http.entrypoints=web
      #- traefik.http.services.openhab-x-http.loadbalancer.server.port=8080
      - traefik.http.routers.openhab-x-https.rule=Host(`openhab.hb.x.duckdns.org`)
      - traefik.http.routers.openhab-x-https.tls=true
      - traefik.http.routers.openhab-x-https.tls.certresolver=duckdns
      - traefik.http.routers.openhab-x-https.entrypoints=websecure
      - traefik.http.services.openhab-x-https.loadbalancer.server.port=8443
      - traefik.http.services.openhab-x-https.loadbalancer.server.scheme=https
      - traefik.http.routers.openhab-x-http.middlewares=redirect-to-https
      #- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https

    ports:
    #  - "8081:8080"
      - "8444:8443"
    #  - "9004:9001"
    #network_mode: host
    networks:
      vlan50:
        ipv4_address: 192.168.5.201
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/timezone:/etc/timezone:ro"
      - "openhab_addons:/openhab/addons"
      - "openhab_conf:/openhab/conf"
      - "openhab_userdata:/openhab/userdata"
    environment:
      CRYPTO_POLICY: "unlimited"
      EXTRA_JAVA_OPTS: "-Duser.timezone=Europe/Berlin"
      OPENHAB_HTTP_PORT: "8080"
      OPENHAB_HTTPS_PORT: "8443"

  frontail:
    image: welteki/frontail-openhab:latest
    container_name: frontail-openhab-x
    labels:
      - traefik.enable=true
      - traefik.http.routers.frontail-x.rule=Host(`log.openhab.hb.x.duckdns.org`)
      - traefik.http.routers.frontail-x.tls=true
      - traefik.http.routers.frontail-x.tls.certresolver=duckdns
      - traefik.http.routers.frontail-x.entrypoints=websecure
      - traefik.http.services.frontail-x.loadbalancer.server.port=9001
    volumes:
      - "openhab_userdata:/openhab/userdata:ro"
    #ports:
    #  - 9001:9001
    networks:
      vlan50:
        ipv4_address: 192.168.5.209

  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto-x
    labels:
      - "docker-volume-backup.stop-during-backup=openhab-x-service"
      - traefik.enable=true
      - traefik.http.routers.mosquitto-x.rule=Host(`mqtt.hb.x.duckdns.org`)
      - traefik.http.routers.mosquitto-x.entrypoints=web
      - traefik.http.services.mosquitto-x.loadbalancer.server.port=1883
    volumes:
      - /var/lib/docker/custom/mosquitto/config:/mosquitto/config
      - mosquitto_data:/mosquitto/data
      - mosquitto_log:/mosquitto/log
    ports:
      - 1883:1883
      - 9001:9001
    networks:
      vlan50:
        ipv4_address: 192.168.5.202

  zwave-js-ui:
    container_name: zwave-js-ui-x
    image: zwavejs/zwave-js-ui:9.25.0
    restart: unless-stopped
    labels:
      - "docker-volume-backup.stop-during-backup=zwave-js-ui-x-service"
      - traefik.enable=true
      - traefik.http.routers.zwave-x.rule=Host(`zwave.mqtt.hb.x.duckdns.org`)
      - traefik.http.routers.zwave-x.tls=true
      - traefik.http.routers.zwave-x.tls.certresolver=duckdns
      - traefik.http.routers.zwave-x.entrypoints=websecure
      - traefik.http.services.zwave-x.loadbalancer.server.port=8091
    networks:
      vlan50:
        ipv4_address: 192.168.5.203
    volumes:
      - zwave-config:/usr/src/app/store
    #ports:
      #- '8091:8091' # port for web interface
      #- '3000:3000' # port for Z-Wave JS websocket server

  zigbee2mqtt:
    container_name: zigbee2mqtt-x
    image: koenkk/zigbee2mqtt:1.40.2
    restart: unless-stopped
    labels:
      - traefik.enable=true
      - traefik.http.routers.zigbee-x.rule=Host(`zigbee.mqtt.hb.x.duckdns.org`)
      - traefik.http.routers.zigbee-x.tls=true
      - traefik.http.routers.zigbee-x.tls.certresolver=duckdns
      - traefik.http.routers.zigbee-x.entrypoints=websecure
      - traefik.http.services.zigbee-x.loadbalancer.server.port=8080
    volumes:
        #- ./data:/app/data
        - zigbee2mqtt_data:/app/data
        #- /run/udev:/run/udev:ro #detects shanges like /dev/ttyUSB0
    #ports:
        # Frontend port
        #- 8081:8080
    environment:
        - TZ=Europe/Berlin
    #group_add:
    #    - dialout
    #user: 1000:1000
    networks:
      vlan50:
        ipv4_address: 192.168.5.205


volumes:
  openhab_addons:
    driver: local
  openhab_conf:
    driver: local
  openhab_userdata:
    driver: local

  mosquitto_data:
    driver: local
  mosquitto_log:
    driver: local

  zwave-config:
    name: zwave-config

  zigbee2mqtt_data:

networks:
  vlan50:
    external: true

Liebe Grüße

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: TLS und lockaler DNS

Beitrag von udo1toni »

Mit dem eigentlichen Problem kann ich Dir leider nicht helfen, aber eine Anmerkung bezüglich Deines Containers:
openHAB sollte ganz dringend im Host-Netz laufen, sonst funktionieren ZeroConf, mDNS, Avahi usw. nicht (letztlich alles was auf Multicast aufsetzt).
Da die Ports über die Environment Variablen frei gesetzt werden können, kannst Du die Ports dennoch auf Dir genehme Ports verschieben.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Oekel
Beiträge: 201
Registriert: 28. Aug 2021 10:34
Answers: 0

Re: TLS und lockaler DNS

Beitrag von Oekel »

Musste lange hin und her überlegen bezüglich deines Kommentares...

Aber ich verwende im meinem vlan50 den Treibertypen "ipvlan", welcher ähnlich wie "macvlan" eine eigene IP nach außen liefert.
Somit sollte OpenHAB keine Probleme mit Avahi, ZeroConf, SSDP und anderen Multicast-Protokollen haben, da es sich ja so verhällt, als wäre es ein physisches Gerät.

Und da ich bewusst ALLE SmartHome-Geräte genau in dieses vlan50 stecke, passt es doch ebenfalls.

Einwände?

(Mir geht es auch darum, dass ich RuckZuck bei einem unbekannten Hersteller das ganze vlan ohne Internet schalten kann)

Benutzeravatar
udo1toni
Beiträge: 15240
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: TLS und lockaler DNS

Beitrag von udo1toni »

Wenn das sichergestellt ist, prima. Mit VLAN habe ich in Docker noch nicht gearbeitet :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Oekel
Beiträge: 201
Registriert: 28. Aug 2021 10:34
Answers: 0

Re: TLS und lockaler DNS

Beitrag von Oekel »

Möchte eucb natürlich eine funktionierende Konfiguration nicht vorenthalten:

Code: Alles auswählen

services:
  openhab:
    image: "openhab/openhab:4.3.2"
    container_name: openhab-test
    restart: unless-stopped
    labels:
      - traefik.enable=true
      - traefik.http.routers.openhab-test.rule=Host(`openhab.test.myName.duckdns.org`)
      - traefik.http.routers.openhab-test.tls=true
      - traefik.http.routers.openhab-test.tls.certresolver=duckdns
      - traefik.http.routers.openhab-test.entrypoints=websecure
      - traefik.http.services.openhab-test.loadbalancer.server.port=8080
      # Middleware für den Redirect von HTTP auf HTTPS
      - traefik.http.routers.openhab-test-http.entrypoints=web
      - traefik.http.routers.openhab-test-http.rule=Host(`openhab.test.myName.duckdns.org`)
      - traefik.http.routers.openhab-test-http.middlewares=openhab-test-https-redirect
      - traefik.http.middlewares.openhab-test-https-redirect.redirectscheme.scheme=https
      - traefik.http.middlewares.openhab-test-https-redirect.redirectscheme.permanent=true
    ports:
      - "8080:8080"
      - "8443:8443"
      - "9001:9001"
    #network_mode: host
    networks:
      vlan50:
        ipv4_address: 192.168.5.221
    volumes:
Und ja ich lasse bewusst traefik nun das TSL Handling machen.

myName.duckdns.org ist öffentlich registriet und sorgt dafür, dass ich ein gültiges Zertifkat von Lets Encrypt bekomme. Intern läuft noch ein bind9 DNS, der Mittels Wildcast alls *.myName.duckdns.org auf den Container mit traefik linkt und damit geht es dann weiter.

Wenn ich es richtig verstanden habe, bräuchte ich (außnahme OH) nicht mals mehr ein netzwer nach außen sondern lediglich ein pseudonetzwerk, indem traefik und der entsprechende Container, welcher mit den Labels gefunden werden soll enthalten sind. PS: man kann Container wie traefik auch in mehreren Netzwerken bekannt machen (So vermeide ich dass ich ihn für jedes VLAN aufsetzen muss)

Oekel
Beiträge: 201
Registriert: 28. Aug 2021 10:34
Answers: 0

Re: Traefik und frontail

Beitrag von Oekel »

Code: Alles auswählen

  frontail:
    image: welteki/frontail-openhab:latest
    container_name: frontail-openhab-test
    labels:
      - traefik.enable=true
      - traefik.http.routers.frontail-test.rule=Host(`log.openhab.test.myName.duckdns.org`)
      - traefik.http.routers.frontail-test.tls=true
      - traefik.http.routers.frontail-test.tls.certresolver=duckdns
      - traefik.http.routers.frontail-test.entrypoints=websecure
      - traefik.http.services.frontail-test.loadbalancer.server.port=9001
      # Middleware für den Redirect von HTTP auf HTTPS
      - traefik.http.routers.frontail-test-http.entrypoints=web
      - traefik.http.routers.frontail-test-http.rule=Host(`log.openhab.test.myName.duckdns.org`)
      - traefik.http.routers.frontail-test-http.middlewares=frontail-test-https-redirect
      - traefik.http.middlewares.frontail-test-https-redirect.redirectscheme.scheme=https
    volumes:
      - "openhab_userdata:/openhab/userdata:ro"
    ports:
      - 9001:9001

läuft auch...

Oekel
Beiträge: 201
Registriert: 28. Aug 2021 10:34
Answers: 0

Re: Traefik und MQTT

Beitrag von Oekel »

Code: Alles auswählen

  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto-hb
    labels:
      - "docker-volume-backup.stop-during-backup=openhab-hb-service"
      - traefik.enable=true
      - traefik.tcp.routers.mosquitto-hb.rule=HostSNI(`mqtt.hb.myName.duckdns.org`)
      - traefik.tcp.routers.mosquitto-hb.entrypoints=websecure
      - traefik.tcp.services.mosquitto-hb.loadbalancer.server.port=1883
Der Läuft leider noch nicht. Ich vermute man muss traefik erst mal den MQTT Entpoint beibringen, denn mittels http oder tcp kommt man hier nicht weiter....

Antworten