Devolo beschneidet die weiße Variante (Devolo dLAN 1200+ Wifi ac) des dLAN Routers/Accesspoints mit Ihrer Firmware um einige interessante Funktionen, die dem schwarzen Pro-Modell (Devolo dLAN pro 1200+ WiFi ac) vorbehalten bleiben. Konkret war dies für mich die Möglichkeit mehrere WLAN SSIDs aufzuspannen und diese in eigene VLANs weiterzuleiten. Mit der Standard-Firmware von Devolo ist dies unmöglich, das WLAN-Gastnetz ist für mich kein ausreichender Ersatz, die freie Firmware OpenWRT aber schon.
Nachstehend wird die Installation des Snapshot r19537 von OpenWRT beschrieben. Nach erfolgreicher Installation ist das Devolo dLAN 1200+ Wifi ac in der Lage mit anderen PLC-Geräten des gleichen Standards zu kommunizieren und bietet die Flexibilität von OpenWRT. Dennoch sollte man sich bezüglich des Komforts der Kopplung von dLAN-Geräten Einschränkungen bewusst sein. Während die Kopplung von zwei oder mehr dLAN-Geräten bisher komfortabel per Knopfdruck erfolgen konnte, war mir dies nach dem Update auf OpenWRT nicht mehr möglich. Abhilfe schafft die Kopplung der Geräte mit Hilfe der Open-PLC-Tools von Qualcomm (siehe Abschnitt PLC-Adapterkopplung). Künftige Updates von OpenWRT sind sehr wahrscheinlich, die jeweilige Firmware muss jedoch selbst übersetzt werden, sofern die Powerline-Funktionalität benötigt wird.
An dieser Stelle möchte ich auf die Quellen am Ende der Anleitung verweisen. Hier stehen vertiefende Informationen zu einzelnen Aspekten zur Verfügung, da dies die Personen oder Personengruppen sind, welche sich für die Portierung von OpenWRT oder die Vereinfachung von Installationsschritten verantwortlich zeichnen und denen Lob und Anerkennung gebühren. Und selbstverständlich ist diese Liste nicht annähernd vollständig.
Nachfolgende Anleitung basiert auf meinen Erfahrungen bei der Installation von OpenWRT mit PLC-Firmware auf einem Devolo dLAN 1200+ Wifi ac. Bitte beachten Sie, dass ich jedwede Verantwortung für eventuelle Gerätedefekte ablehne und Sie keinen Support der Firma Devolo erwarten sollten!
1. Erstellung eines OpenWRT Build-Systems
Zur späteren Einbindung der PLC-Quellen ist es leider erforderlich, dass wir OpenWRT einmal aus den Quellen übersetzten. Zunächst ist ein sogenanntes Build-System zu erzeugen. Näheres zur Erzeugung eines solchen Systems kann unter Build system setup nachgelesen werden.
Nachfolgend werden die Schritte auf das Wesentlichste beschränkt. Als Betriebssystem kommt Ubuntu 22.04 LTS zum Einsatz, dessen vollständige Installation vorausgesetzt wird, wahlweise direkt auf der Hardware oder in einer virtuellen Maschine. Zudem muss der angemeldete Benutzer über das Recht verfügen als Systemverwalter (sudo) zu agieren.
1.1. Linux auf den aktuellen Stand bringen
Wie vor allen Installationen sollten zunächst die Paketquellen aktualisiert und dann das System auf den letzten Stand gebracht werden:
user@linux:~$ sudo apt update && sudo apt upgrade
Bei größeren Änderungen/Aktualisierungen (z.B. neuer Kernel) empfehle ich zusätzlich einen Neustart des Systems:
user@linux:~$ sudo reboot
1.2 Installation notwendiger Pakete
Gemäß den Anweisungen zur Erzeugung eines OpenWRT Build Setups sind die folgenden Pakete notwendig, ergänzt um Dateien zur Extraktion der PLC Firmware:
user@linux:~$ sudo apt install binwalk build-essential ccache curl ecj fastjar file g++ gawk \
gettext git java-propose-classpath libelf-dev libncurses5-dev \
libncursesw5-dev libssl-dev python2 python2.7-dev python3 unzip wget \
python3-distutils python3-setuptools python3-dev rsync subversion \
swig time xsltproc zlib1g-dev
Nach ordnungsgemäßer Installation sind die vorbereitenden Arbeiten am Betriebssystem abgeschlossen.
2. OpenWRT Vorkonfiguration
2.1 Lokale Kopie des OpenWRT Repository erstellen
Ein Repository ist die Bezeichnung für einen Speicherort. Die offiziellen Sourcecodes von OpenWRT können u.a. bei Github heruntergeladen werden. Die Erzeugung einer lokalen Kopie geschieht mit:
user@linux:~$ git clone https://github.com/openwrt/openwrt.git
Klone nach 'openwrt' …
remote: Enumerating objects: 599459, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 599459 (delta 0), reused 0 (delta 0), pack-reused 599458
Empfange Objekte: 100% (599459/599459), 218.15 MiB | 6.91 MiB/s, fertig.
Löse Unterschiede auf: 100% (404181/404181), fertig.
Im Benutzerverzeichnis des Benutzers user wurde nun ein Unterverzeichnis mit dem Name openwrt angelegt. Dieses enthält bereits die Grundstruktur von OpenWRT.
2.2 PLC Tools für Devolo dLAN herunterladen
Seitens Devolo existiert ein Devolo PLC Github Repository, allerdings ist dies schon vier Jahre alt und der Weg zum Ziel ist schwerer. Daher empfehle ich einen Fork, das Repository von garyttirn. Den Link zu den Dateien fügen wir den OpenWRT Paketquellen hinzu.
user@linux:~$ cd openwrt
user@linux:~/openwrt$ echo "src-git dlan https://github.com/garyttirn/dlan-openwrt.git" >> feeds.conf.default
An dieser Stelle ist wichtig zu wissen, dass aus diesem Repository zwar die Tools für die spätere Konfiguration von PLC geladen werden können, also z.B. für das Setzen des PLC Kennworts, aber nicht die PLC Firmware!
2.3 Update der Pakete und Installation von symbolischen Links
user@linux:~/openwrt$ ./scripts/feeds update -a
Die letzten Zeilen der Konsolenausgabe sehen in etwa wie folgt aus:
Collecting package info: done
Collecting target info: done
Create index file './feeds/luci.index'
Collecting package info: done
Collecting target info: done
Create index file './feeds/routing.index'
Collecting package info: done
Collecting target info: done
Create index file './feeds/telephony.index'
Collecting package info: done
Collecting target info: done
Create index file './feeds/dLAN.index'
Collecting package info: done
Collecting target info: done
user@linux:~/openwrt$ ./scripts/feeds install -a
Am Ende des zweiten Durchlaufs sah die Konsolenausgabe wie folgt aus:
Collecting package info: done
Installing all packages from feed packages.
Installing all packages from feed luci.
Installing all packages from feed routing.
Installing all packages from feed telephony.
Installing all packages from feed dLAN.
Achten Sie bitte bei der Ausgabe auf Fehler bzw. möglichweise unerfüllte Abhängigkeiten. Sofern diese auftauchen, dann wiederholen Sie eine oder beide Anweisungen einfach nochmals. Falls es dann noch zu Fehlermeldungen kommt, dann schlagen Sie diese bitte auf der Webseite von OpenWRT, dem Wiki oder in den Foren nach.
Grundsätzlich könnte an diesem Punkt bereits mit dem Bau der neuen OpenWRT Firmware begonnen werden, allerdings muss dann auf die PLC Funktionalität verzichtet werden.
3. PLC Firmware
An die Firmware des Adapters von Devolo zu kommen ist in meinen Augen der schwierigste Schritt. Aber auch hier hat der findige Andre Borie mit seinem Skript dLAN-1200-ac-firmware-downloader eine pfiffige Lösung geschaffen. Nachfolgende Erläuterungen nutzen die Logik und Struktur des Skripts, ohne es aber direkt zu benutzen.
3.1 Beschaffung der PLC-Firmware von Devolo
Die Firma Devolo bietet leider kein Debian Paket mit der Adapter-Firmware mehr an (Stand: 17.03.2024). Allerdings kann die aktuelle Firmware von der Webseite in Form einer Binärdatei heruntergeladen werden. Mit Stand 17.03.2024 ist dies die Version 6.0.1 (siehe Link unten).
3.2 Extraktion der Firmware
Die heruntergeladene BIN-Datei legen wir im Ordner /tmp/dLAN ab und extrahieren mit folgendem Befehl:
user@linux:~/openwrt$ binwalk /tmp/dlan/delos_dlan-1200-ac_6.0.1_2023-09-06.bin -e -C /tmp/dlan/
Für den Devolo dLAN 1200+ Wifi AC benötigen wir zwei Dateien aus dem Unterverzeichnis /tmp/dLAN/EXTRAHIERTE_FIRMWARE_PFAD/squashfs-root/lib/firmware/plc/dLAN-pro-1200-ac der extrahierten Firmware:
- MAC-7500-v2.8.0-01-NW6__-X-CS.nvm
- qca7500-pib15-devolo-mt2673.pib
Diese beiden Dateien kopieren wir in die Dateistruktur des OpenWRT build systems:
user@linux:~/openwrt$ cp /tmp/dlan/_delos_dlan-1200-ac_6.0.1_2023-09-06.bin.extracted/squashfs-root/lib/firmware/plc/dlan-pro-1200-ac/{*mt2673.pib,MAC-7500-v2.8.0-01-NW6__-X-CS.nvm} feeds/dlan/dlan-fw/qca/devolo,dlan-pro-1200plus-ac/
Die Pfade können mit jeder neuen Firmwareversion natürlich leicht schwanken, die grundsätzliche Vorgehensweise ist jedoch gleich.
4. OpenWRT Firmware erstellen
Nach der Vorarbeit kann nun eine OpenWRT Firmware inkl. PLC-Unterstützung kompiliert werden. Das unter OpenWRT auszuwählende Gerät trägt den Namen "Devolo dLAN pro 1200+ Wifi AC". Lassen Sie sich von dem Namen nicht verunsichern. Obwohl der Name des Pro-Geräts von Devolo benutzt wird, funktioniert diese Firmware ebenfalls für die Non-Pro-Version, da die verwendete Hardware identisch ist.
Zunächst sorgen wir dafür, dass der PLC Feed (Firmware und Tools) ebenfalls mit in die zu erstellende Firmware aufgenommen werden.
user@linux:~/openwrt$ echo -e "CONFIG_TARGET_ath79_generic_DEVICE_devolo_dlan-pro-1200plus-ac=y\n
CONFIG_TARGET_PROFILE="DEVICE_devolo_dlan-pro-1200plus-ac"\n
CONFIG_FEED_dlan=y\n
CONFIG_PACKAGE_dlan-fw-pro-1200plus-ac=y\n
CONFIG_PACKAGE_dlan-plc=y" >> .config
Nun können wir die Firmware mit den folgenden Anweisungen erstellen:
user@linux:~/openwrt$ make download
Nach einer kurzen Weile öffnet sich das Konfigurationsfenster, in welchem bereits das korrekte Zielsystem (Target System) und Zielprofil (Target Profile) ausgewählt sind.
Unter OpenWRT selektieren Konfigurationsprofile für Snapshots nicht automatisch die graphische Oberfläche LuCI ein, daher sollte dies unter dem Menüpunkt LuCI nachgeholt werden. Selbstverständlich können auch weitere Module an dieser Stelle konfiguriert werden.
Im Konfigurationsmenü kann nun die neue Konfiguration über den Menüpunkt "Save" gespeichert werden. Durch mehrmaliges Anwählen des Menüpunkts "Exit" wird die Konfigurationsoberfläche verlassen.
Kompiliert wird die Konfiguration nun mit folgendem Befehl:
user@linux:~/openwrt$ make -j1 V=s
Die Ausführung dieses Befehls kann eine ganze Weile dauern. Dabei sorgt der Parameter V=s dafür, dass viel Information zu den einzelnen Schritten am Bildschirm angezeigt wird. Dies erleichtert die spätere Fehlersuche, sofern der Vorgang fehlschlägt.
Falls später Änderungen an der Konfiguration vorgenommen werden sollten, dann kann über den Befehl "make menuconfig" die Konfigurationsoberfläche erneut aufgerufen werden. Anschließend muss die Kompilation erneut durchgeführt werden. Ein Weg zur Vereinfachung ist die Nutzung des ImageBuilders von OpenWRT, auf welchen aber an dieser Stelle nicht eingegangen wird. Informationen dazu finden sich auf der Webseite von OpenWRT.
5. Flashen des dLAN Adapters
Der sicherste Weg zur Installation der neuen OpenWRT Firmware führt über TFTP (Trivial File Transfer Protocol). Zur Installation der Firmware auf dem Adapter benötigen wir einen sog. TFTP Server. Programme dieser Art gibt es für Linux, Windows und MacOS kostenlos oder als kommerzielle Varianten. Unter Ubuntu Linux kann man dazu z.B. advanced TFTP einsetzen, dessen Einsatz und Konfiguration im Ubuntuusers Wiki beschrieben ist. Daher wird hier auf die Konfiguration nicht weiter eingegangen und es wird ein lauffähiger TFTP Server vorausgesetzt.
Dem TFTP Server weisen Sie in einem ersten Schritt die statische IP4-Adresse 192.168.0.100 mit einer Subnetzmaske 255.255.255.0 (24) zu. Das im Abschnitt 4 erzeugte Firmware-Image finden wir im Ordner ~/openwrt/bin/targets/ath79/generic mit dem Namen "openwrt-ath79-generic-devolo_dlan-pro-1200plus-ac-squashfs-sysupgrade.bin".
Der TFTP Client auf dem Devolo Gerät sucht beim Boot nach einer Datei names "uploadfile". Nun kopieren wir die Datei "...sysupgrade.bin" an den Ort, auf welchen der TFTP Server zugreifen kann, im Falle von Advanced TFTP wäre dies standardmäßig /srv/tftp/ und benennen diese sogleich in "uploadfile" um.
user@linux:~/openwrt$ cp ~/openwrt/bin/targets/ath79/generic/openwrt-ath79-generic-devolo_dlan-pro-1200plus-ac-squashfs-sysupgrade.bin /srv/tftp/uploadfile
Im nächsten Schritt stellen Sie die physikalische Verbindung zwischne einem der beiden Ports des Devolo-Adapters und Ihrer genutzten Netzwerkschnittstelle am Computer her.
Dann schalten Sie das Devolo-Gerät aus und halten beim Wiedereinschalten die Resettaste gedrückt (am besten über eine Mehrfachsteckdose lösen). Warten Sie solange, bis die Home/WiFi LED einige Male rot/weiß geblinkt hat, dann lassen Sie die Resettaste los. Nun warten Sie bis die LEDs aufhören rot/weiß zu blinken.
Der Flash sollte abgeschlossen sein und das Gerät sollte nun booten. Falls irgendetwas nicht funktioniert hat, dann wiederholen Sie den Prozess einfach erneut. Der TFTP Client ist also das Backup, falls bei irgendeinem späteren Update etwas komplett schief laufen sollte (sog. Fallback Lösung). Spätere Updates können Sie einfach über die Weboberfläche oder die Kommandozeile (CLI) vornehmen.
Das mit der OpenWRT versehene Gerät trägt nun die statische IP4 Adresse 192.168.1.1. Ändern Sie also Ihre IP4 Adresse auf dem Computer z.B. in 192.168.1.100 und versuchen Sie eine erste Verbindungsaufnahme via Kommando ping oder rufen in einem Webbrowser das Konfigurationsinterface direkt auf. Die Zugangsdaten für die erste Anmeldung lauten root (Benutzer) und einem leeren Kennwort.
Sofern alles funktioniert hat, dann sehen Sie eine Übersichtsseite (hier ein Ausschnitt), die der folgenden ähneln sollte:
Lassen Sie sich nicht von der Anzeige unter dem Punkt Model verwirren. Es handelt sich um die weiße, also die non-pro Variante von Devolo (dLAN 1200+ Wifi ac), welche aber durch OpenWRT zur Pro-Variante mutiert ist. Nun fehlt nur noch die Inbetriebnahme der PLC-Verbindung.
Weitere Information sind auf der OpenWRT Geräteseite der Pro-Variante zu finden.
6. Auslesen des geheimen PLC-Schlüssels
Wie am Anfang dieses Artikels kurz beschrieben, ist oder war mir eine Kopplung des OpenWRT dLANs mit anderen dLAN Geräten (z.B. devolo dLAN 1200+) via Tastendruck nicht möglich. Daher muss der auf dem anderen dLAN Gerät (Original-Firmware des Herstellers) der PLC-Schlüssel ausgelesen werden. Dies kann grundsätzlich auf jedem Linux-PC unter Zuhilfenahme des Open Powerline Toolkits von Qualcomm Atheros geschehen.
6.1 Installation der open-plc-utils
user@linux:~$ git clone https://github.com/qca/open-plc-utils
user@linux:~$ cd open-plc-utils
user@linux:~/open-plc-utils$ make
Nach erfolgreicher Kompilation installieren Sie die Tools in den Ordner /usr/local/bin via:
user@linux:~/open-plc-utils$ sudo make install
Kompilieren und installieren Sie die man-Pages in den Ordner /usr/share/man/man1 via:
user@linux:~/open-plc-utils$ sudo make manuals
6.2 Auslesen des geheimen Schlüssels
Scannen Sie das aktuelle PLC-Netzwerk, Sie müssen über Ethernet/WLAN mit demselben Ethernet-Segment verbunden sein wie die PLC. Die zu wählende Schnittstelle (im Beispiel eth0) hängt von Ihrem PC ab.
user@linux:~$ sudo plctool -i eth0 -m all
Eine mögliche Ausgabe könnte wie folgt aussehen. Die Ethernet-Adressen sind von mir bearbeitet worden, siehe roter Buchstabe X.
eth0 FF:FF:FF:FF:FF:FF Fetch Network Information
eth0 30:D3:2D:XX:XX:XX Found 1 Network(s)
source address = 30:D3:2D:XX:XX:XX
network->NID = 6E:ED:DF:82:15:A3:03
network->SNID = 2
network->TEI = 1
network->ROLE = 0x02 (CCO)
network->CCO_DA = 30:D3:2D:XX:XX:XX
network->CCO_TEI = 1
network->STATIONS = 0
Der PLC-Adapter wurde erfolgreich gefunden, nun speichern wir seine PLC-Konfiguration (inkl. PLC Schlüssel) in einer temporären Datei ab.
user@linux:~$ sudo plctool -i eth0 -p /tmp/remote.pib 30:D3:2D:XX:XX:XX
eth0 30:D3:2D:XX:XX:XX Read Module from Memory
Um nun den PLC-Schlüssel im Klartext zu sehen geben wir den Inhalt der abgespeicherten Datei remote.pib aus:
user@linux:~$ chkpib -v /tmp/remote.pib
------- /tmp/remote.pib -------
PIB 0-0 21384 bytes
MAC 30:D3:2D:XX:XX:XX
DAK 26:CA:8C:A2:D9:08:5F:DD:B5:A6:62:22:2A:17:56:41
NMK DE:CC:87:55:F4:34:18:98:EF:57:21:9D:1C:3A:9B:E4
NID 6E:ED:DF:82:15:A3:03
Security level 0
NET
MFG devolo dLAN 1200+ [MT2853]
USR Single
CCo Auto
MDU N/A
Es handelt sich also um den Adapter Devolo dLAN 1200+ mit dem geheimen Schlüssel (NMK) DE:CC:87:55:F4:34:18:98:EF:57:21:9D:1C:3A:9B:E4. Diese Information wird nun in den geflashten OpenWRT Adapter Devolo dLAN 1200+ Wifi AC übertragen.
6.3 Aktualisieren des PLC-Schlüssels unter OpenWRT
Wechseln Sie nun zu dem mit OpenWRT geflashten dLAN Gerät und verwenden Sie das Tool modpib zur Aktualisierung des PLC-Schlüssels.
root@OpenWrt:~$ modpib -N DE:CC:87:55:F4:34:18:98:EF:57:21:9D:1C:3A:9B:E4 /lib/firmware/plc/user.pib
Zur Kontrolle lassen Sie die Datei user.pib mit dem Tool chkpib ausgeben:
root@OpenWrt:~$ chkpib -v /lib/firmware/plc/user.pib
------- /lib/firmware/plc/user.pib -------
PIB 0-0 21384 bytes
MAC B8:BE:F4:XX:XX:XX
DAK 5C:A6:7E:27:DB:68:AE:67:B3:C6:6F:F5:A5:0F:F0:4F
NMK DE:CC:87:55:F4:34:18:98:EF:57:21:9D:1C:3A:9B:E4
NID 6E:ED:DF:82:15:A3:03
Security level 0
NET
MFG devolo dLAN 1200+ WiFi ac [MT2910;X]
USR OpenWrt
CCo Auto
MDU N/A
Zur Aktivierung des neuen Schlüssels starten Sie das dLAN-Gerät oder den PLC Dienst neu:
root@OpenWrt:~$ /etc/init.d/plc restart
6.4 Test des PLC-Netzwerks
Wie gut die Datenübertragung des Netzwerks zwischen dem dLAN 1200+ und dem dLAN 1200+ WiFi ac via PLC funktioniert, dieses können Sie mit dem folgenden Kommando herausfinden:
root@OpenWrt:~# plctool -i eth0.1 -m all
eth0.1 FF:FF:FF:FF:FF:FF Fetch Network Information
eth0.1 B8:BE:F4:XX:XX:XX Found 1 Network(s)
source address = B8:BE:F4:XX:XX:XX
network->NID = 6E:ED:DF:82:15:A3:03
network->SNID = 2
network->TEI = 8
network->ROLE = 0x00 (STA)
network->CCO_DA = 30:D3:2D:XX:XX:XX
network->CCO_TEI = 1
network->STATIONS = 1
station->MAC = 30:D3:2D:XX:XX:XX
station->TEI = 1
station->BDA = 10:C3:7B:XX:XX:XX
station->AvgPHYDR_TX = 146 mbps Alternate
station->AvgPHYDR_RX = 158 mbps Alternate
eth0.1 30:D3:2D:XX:XX:XX Found 1 Network(s)
source address = 30:D3:2D:XX:XX:XX
network->NID = 6E:ED:DF:82:15:A3:03
network->SNID = 2
network->TEI = 1
network->ROLE = 0x02 (CCO)
network->CCO_DA = 30:D3:2D:XX:XX:XX
network->CCO_TEI = 1
network->STATIONS = 1
station->MAC = B8:BE:F4:XX:XX:XX
station->TEI = 8
station->BDA = B8:BE:F4:XX:XX:XX
station->AvgPHYDR_TX = 162 mbps Alternate
station->AvgPHYDR_RX = 146 mbps Alternate
Je nach Qualität und Entfernung der Strecke ist dies ein akzeptables Ergebnis, Sie können bei guten Bedingungen aber auch locker 300 bis 400 mbps erzielen. Als Zubringer eines DSL-Anschlusses oder als WLAN für Gäste ist das Set damit nach meiner Meinung geeignet.
7. Quellen / Links
OpenWRT, https://www.openwrt.org
Build system setup, https://openwrt.org/docs/guide-developer/toolchain/install-buildsystem
Devolo PLC Github Repository, devolo/dLAN-openwrt https://github.com/devolo/dLAN-openwrt
Garyttirn Repository, garyttirn/dLAN-openwrt https://github.com/garyttirn/dLAN-openwrt
Andre Borie, dLAN-1200-ac-firmware-downloader https://bitbucket.org/Rjevski/dLAN-1200-ac-firmware-downloader/src/master/
Devolo, Firmware dLAN 1200+ Wifi AC Website https://www.devolo.de/support/downloads/download/dlanr-1200-wifi-ac
Qualcomm Atheros, Open Powerline Toolkits (open-plc-utils) https://github.com/qca/open-plc-utils
Wiki Ubuntuusers, Advanced TFTP https://wiki.ubuntuusers.de/advanced_TFTP/
OpenWRT, Geräteseite Devolo dLAN pro 1200 Wifi ac https://openwrt.org/toh/devolo/dlan_pro_1200_wifi_ac