Home Assistant Docker: mDNS unter Alpine Linux reparieren

Wer Home Assistant als Container betreibt, stößt bei Netzwerkdiensten wie MPD oder lokalen Skripten schnell auf ein Problem: Hostnamen mit der Endung .local werden vom System nicht aufgelöst. Das offizielle Docker-Image basiert auf Alpine Linux, welches die C-Bibliothek musl anstelle der GNU C-Bibliothek nutzt und mDNS auf Systemebene nicht standardmäßig unterstützt. Mit einem DNS-Relay auf dem Host und einer sauberen Netzwerkkonfiguration stellst du die Funktion wieder her.

Das brauchst du

  • Home Assistant als Container-Installation
  • Linux-Hostsystem mit Terminal-Zugriff (Root- oder Sudo-Rechte)
  • Installiertes dnsmasq und avahi2dns auf dem Host

1. mDNS-Dienst auf dem Host für DNS bereitstellen

Da musl in Alpine Linux keine klassische mDNS-Auflösung über nsswitch.conf erlaubt, musst du mDNS-Anfragen über reguläre DNS-Anfragen abbilden. Richte dazu auf dem Host ein Hilfswerkzeug wie avahi2dns auf einem separaten Port (beispielsweise Port 5354) ein, um Anfragen für .local-Domains zu bedienen.

2. dnsmasq als Weiterleitung konfigurieren

Konfiguriere den DNS-Dienst dnsmasq auf dem Host so, dass er auf einer internen Schnittstelle lauscht und alle Anfragen mit der Domain-Endung .local gezielt an den Port von avahi2dns weiterleitet.

# Beispiel-Konfigurationszeile in dnsmasq
server=/local/127.0.0.1#5354

Alle übrigen DNS-Anfragen für das Internet leitet dnsmasq wie gewohnt an deinen regulären Router oder DNS-Server weiter.

3. Macvlan-Netzwerk für Docker einrichten

Wenn du den Container nicht im Host-Netzwerkmodus betreibst oder eine isolierte IP-Vergabe bevorzugst, erstelle ein Macvlan-Netzwerk. Dadurch erhält der Home-Assistant-Container eine eigene virtuelle Netzwerkkarte mit eigener IP- und MAC-Adresse im lokalen Netz.

Achte darauf, dass der gewählte IP-Bereich (IP Range) außerhalb des DHCP-Vergabebereichs deines Routers liegt, um Adresskonflikte zu vermeiden.
docker network create -d macvlan \
  --subnet=192.168.10.0/24 \
  --ip-range=192.168.10.20/28 \
  --gateway=192.168.10.1 \
  -o parent=eth0 MacVlan_Network

Passe Subnetz, Schnittstelle (eth0) und Gateway an deine eigene Netzwerkumgebung an.

4. DNS-Adresse im Home-Assistant-Container hinterlegen

Weise dem Container in deiner Docker-Konfiguration (etwa in der docker-compose.yml) die IP-Adresse des Host-DNS-Dienstes zu. Dadurch schickt Alpine Linux alle Namensauflösungen direkt an deinen dnsmasq-Server, der .local-Adressen erfolgreich an avahi2dns übergibt.

Funktioniert es?

Öffne die Konsole innerhalb deines laufenden Home-Assistant-Containers und sende einen Ping-Befehl an ein Gerät mit .local-Endung im Netzwerk:

docker exec -it homeassistant ping -4 mein-geraet.local

Wenn die IP-Adresse des Geräts aufgelöst wird und Antwortpakete eingehen, greifen Systemdienste und Integrationen wie MPD wieder problemlos auf deine lokalen Adressen zu.

Wenn es nicht klappt

  • Fehlermeldung „bad address“: Der Container erreicht den DNS-Server nicht oder die Weiterleitungsregel in dnsmasq für Port 5354 ist nicht aktiv. Prüfe die Konfigurationsdatei von dnsmasq und starte den Dienst auf dem Host neu.
  • IPv6-Störungen: Bei paralleler IPv6-Nutzung schlägt die Auflösung gelegentlich fehl; teste den Verbindungsaufbau gezielt mit dem Parameter -4 beim Ping-Befehl.
  • Avahi-Reflektoren bei eigenem Netzwerk: Wenn ein eigenes Netzwerk statt des Host-Modus verwendet wird, können alternativ Reflektoren in /etc/avahi/avahi-daemon.conf aktiviert und der Dienst avahi-daemon neu gestartet werden.

Mit dieser Bridge-Lösung umgehst du die Limitierung von Alpine Linux dauerhaft und kannst netzwerkbasierte Medien- und Befehlsintegrationen ohne Einschränkungen betreiben.

Quellen: Forum: Home Assistant Community, community.home-assistant.io, community.home-assistant.io

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen