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:
die "8192cu.conf"-Datei öffnen/anlegen und dort Folgendes eintragen:
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:
Als erstes werden die nötige Pakete installiert, dazu folgenden Befehl ausführen:
Um dem Kernel erlauben die IP-Pakete weiterzuleiten, muss "ip-forwarding" aktiviert werden. Dazu mit:
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:
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:
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:
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:
auto lo
iface lo inet loopback
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
post-up /usr/sbin/parprouted eth0 wlan0
post-down /usr/bin/killall /usr/sbin/parprouted
# clone the dhcp-allocated IP to eth0 so dhcp-relay will relay for the correct subnet
post-up /sbin/ip addr add $(/sbin/ip addr show wlan0 | perl -wne 'm|^\s+inet (.*)/| && print $1')/32 dev eth0
post-down /sbin/ifdown eth0
Display More
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:
pi@raspberrypi:~ $ sudo modprobe configs
pi@raspberrypi:~ $ zegrep -i 'mroute|multicast' /proc/config.gz
CONFIG_IP_MULTICAST=y
CONFIG_IP_MROUTE=y
CONFIG_IP_MROUTE_MULTIPLE_TABLES=y
CONFIG_IPV6_MROUTE=y
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:
pi@raspberrypi:~ $ ifconfig -a
eth0 Link encap:Ethernet HWaddr b8:27:eb:ff:62:9b
inet addr:192.168.178.26 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: fe80::ba27:ebff:feff:629b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:499164 errors:0 dropped:0 overruns:0 frame:0
TX packets:738196 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:42438795 (40.4 MiB) TX bytes:668306252 (637.3 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:93809 errors:0 dropped:0 overruns:0 frame:0
TX packets:93809 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:5389888 (5.1 MiB) TX bytes:5389888 (5.1 MiB)
wlan0 Link encap:Ethernet HWaddr 74:da:38:59:bc:fe
inet addr:192.168.178.26 Bcast:192.168.178.255 Mask:255.255.255.0
inet6 addr: fe80::76da:38ff:fe59:bcfe/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6147843 errors:0 dropped:36609 overruns:0 frame:0
TX packets:31902622 errors:0 dropped:1 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1277073484 (1.1 GiB) TX bytes:138285069 (131.8 MiB)
Display More
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):
Anschließend klont man das Git-Repo mit:
Nun wechselt man in das Verzeichnis build/mcproxy/mcproxy (2 x mcproxy) mit:
und kompiliert das Programm mit folgenden zwei Befehlen:
Wenn der Compiler fertig ist, installiert man "mcproxy" mit dem Befehl:
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:
pi@raspberrypi:/ $ sudo mcproxy -c
Check the currently available kernel features.
- root privileges: Ok!
- ipv4 multicast: Ok!
- ipv4 multiple routing tables: Ok!
- ipv4 routing tables: Ok!
- ipv4 mcproxy was able to join 20 groups successfully
- ipv4 mcproxy was able to set 40+ filters successfully (no limit found)
- ipv6 multicast: Ok!
- ipv6 multiple routing tables: Ok!
- ipv6 routing tables: Ok!
- ipv6 mcproxy was able to join 40+ groups successfully (no limit found)
- ipv6 mcproxy was able to set 40+ filters successfully (no limit found)
Display More
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/mcprox…xy/mcproxy.conf
Ich habe sie mit:
heruntergeladen und dort den Eintrag: pinstance myProxy: eth0 ==> eth1 eth2; durch: pinstance myProxy: wlan0 ==> eth0; ersetzt, so dass sie bei mir wie folgt aussieht:
# /etc/mcproxy.conf
######################################
##-- mcproxy configuration script --##
######################################
#protocol MLDv2; #IPv6
protocol IGMPv3; #IPv4
#pinstance myProxy: eth0 ==> eth1 eth2;
pinstance myProxy: wlan0 ==> eth0;
#pinstance my_second_instance: tun1 ==> "vlan-eth0.2";
#
# This confiugration example creates
# a multicast proxy for ipv4 with the
# upstream eth0 and two downstreams.
#
# |
# |
# +------+-----+
# | eth0 |
# | |
# | myProxy |
# | |
# | eth1 eth2 |
# +---+----+---+
# | |
# | |
#
Display More
Anschließend habe ich sie mit:
in das /etc Verzeichnis verschoben.
Nun kann man "mcproxy" mit dem Befehl:
Bzw. wenn man es im Hintergrund starten will (der bevorzugte Weg):
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:
pi@raspberrypi:/ $ ip -s mroute
(192.168.178.27, 239.255.250.250) Iif: eth0 Oifs: wlan0
1 packets, 135 bytes
(192.168.178.65, 239.255.255.250) Iif: wlan0 Oifs: eth0
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:
Desweiteren kann man schauen ob "mcproxy", die nötigen Kernelparameter richtig gesetzt hat:
pi@raspberrypi:/ $ sudo sysctl -a | grep 'mc_' | grep -v ipv6 | egrep 'eth0|wlan0'
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
sysctl: reading key "net.ipv6.conf.wlan0.stable_secret"
net.ipv4.conf.eth0.mc_forwarding = 1
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:
Der Parameter "-r" bedeutet laut Hilfe:
Der Autor? empfiehlt auch (https://groups.google.com/forum/#!topic/…oxy/YhfT0_vUH50) folgende Parameter in die Datei /etc/sysctl.conf einzutragen:
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.eth0.rp_filter = 0
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-mcpr…mcproxy.service herunterladen.
Den Pfad zu der ausführbaren Datei "mcproxy" anpassen /usr/bin/mcproxy -> /usr/local/bin/mcproxy, sodass die Datei wie folgt aussieht:
[Unit]
Description=mcproxy multicast proxy for IGMP/MLD (RFC 4605)
Documentation=http://mcproxy.realmv6.org/wiki/Documentation
After=network.target
[Service]
ExecStart=/usr/local/bin/mcproxy -f /etc/mcproxy.conf
[Install]
WantedBy=multi-user.target
Anschließend die Datei mit:
nach /etc/systemd/system verschieben.
Nun muss der Dienst noch aktiviert werden, dazu folgenden Befehl ausführen:
Zum Schluss kann man es mit:
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:
Um die Log-Messages zu sehen ("-u" steht für Unit):
Weiterführende Links
ARP-Poxy
Framp's Anleitung (für Stretch): https://www.linux-tips-and-tricks.de/de/raspberry/1…l-bruecke-bauen
Anleitung (für Jessie): https://github.com/a2retrosystems…nd-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/CedricCabessa/…st_multicast.md
https://thedevops.party/dlna-communica…ugh-the-router/
http://bda.ath.cx/blog/2009/01/2…fic-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.
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/2017/04/03/set…h-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