#!/coding/blatt
Sammelsurium mit Schwerpunkten Linux & IT-Sicherheit

OpenWrt: mDNS über VLANs hinweg ermöglichen

Mein Heimnetzwerk habe ich aus Sicherheitsgründen in mehrere VLANs aufgeteilt. Bspw. sind meine vertrauenswürdigen Endgeräte, wie z.B. mein Notebook und Smartphone, im "trust"-VLAN und meine "smarten" Geräte, wie z.B. mein TV und Drucker, im "iot"-VLAN. Standardmäßig können Geräte im "iot"-VLAN keine direkte Verbindung zu Clients in meinen anderen VLANs aufbauen. Nun möchte ich aber trotzdem, dass meine Endgeräte z.B. meinen Drucker ohne manuelle Konfiguration finden und nutzen können. Hierfür unterstützt mein Drucker und viele andere IoT-Geräte mDNS (Zeroconf) (siehe auch AirPrint, Mopria, Bonjour etc.). Das Problem hierbei ist, dass mDNS nicht über die Grenzen eines VLANs hinweg funktioniert. Hierfür bedarf es eines sogenannten Reflectors oder Proxy. Für OpenWrt nutze ich hierzu Avahi. Hiermit können die Multicast-Anfragen von einem VLAN in andere VLANs durchgereicht werden. Wie ich das bei mir inkl. benötigten Firewallregeln umgesetzt habe, zeigt der folgende Beitrag.

Folgende Software bzw. Hardware wurde verwendet:
  • Router Flint 2 (GL-MT6000) mit OpenWrt v25.12.3
  • Google Pixel 6a mit GrapheneOS
  • Drucker HP Color LaserJet Pro M255dw
  • avahi-daemon v

Ausgangslage - VLAN-/Firewallzonen-Überblick

Mein Heimnetzwerk ist exemplarisch wie folgt aufgebaut:

OpenWrt: VLAN/-Firewallzonen-Überblick

Wie man sieht, können Clients aus dem "trust"-VLAN bzw. der dazugehörigen Firewallzone Verbindungen zu Geräten im "iot"-VLAN aufbauen. Für mDNS über VLANs hinweg benötigen wir nebst einem Reflector aber auch, dass die Clients aus den entsprechenden VLANs UDP-Verbindungen zum Router selbst über den Port 5353 herstellen können. In meinem Fall Bedarf es hierfür zusätzliche Firewallregeln, da ich standardmäßig eine Kommunikation zum Router nicht erlaube.

Avahi installieren

Mittels folgenden Befehls kann Avahi unter OpenWrt installiert werden:

apk add avahi-daemon
Terminal / Konsole

Nun ist in der /etc/avahi/avahi-daemon.conf die Reflector-Funktionalität zu aktivieren:

[reflector]
enable-reflector=yes
Datei: /etc/avahi/avahi-daemon.conf

Bei Bedarf kann man hier noch weitere Einstellungen vornehmen bzw. anpassen. Ich habe bzw. mittels der allow-interfaces-Option das Ganze auf meine beiden betroffenen VLANs beschränkt.

Danach ist der Dienst noch einmal zu restarten:

/etc/init.d/avahi-daemon restart
Terminal / Konsole

Firewallregeln für UDP-Port 5353 hinterlegen

Damit mDNS in Verbindung mit Avahi funktioniert, muss gewährleistet sein, dass beide Clients in den verschiedenen VLANs Verbindungen zum Router über UDP-Port 5353 aufbauen dürfen. Dazu habe ich folgende beide Firewallregeln unter Network - Firewall - Traffic Rules angelegt:

OpenWrt: Firewallregel für UDP-Port 5353 OpenWrt: Firewallregel für UDP-Port 5353

Beispiel: Drucker im Netzwerk finden

Da jetzt alles eingerichtet ist, kann ich nun z.B. mit meinen Android-/GrapheneOS-Smartphone mittels dem Standarddruckerdienst meinen Drucker, der sich in einem anderen VLAN befindet, auffinden und zum Drucken verwenden. In meinem Fall erfolgt dann die eigentliche Verbindung zw. Drucker und Endgerät über eine verschlüsselte IPPS-Verbindung.

Android: Drucker per mDNS suchen Android: Drucker per mDNS suchen

Fazit

Dank Avahi kann eine mDNS-Unterstützung über VLAN-Grenzen hinweg sehr einfach in OpenWrt eingerichtet werden.