[Anleitung] WLAN-LAN Brücke (bridge), oder wie bringe ich mein ethernet-only Gerät ins Wlan

  • Hallo Leute,

    mit dieser Anleitung will ich euch einen Weg aufzeigen, wie ihr eure ethernet-only Geräte in das heimische Wlan integrieren könnt. In meinem Fall war es ein AV-Receiver der kein Wlan unterstützt, ich aber auch keinen Kabel verlegen wollte bzw. konnte.


    Vorbemerkung

    Diese Anleitung erhebt keinen Anspruch auf Vollständigkeit oder Korrektheit. Bin selbst ein Laie, der nur seinen AV-Receiver in das heimische Wlan integrieren wollte. Meine Tortur könnt ihr hier nachlesen: LAN-WLAN Brücke (bridge) unter Raspbian einrichten

    Es gibt bestimmt auch elegantere Wege um das zu erledigen. Siehe dazu das Debian Paket "bridge-utiles". Leider konnte ich die "bridge-utiles" nicht einsetzten, da sie meine Hardware nicht unterstützen. Über sachliche Korrekturen, Vorschläge und Tipps, würde ich mich freuen.


    Im Grunde beruht diese Anleitung auf zwei Kernbestandteile - zwei Proxy-Servern.


    • Der eine Proxy-Server heißt parprouted er ist für unicast TCP Verbindungen zuständig. Also alles was mit Internet zu tun hat.
    • Der andere Proxy-Server heißt mcproxy er ist für multicast UDP Verbindungen zuständig, er wird nur benötigt wenn ihr Zuhause einen UPnP/dlna Medienserver betreibt und auf den über den Ethernet-Anschluss zugreifen wollt.

    Verwendete Hard/ und Software

    Ich verwende einen "Raspberry Pi 1 B+"

    Einen Wifi Adapter "EDIMAX EW-7612UAN V2" mit den vorinstallierten Treibern "8192cu".

    Und den schon angesprochenen AV-Receiver (Yamaha RX-V675), denn es in das WLAN-Netzwerk zu integrieren gilt.


    Als Software setze ich auf Raspbian (Jessie)-lite.


    Anmerkung: ich hatte ursprünglich einen ARP-Proxy nach Framp's-Anleitung (sie ich unten verlinkt) unter Raspbian (Stretch) realisiert. Er hat auch problemlos funktioniert, aber da ich das Gefühl hatte, dass Jessie etwas runder auf dem alten Pi läuft, habe ich auf Jessie downgegradet.

    Heißt: wer Stretch einsetzt, der sollte zur Einrichtung eines unicast ARP-Proxies, Framp's-Anleitung verwenden und zur Einrichtung eines Multicast-Proxies mit dieser Anleitung weitermachen - würde mich über das Feedback freuen, ob "mcproxy" auch unter Stretch läuft - vielleicht ist er sogar in den Paketquellen?


    Vorbereitung

    Der von mir verwendete Wlan Adapter, genauer gesagt die zu dem Adapter gehörende Treiber 8192cu, bieten eine Stromsparfunktion an. Leider bewirkt die Funktion, dass es oft zu Verbindungsabbrüchen kommt. Weswegen ich sie als erstes abgeschaltet habe. Dazu mit:


    Code
    1. sudo nano /etc/modprobe.d/8192cu.conf


    die "8192cu.conf"-Datei öffnen/anlegen und dort Folgendes eintragen:

    Code
    1. # disable power management and USB suspend
    2. options 8192cu rtw_power_mgnt=0 rtw_enusbss=0


    und mit Strg-o abspeichern und Strg-x nano beenden.


    Unicast Brücke (bridge) mit Hilfe eines ARP-Proxies realisieren.

    Als erstes wollen wir mit Hilfe des Pakets "parprouted" einen ARP-Proxy realisieren. Der ARP-Proxy leitet TCP Pakete vom Interface "wlan0" auf das Interface "eth0" bzw. vice versa weiter, womit eine vollständige Internetanbindung am "eth0" Port realisiert wird. Die dazu notwendigen Anleitungen für verschiedene Raspbian Versionen habe ich unten verlinkt. Da sie alle einwandfrei funktioniert haben, habe ich mich nicht weiter damit beschäftigt. Der Vollständigkeit halber werde ich hier die einzelne Befehle aus der Anleitung zur Jessie erneut abtippen.


    Da Jassies neuer DHCP Client Daemon (DHCPCD) anscheinend nicht mit der üblicher Art der Netzwerkkonfiguration kompatibel ist, sollte zunächst der "dhcpcd" deaktiviert werden. Dazu einfach folgenden Befehl ausführen:


    Code
    1. sudo systemctl disable dhcpcd



    Als erstes werden die nötige Pakete installiert, dazu folgenden Befehl ausführen:

    Code
    1. sudo apt-get install parprouted dhcp-helper


    Um dem Kernel erlauben die IP-Pakete weiterzuleiten, muss "ip-forwarding" aktiviert werden. Dazu mit:

    Code
    1. sudo nano /etc/sysctl.conf


    die Datei "sysctl.conf" öffnen und dort folgende Zeile suchen #net.ipv4.ip_forward=1 die Raute "#" entfernen und mit Strg-o und Strg-x abspeichern. So, dass die Zeile nun wie folgt aussieht:

    Code
    1. .
    2. .
    3. net.ipv4.ip_forward=1
    4. .
    5. .
    6. .


    Dann editiert man die Datei /etc/default/dhcp-helper, so dass (so wie ich es verstehe) die ganzen DHCP Anfragen über wlan0 erfolgen (in der Anleitung heißt es relay einschalten).

    Man ersetzt die Zeile DHCPHELPER_OPTS="-b eth0" mit DHCPHELPER_OPTS="-b wlan0" so dass sie wie folgt aussieht:

    Code
    1. # relay dhcp requests as broadcast to wlan0
    2. DHCPHELPER_OPTS="-b wlan0"


    Wer den Avahi-Daemon installiert hat, der kann auch hier die mDNS Anfragen weiterleiten, in dem er die Datei /etc/avahi/avahi-daemon.conf bearbeitet und dort nach der Zeile enable-reflector sucht und den Wert "yes" hinzufügt, so dass sie wie folgt aussieht:


    Code
    1. .
    2. .
    3. [reflector]
    4. enable-reflector=yes
    5. .
    6. .
    7. .


    Zum Schluss noch das Netzwerk konfigurieren. Dazu die Datei /etc/network/interfaces öffnen und wenn man dort vorher keine besonderen Einstellungen gemacht hat, alles löschen und durch Folgendes ersetzen:



    Darin sorgt die Zeile: post-up /usr/sbin/parprouted eth0 wlan0 dafür, dass der "parprouted" rechtzeitig gestartet wird und sämtliche TCP-Pakete zwischen den beiden Interfaces "wlan0" und "eth0" weiterleitet.


    Damit ist die Brücke für einfache TCP-Verbindungen fertig. Am besten jetzt den Pi rebooten, damit alles seine Ordnung hat.


    Man kann jetzt TV-Boxen, Sat-Receiver, Drucker etc. an den Ethernet-Anschluss anschließen und sollte vollen Internet-Zugang haben. Also surfen, YouTube, Facebook etc. Das angeschlossene Gerät sollte auch in dem Wlan-Router (im meinem Fall die Fritzbox) mit einer eigener IP-Adresse sichtbar sein.


    Wer also Zuhause keinen Medienserver betreibt kann hier aufhören und sich eine Menge Arbeit ersparen.



    Multicast Brücke (bridge) mit Hilfe eines Multicast-Proxies realisieren

    Die muticast Brücke wird benötigt um multicast UDP Pakete vom Interface "wlan0" auf das Interface "eth0" bzw. vice versa weiterzuleiten. Die Pakete werden typischerweise zwischen einem Media-Server und einem Media-Client ausgetauscht. Im meinem Fall "missbrauche" ich die Fritzbox als Medienserver und der AV-Receiver dient als Media-Client für Musikstreams.


    Es gibt hier mehrere Programme, die die Weiterleitung beherrschen, das wohl beliebteste scheint "SMCRoute" zu sein (weiterführende Links dazu habe ich unten angegeben). Bei mir hat aber nur "mcproxy" den gewünschten Erfolg gebracht.


    Voraussetzung für Multicasting prüfen

    Bevor es nun ans Eingemachte geht wollen wir zuerst prüfen ob der Kernel mit der nötigen Voraussetzung kompiliert wurde.

    Dazu suchen wir in der Datei /proc/config.gz nach Zeilen CONFIG_IP_MULTICAST=y bzw. CONFIG_IP_MROUTE=y. Da die Datei /proc/config.gz als Modul realisiert wurde, muss das Modul zuerst mit sudo modprobe configs geladen werden. Hier meine Ausgabe:

    Code
    1. pi@raspberrypi:~ $ sudo modprobe configs
    2. pi@raspberrypi:~ $ zegrep -i 'mroute|multicast' /proc/config.gz
    3. CONFIG_IP_MULTICAST=y
    4. CONFIG_IP_MROUTE=y
    5. CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
    6. CONFIG_IPV6_MROUTE=y
    7. CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y


    Der Kernel wurde also mit allen nötigen Voraussetzungen für Multicasting kompiliert.


    Dann schauen wir noch ob die beiden Netzwerkschnittstellen Multicasting unterstützen. Dazu folgenden Befehl ausführen:


    Auch hier sieht man an den Zeilen "RUNNING MULTICAST" dass das jeweilige Interface Multicasting unterstützt.


    D.h. wir können mit dem aufsetzen eines Multicast-Proxy fortfahren.



    Mcproxy kompilieren und installieren

    Leider habe ich "mcproxy" nicht in den Paketquellen gefunden, somit musste ich es selber kompilieren.


    Um es zu kompilieren braucht man folgende Pakete (Achtung es installiert das halbe KDE - der Download ist über 100 MB zumindest auf meiner "lite"-Version):

    Code
    1. sudo apt-get install build-essential git qt5-qmake qt5-default


    Anschließend klont man das Git-Repo mit:

    Code
    1. git clone https://github.com/mcproxy/mcproxy.git build/mcproxy


    Nun wechselt man in das Verzeichnis build/mcproxy/mcproxy (2 x mcproxy) mit:

    Code
    1. cd build/mcproxy/mcproxy


    und kompiliert das Programm mit folgenden zwei Befehlen:

    Code
    1. qmake
    2. make


    Wenn der Compiler fertig ist, installiert man "mcproxy" mit dem Befehl:

    Code
    1. sudo make install


    Der Befehl kopiert nur die ausführbare "mcproxy"-Datei in das Verzeichnis /usr/local/bin/



    Mcproxy konfigurieren

    Nach der Installation checkt man als erstes ob das Programm alle benötigten Kernel Features findet, die es so braucht. Dies macht man mit dem Befehl sudo mcproxy -c. Bei mir sieht es wie folgt aus:


    Na wenn da überall Ok steht dann ist alles gut - denke ich mal ;-)


    Um das Programm starten zu können braucht man noch eine Konfigurationsdatei.

    Auf der GitHub-Seite des Projektes ist eine Beispielsdatei vorhanden: https://github.com/mcproxy/mcp…ster/mcproxy/mcproxy.conf


    Ich habe sie mit:

    Code
    1. wget https://raw.githubusercontent.com/mcproxy/mcproxy/master/mcproxy/mcproxy.conf


    heruntergeladen und dort den Eintrag: pinstance myProxy: eth0 ==> eth1 eth2; durch: pinstance myProxy: wlan0 ==> eth0; ersetzt, so dass sie bei mir wie folgt aussieht:



    Anschließend habe ich sie mit:

    Code
    1. sudo mv mcproxy.conf /etc

    in das /etc Verzeichnis verschoben.


    Nun kann man "mcproxy" mit dem Befehl:

    Code
    1. sudo mcproxy -f /etc/mcproxy.conf

    Bzw. wenn man es im Hintergrund starten will (der bevorzugte Weg):

    Code
    1. sudo nohup mcproxy -f /etc/mcproxy.conf &


    starten. Dabei gibt der Parameter "-f" den Pfad zur Konfigurationsdatei an.


    Wenn "mcproxy" gestartet ist, kann man die ganzen Weiterleitungen mit dem Befehl ip -s mroute verfolgen. Das sollte ungefähr wie folgt aussehen:

    Code
    1. pi@raspberrypi:/ $ ip -s mroute
    2. (192.168.178.27, 239.255.250.250) Iif: eth0 Oifs: wlan0
    3. 1 packets, 135 bytes
    4. (192.168.178.65, 239.255.255.250) Iif: wlan0 Oifs: eth0
    5. 4 packets, 796 bytes


    Anmerkung: die gezeigten Weiterleitungen ist nur eine Momentaufnahme - es können auch noch mehr Weiterleitungsrouten auftauchen oder weniger - also nicht wundern, wenn die Ausgabe leer ist.



    Problembehebung

    Sollte es zu Problemen kommen, kann man "mcproxy" mit den Parameter "-dsvv" starten, dadurch wird der Debug-Modus aktiviert und man kann an der Ausgabe vielleicht erkennen wo das Problem ist. Der Befehl sieht dann wie folgt aus:

    Code
    1. sudo mcproxy -dsvv -f /etc/mcproxy.conf



    Desweiteren kann man schauen ob "mcproxy", die nötigen Kernelparameter richtig gesetzt hat:

    Code
    1. pi@raspberrypi:/ $ sudo sysctl -a | grep 'mc_' | grep -v ipv6 | egrep 'eth0|wlan0'
    2. sysctl: reading key "net.ipv6.conf.all.stable_secret"
    3. sysctl: reading key "net.ipv6.conf.default.stable_secret"
    4. sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
    5. sysctl: reading key "net.ipv6.conf.lo.stable_secret"
    6. sysctl: reading key "net.ipv6.conf.wlan0.stable_secret"
    7. net.ipv4.conf.eth0.mc_forwarding = 1
    8. net.ipv4.conf.wlan0.mc_forwarding = 1


    Wichtig dabei ist net.ipv4.conf.eth0.mc_forwarding = 1 und net.ipv4.conf.wlan0.mc_forwarding = 1



    Außerdem kann man versuchen "mcproxy" mit dem Parameter "-r" zu starten:

    Code
    1. sudo nohup mcproxy -r -f /etc/mcproxy.conf &

    Der Parameter "-r" bedeutet laut Hilfe:

    Code
    1. -r
    2. Reset the reverse path filter flag, to accept data from
    3. foreign subnets.



    Der Autor? empfiehlt auch (https://groups.google.com/foru…lticast-proxy/YhfT0_vUH50) folgende Parameter in die Datei /etc/sysctl.conf einzutragen:

    Code
    1. net.ipv4.conf.all.rp_filter = 0
    2. net.ipv4.conf.eth0.rp_filter = 0
    3. net.ipv4.conf.wlan0.rp_filter = 0



    McProxy als Service für systemd einrichten

    Damit "mcproxy" bei Systemstart automatisch und ordnungsgemäß gestartet wird, wollen wir ihn in "systemd" integrierten.


    Dazu die Datei "mcproxy.service" mit wget von diesem GitHub-Repo: https://github.com/Tilka/aur-m…ob/master/mcproxy.service herunterladen.

    Code
    1. wget https://github.com/Tilka/aur-mcproxy-git/raw/master/mcproxy.service


    Den Pfad zu der ausführbaren Datei "mcproxy" anpassen /usr/bin/mcproxy -> /usr/local/bin/mcproxy, sodass die Datei wie folgt aussieht:

    Code
    1. [Unit]
    2. Description=mcproxy multicast proxy for IGMP/MLD (RFC 4605)
    3. Documentation=http://mcproxy.realmv6.org/wiki/Documentation
    4. After=network.target
    5. [Service]
    6. ExecStart=/usr/local/bin/mcproxy -f /etc/mcproxy.conf
    7. [Install]
    8. WantedBy=multi-user.target


    Anschließend die Datei mit:

    Code
    1. sudo mv mcproxy.service /etc/systemd/system


    nach /etc/systemd/system verschieben.


    Nun muss der Dienst noch aktiviert werden, dazu folgenden Befehl ausführen:

    Code
    1. sudo systemctl enable mcproxy.service


    Zum Schluss kann man es mit:

    Code
    1. sudo systemctl start mcproxy.service


    starten. Ich habe hier einen Reboot durchgeführt, um zu sehen ob der Dienst auch wirklich ordnungsgemäß und automatisch gestartet wird.


    Noch ein paar hilfreiche Befehle

    Um den aktuellen Status von "mcproxy" zu sehen einfach folgenden Befehl ausführen:

    Code
    1. sudo systemctl status mcproxy


    Um die Log-Messages zu sehen ("-u" steht für Unit):

    Code
    1. sudo journalctl -u mcproxy



    Weiterführende Links

    ARP-Poxy

    Framp's Anleitung (für Stretch): https://www.linux-tips-and-tri…-wlan-kabel-bruecke-bauen

    Anleitung (für Jessie): https://github.com/a2retrosyst…ernet-II-and-Raspberry-Pi

    Debian-Wiki Anleitung (für Wheezy): https://wiki.debian.org/BridgeNetworkConnectionsProxyArp



    Multicast

    McProxy

    Projectseite: https://mcproxy.realmv6.org/trac/

    Dokumentation: https://mcproxy.realmv6.org/trac/wiki/Documentation

    Projektseite auf GitHub: https://github.com/mcproxy/mcproxy

    SMCRoute

    Ist ein sehr beliebtes Programm zur Multicastrouting.

    Hier gibt der Autor von SMCRoute weitere Informationen bezüglich Multicast: http://troglobit.com/howto/multicast/


    Benutzungsanleitungen zu SMCRoute:

    https://github.com/CedricCabes…er/broadcast_multicast.md

    https://thedevops.party/dlna-c…ation-through-the-router/

    http://bda.ath.cx/blog/2009/01…-upnp-traffic-with-linux/

    (Achtung Japanisch, hat aber sehr schönen Befehle): http://rufas.manyoldmoon.com/blog/1605

    IGMPproxy

    Ein weiterer Multicast-Proxy, der voll und ganz auf IMG-Protokoll setzt. Hat wahrscheinlich den Vorteil, dass man sich nicht erst die ganzen Qt-Pakete installieren muss.

    Projektseite: https://sourceforge.net/projects/igmpproxy/

    Projektseite auf GitHub: https://github.com/pali/igmpproxy



    Danksagungen

    Ich möchte mich bei allen bedanken, die mir bei der Lösung des Problems geholfen haben.

    Insbesondere möchte ich mich bei framp bedanken, der mit seiner Anleitung zur ARP-Proxy mir den Weg geebnet hat und auch sonst mit Rat und Tat zur Stelle war. Desweiteren möchte ich mich ebenfalls bei rpi444 und someone aka Peter bedanken, die ihre Zeit geopfert haben um mir bei meinem Problem zu helfen. Danke euch Jungs. :danke_ATDE:


    Tipp zum Schluss

    Wer seinen Pi nur als Wlan-Lan-Brücke einsetzen will, der sollte sich OpenWRT für Raspberry Pi anschauen:

    https://openwrt.org/toh/raspberry_pi_foundation/raspberry_pi


    Damit kann man die Brücke mit nur ein paar Mausklicks einrichten. Hier ist z.B. so eine Anleitung (ab Schritt 7 wird's interessant):

    https://www.nerd-quickies.net/…bridge-with-openwrt-luci/


    Allerdings ist OpenWRT mehr für Router ausgelegt und damit nicht so umfangreich konfigurierbar und erweiterbar wie Raspbian.


    Abschließende Worte

    Ich habe versucht diese Anleitung so umfangreich und detailliert wie möglich zu gestalten. Sollten jedoch Unklarheiten oder weitere Fragen auftreten, dann zögert nicht mich anzuschreiben. Bitte bedenkt aber, ich bin selbst ein Laie und freue mich, dass ich es irgendwie geschafft habe.

    Für weitere Tipps, Korrekturen und Anregungen bin ich offen und würde mich darüber freuen.



    Gruß

    Waldemar



    EDIT:

    Habe weiter unten noch zwei weitere Programme vorgestellt:

    Multicast-Relay: [Anleitung] WLAN-LAN Brücke (bridge), oder wie bringe ich mein ethernet-only Gerät ins Wlan

    wlan_kabel: [Anleitung] WLAN-LAN Brücke (bridge), oder wie bringe ich mein ethernet-only Gerät ins Wlan


    3 Mal editiert, zuletzt von Waldemar () aus folgendem Grund: Code zum Download der "mcproxy.conf" Datei angepasst Tippfehler behoben Links zu weiteren vorgestellten Programmen hinzugefügt

  • Wer seinen Pi nur als Wlan-Lan-Brücke einsetzen will, der sollte sich OpenWRT für Raspberry Pi anschauen:

    Alternativ zum RPi sollte man evtl Geräte wie z.B. TP-Link TL-WR802 für diesen Zweck ins Auge fassen.

    Deutlich weniger Konfigurationsaufwand, robust bei harter Abschaltung, günstig, geringer Stromverbrauch.

    Das S in IOT steht für Sicherheit.

  • Perfekt :thumbup:Gefällt mir besser als mein Howto :lol:.

    Kommt auch nicht oft vor dass jemand schon nach 15 Beitraegen im Forum ein detailertes, gut strukturiertes, auf das Wesentliche reduziertes und recht leicht les- und umsetzbares HowTo schreibt. :bravo2:

    Ich werde auf meiner deutschen Seite meines Howtos auf diese Seite einen Link auf Dein Tutorial setzen.

    "Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect." Linus Torvalds, 28.9.2003

    >>> raspiBackup: Sichere Deine Raspberry regelmäßig im laufenden Betrieb <<<

  • Hallo Leute,

    heute möchte ich euch zwei weitere Programme vorstellen um eine multicastfähige wlan-lan Brücke zu erstellen.

    Vorbemerkung

    Leider lief das im ersten Post vorgestellte Programm "Mcproxy", nicht ganz rund bei mir. Es kann Tage/Wochen problemlos laufen, aber früher oder später hängt es sich mit der Meldung:


    Code
    1. ERROR: failed to get multicast route stats! Error: Cannot assign requested address errno: 99


    auf. Wobei die Error-Meldung in Sekundentakt auftaucht und selbst ein Restart von Mcproxy keine Besserung bringt - nur ein Reboot hilft.

    Habe auch keine Ahnung woran es wirklich liegt, aber ich vermute mal, dass der kleine Pi mit dem ganzen Multicast-Routing einfach überfordert ist. Denn auch sämtliche Smart-TVs im Haushalt lassen Ihre Multicast-Pakete über den McProxy laufen - das sieht dann so aus:


    Code
    1. pi@raspberrypi:~ $ ip -s mroute
    2. (192.168.178.1, 239.255.255.250) Iif: wlan0 Oifs: eth0
    3. 2 packets, 302 bytes
    4. (192.168.178.65, 239.255.255.250) Iif: wlan0 Oifs: eth0
    5. 4 packets, 796 bytes
    6. (192.168.178.27, 239.255.250.250) Iif: eth0 Oifs: wlan0
    7. 1 packets, 135 bytes
    8. (192.168.178.25, 239.255.255.250) Iif: wlan0 Oifs: eth0
    9. 516 packets, 60613 bytes


    und da sind noch nicht alle drin ;-) Vielleicht bringt das alles den Pi aus dem Takt.


    Da ich mit der Situation nicht zufrieden war, habe ich mich weiter auf die Suche begeben und zwei weiter Programme gefunden, die interessant sein könnten - nämlich "Multicast-Relay" und "wlan_kabel".

    In diesem Post gehe ich nur auf "Multicast-Relay" ein, da es für mich das interessantere ist und bereits seit 4 Tagen problemlos läuft. Das Programm "wlan_kabel" stelle ich dann im nachfolgenden Post kurz vor.


    "Multicast-Relay" ist eigentlich ein direkter Ersatz für "Mcproxy" (ist aber kein Proxy - bitte nicht falsch verstehen), somit besteht die Brücke wieder aus zwei Teilen:

    • einer unicast-Brücke, die wird weiterhin mit dem Paket parprouted realisiert
    • und einer multicast-Brücke, die wird diesmal mit dem Programm Multicast-Relay realisiert.

    Unicast Brücke

    Wie schon in der Vorbemerkung erwähnt wird auch diesmal die unicast-Brücke mit Hilfe des Pakets "parprouted" realisiert und bis auf den Eintrag in die Datei /etc/network/interfaces ändert sich hier nichts. Der Vollständigkeitshalber kopiere ich die einzelne Schritte aus dem ersten Post, hier rein.


    Da Jassies neuer DHCP Client Daemon (DHCPCD) anscheinend nicht mit der üblicher Art der Netzwerkkonfiguration kompatibel ist, sollte zunächst der "dhcpcd" deaktiviert werden. Dazu einfach folgenden Befehl ausführen:


    Code
    1. sudo systemctl disable dhcpcd


    Als erstes werden die nötige Pakete installiert, dazu folgenden Befehl ausführen:


    Code
    1. sudo apt-get install parprouted dhcp-helper


    Um dem Kernel erlauben die IP-Pakete weiterzuleiten, muss "ip-forwarding" aktiviert werden. Dazu mit:


    Code
    1. sudo nano /etc/sysctl.conf


    die Datei "sysctl.conf" öffnen und dort folgende Zeile suchen #net.ipv4.ip_forward=1 die Raute "#" entfernen und mit Strg-O und Strg-X abspeichern. So, dass die Zeile nun wie folgt aussieht:


    Code: /etc/sysctl.conf
    1. .
    2. .
    3. .
    4. net.ipv4.ip_forward=1
    5. .
    6. .
    7. .


    Dann editiert man die Datei "/etc/default/dhcp-helper", so dass (so wie ich es verstehe) die ganzen DHCP Anfragen über wlan0 erfolgen (in der Anleitung heißt es relay einschalten).


    Man ersetzt die Zeile DHCPHELPER_OPTS="-b eth0" mit DHCPHELPER_OPTS="-b wlan0"


    Code: /etc/default/dhcp-helper
    1. # relay dhcp requests as broadcast to wlan0
    2. DHCPHELPER_OPTS="-b wlan0"



    Wer den Avahi-Daemon installiert hat, der kann auch hier die mDNS Anfragen weiterleiten, in dem er die Datei "/etc/avahi/avahi-daemon.conf" bearbeitet und dort nach der Zeile enable-reflector sucht und den Wert yes hinzufügt, so dass sie wie folgt aussieht: .


    Code: /etc/avahi/avahi-daemon.conf
    1. .
    2. .
    3. [reflector]
    4. enable-reflector=yes
    5. .
    6. .
    7. .



    Zum Schluss noch das Netzwerk konfigurieren. Hier gibt es einen Unterschied zu dem ersten Post.

    Da "Multicast-Relay" mit der gleichen IP-Adresse für das Interface "wlan0" und "eth0" nicht klar kommt, jedoch eine eigenständige IP-Adresse für das jeweilige Interface voraussetzt, habe ich dem Interface "eth0" eine statische IP-Adresse außerhalb meines Netzwerks vergeben.


    Bei mir Zuhause belegt die FritzBox den Adressraum 192.168.178.1/24 was alle Adressen zwischen 192.168.178.1 ... 192.168.178.255 einschließt. Um dem nicht in die Quere zu kommen, habe ich dem "eth0" Interface die Adresse 192.168.1.2/24 zugeteilt, was einem Adressraum von 192.168.1.1 ... 192.168.1.255 entspricht.

    Dazu die Datei "/etc/network/interfaces" öffnen und wenn man dort vorher keine besonderen Einstellungen gemacht hat, alles löschen und durch Folgendes ersetzen:




    Wie man sieht, wird auch hier der "parprouted" mit dem Befehl post-up /usr/sbin/parprouted eth0 wlan0 gestartet und erstellt eine unicast-Verbindung zwischen "eth0" und "wlan0".


    Multicast Brücke

    Um Multicast-Pakete weiterzuleiten wird diesmal das Programm "Multicast-Relay" verwendet.

    Das Programm kann man hier finden: https://github.com/alsmith/multicast-relay

    Zum jetzigen Zeitpunkt ist der Commit: 2cf5bafedfc6523c2c94c64e33a43fad96d3d0c9, der letzte.


    Es handelt sich hier um ein Python-Script welches, wie es aussieht, in erste Linie für Sonos-Lautsprecher entwickelt wurde, leitet aber auch die für meinen Einsatzzweck wichtige Multicastpakete "239.255.255.250:1900" weiter.


    Das Script setzt auf das Python-Paket "netifaces" auf. Womit man das Paket zuerst installieren sollte. Das kann man ganz bequem aus den Paketquellen installieren. Dazu folgenden Befehl aufrufen:


    Code
    1. sudo apt-get install python-netifaces


    Als nächstes klont man das GitHub-Repo (vorausgesetzt git ist installiert) mit dem Befehl:


    Code
    1. git clone https://github.com/alsmith/multicast-relay.git build/multicast-relay


    Anschließend kopiert man einfach das Script nach /usr/local/bin/, mit folgendem Befehl:


    Code
    1. sudo cp build/multicast-relay/multicast-relay.py /usr/local/bin/multicast-relay.py


    Anmerkung: bei mir war das Script schon als eine ausführbare Datei markiert, sollte es nicht der Fall sein, dann kann man es mit dem Befehl: sudo chmod +x build/multicast-relay/multicast-relay.py zuerst als eine ausführbare Datei markieren.


    Nun kann man es auch schon testen, dazu einfach folgenden Befehl eingeben:


    Code
    1. sudo multicast-relay.py --interfaces wlan0 eth0 --noMDNS --noSonosDiscovery --allowNonEther --foreground --verbose


    Parametererklärung:


    --interfaces Die Interfaces zwischen denen die Pakete weitergeleitet werden.

    --noMDNS Leite keine mDNS Anfragen weiter - das macht bei uns der Avahi-Daemon, wenn man dort in der Konfigurationsdatei "enable-reflector=yes" eingetragen hat.

    --noSonosDiscovery Leite keine Broadcast Pakete vom Port 6969 weiter - ist nur für Sonos interessant - außerdem sollte sich theoretisch der "parprouted" um broadcast/unicast Pakete kümmern.

    --allowNonEther Ist z.Z. ein experimentelles Feature welches es ermöglicht, dass wir unser "wlan0" Interface nutzen können.

    --foreground Führe das Programm im Vordergrund aus, um die Statusmeldungen zu sehen.

    --verbose Zeige noch mehr status-Informationen.


    Weitere mögliche Parameter kann man mit dem Befehl multicast-relay.py --help erfahren.


    Funktioniert alles wie gewünscht kann man das Programm mit "Strg-c" wieder beenden.


    Multicast-Relay als Service für systemd einrichten

    Damit "Multicast-Relay" beim Systemstart automatisch startet, wollen wir es analog zum Mcproxy, als Service in systemd integrieren.


    Dazu erstellen wir mit "nano" folgende Datei:


    Code
    1. sudo nano /etc/systemd/system/multicast-relay.service


    und tragen dort Folgendes ein:


    Code: /etc/systemd/system/multicast-relay.service
    1. [Unit]
    2. Description=Relay broadcast and multicast packets between interfaces
    3. Documentation=https://github.com/alsmith/multicast-relay
    4. After=network.target
    5. [Service]
    6. ExecStart=/usr/local/bin/multicast-relay.py --interfaces wlan0 eth0 --noMDNS --noSonosDiscovery --allowNonEther --foreground
    7. [Install]
    8. WantedBy=multi-user.target


    Anschließend aktivieren wir den Service mit:


    Code
    1. sudo systemctl enable multicast-relay.service


    Der Service kann nun mit dem Befehl:


    Code
    1. sudo systemctl start multicast-relay.service


    gestartet werden.


    Bei mir hat der Start schon gereicht und ich konnte den Receiver sofort einsetzen.

    Allerdings denke ich, dass ein Reboot an der Stelle auch nicht schadet - es sei den man ist auf seine Uptime besonders stolz ;-)


    Wie ich in der Vorbemerkung geschrieben habe, läuft mein Receiver mit diesem Setup seit ungefähr 4 Tagen problemlos. Sollte ich irgendwelche Probleme bemerken, werde ich das hier nochmal nachreichen.

    Wie immer, bin ich für konstruktive Vorschläge und Korrekturen offen :-)



    Gruß

    Waldemar

    2 Mal editiert, zuletzt von Waldemar ()

  • Hallo Leute,

    hier möchte ich euch ein kleines aber feines Programm namens "wlan_kabel" vorstellen. Das Programm wurde von Wolfgang Illmeyer entwickelt und ist dazu da um, wie der Name schon sagt, ein "Wlan-Kabel" zu simulieren - heißt ethernet-only Geräte mit Hilfe eines Computers (mit einem Ethernet-Anschluss und einer WLAN-Schnittstelle) in das Wlan-Netzwerk zu integrieren. Eigentlich das, wonach ich die ganze Zeit gesucht habe ;-)


    Das Programm kann man hier finden: https://github.com/escitalopram/wlan_kabel


    Wie Wolfgang auf seiner GitHub Seite schreibt, ist der Nachteil von "wlan_kabel", dass an dem Ethernet-Port nur ein Gerät angeschlossen werden kann. Heißt: während ich mit der Lösung aus dem Post 1 (Kombi aus parprouted und mcproxy) einen Switch an den Ethernet-Port anschließen könnte und so theoretisch noch 20 weitere Geräte an dem Ethernet-Port betreiben könnte, ist es mit dem Programm "wlan_kabel" nicht möglich.


    Das wäre mir aber alles egal, wenn da nicht noch ein für mich viel gravierender Fehler wäre.

    Dadurch, dass hier einfach alle Pakete die durch das "wlan0" Interface laufen, stur auf das "eth0" Interface kopiert werden bzw. vice versa. Führt schon der kleinster Download bzw. Upload auf den Pi (damit meine ich den Pi selbst, nicht den angeschlossenen Receiver) dazu dass die CPU-Last auf 100% steigt und "wlan_kabel" beendet wird.


    Schade eigentlich - hoffe Wolfgang kann das irgendwannmal beheben.


    Wer also seinen Pi als eine reine Wlan-Lan Brücke einsetzen will, der kann das Programm verwenden - allen Anderen würde ich davon eher abraten.


    Nichtsdestotrotz möchte ich euch zeigen, wie ihr das Programm testen könnt.

    Netzwerkkonfiguration

    Wie Wolfgang auf seiner GitHub Seite schreibt, braucht "wlan_kabel" keine besondere Konfiguration, es muss nur eine Wlan-Verbindung vorhanden sein.

    Bei mir sah die /etc/network/interfaces Datei wie folgt aus:



    WLAN_KABEL kompilieren und testen

    Um "wlan_kabel" zu kompilieren braucht man keine besondere Pakete, es reicht eigentlich nur "build-essential" und "git" zu installieren - dazu einfach folgenden Befehl ausführen:


    Code
    1. sudo apt-get install build-essential git


    Dann kann man auch schon das git-Repo von GitHub, klonen mit:


    Code
    1. git clone https://github.com/escitalopram/wlan_kabel.git build/wlan_kabel


    Anschließend wechselt man in das Verzeichnis mit:


    Code
    1. cd build/wlan_kabel/


    und kompiliert das Paket mit dem Befehl:


    Code
    1. make


    Ist der Kompiliervorgang abgeschlossen, kann man auch schon das Programm testen. Dazu folgender Befehl:


    Code
    1. ./wlan_kabel wlan0 eth0 00:22:15:49:e5:55


    Dabei sollte 00:22:15:49:e5:55 die Mac-Adresse des am Ethernet-Port angeschlossenen Gerätes sein - also im meinem Fall des Receivers.



    Wie am Anfang erwähnt wäre das Tool perfekt für mich, wenn da die Hohe CPU-Auslastung nicht wäre.

    Somit bleibe ich vorerst bei der Kombi aus "parprouted" und "Multicast-Relay", welches bis jetzt tadellos ihren Dienst verrichtet.





    Gruß

    Waldemar



    PS.: hier noch der Link wie ich auf das Programm gekommen bin: https://raspberrypi.stackexcha…reless-bridge-to-ethernet