Die Raspberry Pi läuft mit Raspian, einem Debian für die ARM Architektur. Sie besitzt einen Ethernetadapter und üblicherweise wird zusätzlich ein USB WLAN Adapter eingebaut um kabellos mit der Pi kommunizieren zu können. Was liegt da näher als auch die Pi als Kabel zu WLAN Kabelbrücke einzusetzen bzw umgekehrt als WLAN Accesspoint mit Kabelanschluss zu benutzen. Der folgende Beitrag erkärt wie man eine WLAN Kabelbrücke unter Debian bzw der Raspberry Pi mit Raspbian erstellen und dann alle an die Pi angeschlossenen kabelgebundenen Geräte über WLAN auf ein anderes Netz zugreifen können.
 
Update 1. März 2014: Mit dem Kernel 3.6.11+ funktioniert alles noch wie beschrieben. Mit dem Kernel 3.10.25+ leider nicht mehr und es muss ein Router konfiguriert werden.
 
Update Februar 2018: Alternativ besteht die Möglickeit keine normale Brücke (also br0) zu benutzen sondern eine Brücke mit einem arp Proxy zu erstellen. Die Beschreibung dazu findet sich hier
 

 

Bevor die Brücke aufgebaut werden kann muss die WLAN Verbindung sowie die Kabelverbindung konfiguriert sein und funktionieren. Danach muss, um eine WLAN Brücke aufbauen zu können, das folgende zusätzliche Paket installiert werden:

 
apt-get install bridge-utils
 
Zum Schluss ist die Datei /etc/network/interfaces wie folgt anzupassen:
 
auto lo
iface lo inet loopback
iface eth0 inet manual
 
auto wlan0
iface wlan0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports wlan0 eth0
bridge_stp off
bridge_maxwait 15

wpa-iface wlan0
wpa-bridge br0
wpa-driver wext
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
 
Die Brücke kann nun mit
 
ifup br0
 
gestartet werden und sollte am Ende aktiv sein. 
 
ifconfig br0
 
liefert dann in etwa die folgende Ausgabe wobei wichtig ist, dass dort eine IP Adresse steht, die sich die Brücke aus dem DHCP Pool des lokalen Routers geholt hat.
 
br0       Link encap:Ethernet  HWaddr 94:44:52:1f:40:34 
          inet addr:192.168.0.107  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::9644:52ff:fe1f:4034/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:861 errors:0 dropped:0 overruns:0 frame:0
          TX packets:131 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:101477 (99.0 KiB)  TX bytes:15534 (15.1 KiB)
 
Die Ausgabe von brctl show zeigt dass die beiden Netzwerkinterfaces über die Bridge verbunden sind:
 
root@raspberrypi:~# brctl show
bridge name    bridge id          STP enabled    interfaces
br0            8000.801f028a033a  no             eth0
                                                 wlan0
 
Nun kann ein weiteres Gerät an den Kabelanschluss der Pi angeschlossen werden.
 

Leider muss dieses Gerät mit eine statischen IP Adresse konfiguriert werden. Diese muss aus demselben Netz stammen, in dem sich die PI per WLAN angemeldet hat. Die DHCP Requests werden leider nicht durch die Brücke weitergegeben. Vermutlich bekommt man das mit ebtables hin - es ist aber bislang nicht gelungen eine Lösung zu finden.  

UPDATE: Heute (5.2.2014) habe ich, nachdem jemand Probleme gemeldet hat zur Anleitung, das noch mal konfiguriert und es funktionierte auch die IP Vergabe per DHCP.
 
D.h. also, man muss folgende Dinge bei dem Gerät richtig konfigurieren, denn DHCP hilft leider nicht dabei. Alle diese Informationen ausser dem IP, die eine freie IP in dem Netz sein muss, kann man sich von der Pi besorgen wenn die Brücke erfolgreich aufgebaut wurde:
 
1) Freie statische IP Adresse aus dem lokalen Netz (z.B. passt 192.168.0.222 zu dem Netz welches im Beispiel benutzt wird)
2) Netzwerk Maskemit ifconfig br0 | grep -i mask | sed 's/.*ask[0-9]*//'
3) Default Gateway mit route -n | grep ^0.0.0.0 | awk '{ print $2; }'
4) DNS Server mit cat /etc/resolv.conf | grep nameserver | cut -f 2 -d ' '
 
Es dauert ein wenig bis eine Verbindung über die Pi hinaus möglich ist, denn der arp Cache braucht ein wenig über das WLAN bis er gefüllt ist (Test des arp Caches mit sudo arp).  Eine Verbindung zur Pi ist sofort möglich.
 

 

 

 

Benutzung eines ARP Proxies

 
Bei dieser Lösung wird keine übliche Brücke wie z.B. br0 benutzt um die beiden Interfaces eth0 und wlan0 im selben Netz zu verbinden. Diese Aufgabe wird von einem arp-proxy erledigt.Weiterhin wird ein dhcp-helper benötigt.
 
Die Anleitung geht von einem Raspbian Stretch aus.
 

Bevor der Kabel zu WLAN Router aufgebaut werden kann muss die WLAN Verbindung konfiguriert sein und funktionieren. Üblicherweise tut man das durch Einträge in der Datei /etc/wpa_supplicant/wpa_supplicant.conf. Anschliessend ist folgender Text am Ende von /boot/cmdline.txt anzufügen wobei er durch ein Leerzeichen von dem vorhergehenden Text getrennt werden muss. Dadurch bekommt die Netzwerkkarte den leichter zu merkenden Namen eth0.

net.ifnames=0

 

In der Datei /etc/sysctl.conf muss man folgende Zeile aktivieren damit die Raspberry als Router fungiert indem man das # Zeichen am Anfang der Zeile entfernt bzw die Zeile ohne # einfügt.

#net.ipv4.ip_forward=1
 
Ein reboot ist notwendig um die Optionen zu aktivieren.
 
Dann müssen die notwendigen zusätzlichen Pakete installiert werden.
 
sudo apt-get install parprouted dhcp-helper avahi-daemon
 
Danach sind folgende Konfigurationen vorzunehmen:
 
DHCP relay einschalten in /etc/default/dhcp-helper
DHCPHELPER_OPTS="-b wlan0"

/etc/avahi/avahi-daemon.conf ändern um mDNS relaying einzuschalten

[reflector]
enable-reflector=yes
 
Jetzt muss eine Konfiguration für die Interfaces erstellt werden in /etc/network/interfaces.d/wlanbridge um beim Starten das WLAN und den arp Proxy zu aktivieren.
 
auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp

post-down /usr/bin/killall /usr/sbin/parprouted
# Assign eth0 same IP address as wlan0 so dhcp-proxy will proxy for the same subnet
post-up /sbin/ip addr add $(ip addr show wlan0 | grep -Eo "^\s+inet [^ ]+ " | sed -E 's/^\s+//' | cut -f 2 -d ' ' | cut -f 1 -d/)/32 dev eth0
post-up /usr/sbin/service dhcp-helper restart && /usr/sbin/parprouted eth0 wlan0
post-down /sbin/ifdown eth0
 
Zu Anfang dauert es ein klein wenig bis der ARP Cache gefüllt ist und der Client eine IP Adresse bekommt und die Verbindung steht. Danach gibt es keine Verzögerung mehr.
 
Hilfreiche und weiterführende Links:
 
Kommentar schreiben
Hinweis:
Die eMail ist versteckt und nicht öffentlich sichtbar. Sie wird benutzt um über neue Kommentare zu informieren.