Debian Problem mit Erstellen einer Bridge

#1
Ich habe hier mal wieder ein kleines Bastelprojekt und möchte mir im Prinzip eine Wireless Bridge bauen, sprich eine Umsetzung von Lan auf Wlan
Dass es möglich ist, weiß ich unter anderem von dd-wrt, da ich damit sowas bereits mache, aber ich wollte den Router tauschen und muss das daher selber nachbauen.
Verwenden tu ich derzeit Debian Squeeze auf einem embedded PC mit CF-Card, 3x Lan und einmal Wlan (Atheros).

Wlan funktioniert problemlos mit ath5k und wpa_supplicant. Die IP holt sich das Gerät per DHCP von meinem AP

Ich will nun eth1, eth2 und wlan0 bridgen. Die IP sollen sich Geräte, die an eth1 oder eth2 angeschlossen werden per DHCP über Wlan ebenfalls vom AP holen.
Mein Router mit dd-wrt macht genau das.

Ich habe verschiedene Anleitungen zur Erstellung von Bridges gefunden, aber keine hat bisher funktioniert.

Kurz zusammengefasst habe ich im Prinzip folgendes machen müssen:

brctl addbr br0
brctl addif eth1 eth2 wlan0
ifup br0

in der /etc/network/interfaces sind alle 3 Adapter auf DHCP gestellt.

Sobald die Bridge startet, kann ich nicht mal mehr die IP vom wlan pingen bzw. die scheint nicht mal mehr abgerufen zu werden.

Irgendwo muss da noch ein grober Fehler sein, aber ich finde den einfach nicht
 

xeno

Moderator
Mitarbeiter
#2
Mit der Thematik WLAN auf LAN oder umgekehrt hab ich mich noch nicht beschäftigt, aber ich kann dir aus dem Kopf in etwa die /etc/network/interfaces wiedergeben, wie sie mit einer vorhandenen br0 funktioniert:

Vorher:
Code:
auto eth0
iface eth0 inet static
    address 1.2.3.4
    ...
Nachher:
Code:
auto br0
iface br0 inet static
    address 1.2.3.4
    ...
    bridge_ports eth0 eth1 ...
Vielleicht hilfts dir weiter.

Nachtrag: die echten Interfaces brauchen in dieser Konfiguration keinen Eintrag mehr in der 'interfaces'.
 
#3
Das heißt, bei mir müsste das dann etwa so aussehen:

Code:
iface br0 inet dhcp
    bridge_ports wlan0 eth1 eth2
    wpa_conf /path/to/wpa_supplicant.conf
auto br0
Die Einträge für wlan0, eth1 und eth2 lasse ich dann weg, richtig?

Muss ich dann eigentlich selber die Interfaces aktivieren, also mit ifconfig eth1 up ... ?
 
#4
Hi,

überprüfe doch bitte mal was mit deinem wlan0 passiert wenn du es in die Bridge hängst. Check mal iwconfig ob er noch assoziiert ist und deine Routing Tabelle. Ich vermute mal, dass das die WLAN Verbindung noch da ist, aber die Routing Tabelle die Einträge verloren hat.

ciao
serow
 
#6
Ok, zum Testen habe ich jetzt mal nur eth1 und eth2 gebridged und das hat funktioniert. Sobald ich wlan0 dazunehme, klappt es nicht mehr. Ich habe mit iwconfig mal nachgesehen und der ist wirklich nicht mehr assoziiert.
An dieser Stelle scheint es also irgendwo zu hängen, aber wieso kann er sich nicht mehr mit dem AP verbinden?
 
#7
Nachdem ich mehrfach Hinweise darauf gelesen habe, dass ich wohl in den promisc mode muss, habe ich das mal für wlan0 getestet. Danach konnte ich zumindest wieder eine IP bekommen, allerdings das Ganze nicht weiter nutzen. Möglicherweise muss ich bereits zum Booten in den Modus, aber wie? kann ich das einstellen, dass er automatisch den promisc mode benutzt?

Kann es sein, dass ich das dann für eth1 und eth2 auch machen muss?
 
#8
Hi,

der Promiscuous Mode verhindert, dass deine Netzwerkkarte Frame, die nicht an sie adressiert sind (Layer 2 Adressen), direkt in Hardware verwirft. Das darf bei einem Switch / Bridge natürlich nicht sein, denn die Aufgabe besteht ja gerade darin solche Frames weiterzuleiten. Die Bridge sollte die Interfaces eigentlich automatisch in den Promiscuous Mode versetzen. Evtl kann deine WLAN Karte das aber nicht!?

Eine normale Karte setzt man mit "ifconfig eth0 promisc" in diesen Modus. Schau mal ob das mit deiner WLAN Karte auch klappt und ob ifconfig dann diesen Modus anzeigt.

ciao
serow
 
#9
Danke Serow, aber die Wlankarte hatte ich mittlerweile bereits im promisc mode ;)

Nach weiteren Tests bin ich jetzt soweit, dass ich über /etc/network/interfaces eth1 und 2 in einer Bridge zusammenfasse, wlan0 aber erst ganz normal konfiguriere und dann mit brctl addif zur Bridge hinzufüge.
Auf diese Weise sagt mir iwconfig, dass ich noch mit dem AP assoziiert bin und ich kann zumindest die eigene IP pingen, wenn ich mit nem seriellen Kabel verbunden bin. Mehr geht leider trotzdem nicht. Weder ping auf den AP, noch IP an eth1 oder eth2 bekommen...

So langsam habe ich das Gefühl, dass meine Konfiguration mit diesem Treiber nicht funktioniert
 
#11
ifconfig -a
Code:
br0       Link encap:Ethernet  HWaddr 00:1d:7d:45:4d:75
          inet addr:10.13.33.10  Bcast:10.13.33.255  Mask:255.255.255.0
          inet6 addr: fe80::21d:7dff:fe45:4d75/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:398 errors:0 dropped:0 overruns:0 frame:0
          TX packets:275 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:70226 (68.5 KiB)  TX bytes:92166 (90.0 KiB)

eth0      Link encap:Ethernet  HWaddr 00:0d:b9:15:5f:88
          inet addr:10.13.32.220  Bcast:10.13.32.255  Mask:255.255.255.0
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:10 Base address:0x1000

eth1      Link encap:Ethernet  HWaddr 00:1d:7d:45:4d:75
          inet6 addr: fe80::21d:7dff:fe45:4d75/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:1385 errors:0 dropped:0 overruns:0 frame:0
          TX packets:96 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:322561 (315.0 KiB)  TX bytes:9146 (8.9 KiB)
          Interrupt:11 Base address:0x1400

eth2      Link encap:Ethernet  HWaddr 00:1d:7d:45:4d:75
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
          Interrupt:12 Base address:0x1800

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:16436  Metric:1
          RX packets:81 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:7248 (7.0 KiB)  TX bytes:7248 (7.0 KiB)

wlan0     Link encap:Ethernet  HWaddr 00:1d:7d:45:4d:75
          inet addr:10.13.33.10  Bcast:10.13.33.255  Mask:255.255.255.0
          inet6 addr: fe80::21d:7dff:fe45:4d75/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:8405 errors:0 dropped:0 overruns:0 frame:0
          TX packets:992 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:980961 (957.9 KiB)  TX bytes:203629 (198.8 KiB)
iwconfig
Code:
lo        no wireless extensions.

eth0      no wireless extensions.

eth1      no wireless extensions.

eth2      no wireless extensions.

wlan0     IEEE 802.11abg  ESSID:"M und M"
          Mode:Managed  Frequency:2.432 GHz  Access Point: 00:1F:F3:C0:BB:12
          Bit Rate=1 Mb/s   Tx-Power=20 dBm
          Retry  long limit:7   RTS thr:off   Fragment thr:off
          Encryption key:off
          Power Management:off
          Link Quality=52/70  Signal level=-58 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

br0       no wireless extensions.
route -n
Code:
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.13.32.0      0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.13.33.0      0.0.0.0         255.255.255.0   U     0      0        0 wlan0
10.13.33.0      0.0.0.0         255.255.255.0   U     0      0        0 br0
0.0.0.0         10.13.33.1      0.0.0.0         UG    0      0        0 br0
0.0.0.0         10.13.32.1      0.0.0.0         UG    0      0        0 eth0
brctl show
Code:
bridge name     bridge id               STP enabled     interfaces
br0             8000.001d7d454d75       no              eth1
                                                                    eth2
                                                                    wlan0
Bisher habe ich bei br0 noch nie eine IP gehabt, ist jetzt grad das erste Mal, aber dennoch geht keine Verbindung
 
#12
Hi,

also was mir direkt ins Auge sticht, ist die Geschichte mit der IP. Und zwar hast du auf der Bridge und wlan0 dieselbe IP. Eigentlich sollte die Bridge eine IP haben, wlan0 nicht! Dementsprechend passt dein Routing Table dann natürlich nicht:

Code:
10.13.33.0      0.0.0.0         255.255.255.0   U     0      0        0 wlan0
10.13.33.0      0.0.0.0         255.255.255.0   U     0      0        0 br0
Laut diesen Einträgen ist dasselbe Netz über zwei Interfaces erreichbar. Da wlan0 vor br0 eingetragen wurde nimmt er vermutlich wlan0, er sollte aber br0 verwenden. Warum das Packet nicht trotzdem raus geht kann ich dir leider nicht sagen.

Versucht mal folgendes:

/etc/network/interfaces
Code:
auto br0
iface br0 inet static
address <ip>
network <net>
netmask <mask>
broadcast <bcast>
bridge_ports wlan0 eth0 eth1
up wpa_supplicant -i wlan0 -D wext -c <config file>
Die Interfaces eth0, eth1 und wlan0 lässt du in dem Config File völlig außen vor. Sollte nicht notwendig sein die irgendwie zu erwähnen. So solltest du das mit der IP Adresse in den Griff kriegen. Wahrscheinlich gehts dann auch ^^
 
#14
Hi,

woran machst du das fest? Zeigt iwconfig keine Association? Teste mal ob das wpa_supplicant Kommando alleine funktioniert, wenn du es manuell absetzt. Du kannst -d ranhängen, dann kriegst du etwas mehr Output zu sehen.

Du kannst auch noch versuchen den wpa_supplicant Befehl als pre-up oder post-up zu benutzen.

ciao
serow
 
#15
Mit pre-up probiere ich heute Abend oder morgen nochmal, hab das Gerät schon weggepackt für heut. Ansonsten ja, iwconfig zeigt mir an, dass da keine Verbindung ist.
 
#16
Also weder mit pre-up noch mit post-up klappt es. Es geht auch nicht manuell, wenn wlan0 in die Bridge integriert ist. Ich habe dafür als Interface sowohl br0 als auch wlan0 gewählt.
 
#17
Hi,

ich hab rausgefunden, dass man scheinbar die WLAN Netzwerkkarte im Master Mode haben muss um sie zu bridgen. Die Diskussion dort gibt aber auch einen Hinweis auf eine andere Umsetzung: arpnat und Gargoyle. Aber an der Stelle muss ich dich verlassen ^^ Die kenne ich beide nicht.

Grüße
serow
 
#18
Master Mode hilft mir leider nicht, da es ja kein Access Point werden soll. Das wäre einfach ;)

Irgendwie muss es aber gehen, denn gestern habe ich noch einiges probiert und ein einziges Mal hat wlan0 in der Bridge funktioniert, ich weiß allerdings mal wieder nicht warum ;)

Nach den anderen Stichpunkten werde ich mal googlen.

Ansonsten bin ich natürlich auch offen für andere Betriebssysteme, falls jemand weiß, dass es dort geht.

Einzige Vorgaben sind:
- Muss komplett über die serielle Konsole bedienbar sein, da der Rechner keine Graka hat und auch keine mal nachgerüstet werden könnte
- muss auf CF-Card passen, vorzugsweise 1GB, weil solch eine habe ich hier
 
#19
Hi,

hier habe ich auch noch einen Hinweis gefunden: Da es eine Weile dauert bis die Bridge up ist, solltest du solange warten bis du den wpa_supplicant auf wlan0 los lässt. Dort ist von 30 Sek die Rede - sollte aber in der /var/log/messages irgendwo ablesbar sein wann es soweit ist. Dann den dhclient natürlich auf die bridge ansetzen.

Evtl hast du das eine Mal als es funktioniert hat einfach etwas länger gewartet als sonst?

Grüße
serow
 
#20
Diese Wartezeit kann man ausschalten und das habe ich bereits getan.

Ich weiß noch, dass ich ifconfig wlan0 0.0.0.0 ausgeführt habe und danach mit ifup die Bridge aktiviert habe. wlan0 hatte danach keine ip, die Bridge aber und ich konnte pingen.
Als ich das aber nochmal nachstellen wollte, hat es so nicht mehr geklappt :confused:

Ich probiere gleich mal Gargoyle, da gibt es direkt für mein System ein Image. vielleicht klappt das ja, wäre dann ok für mich, auch wenn ich das lieber selber hinbekommen hätte. Aber mal abwarten
 
Oben