Verkabelt mit Wireless Bridge unter Linux

17

Ich versuche, meinen Raspberry Pi mit Debian Wheezy als Bridge einzurichten. Ich habe ein hostapd.conf: (einige Details wurden aus Sicherheitsgründen geändert, und ja, ich weiß, dass WEP nicht gut ist) ...

interface=wlan0
bridge=br0
driver=nl80211
auth_algs=1
macaddr_acl=0
ignore_broadcast_ssid=0
logger_syslog=-1
logger_syslog_level=0
hw_mode=g
ssid=MY_SSID
channel=11
wep_default_key=0
wep_key0=MY_KEY
wpa=0

Und das in /etc/network/interfaces:

auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
auto br0
iface br0 inet dhcp
bridge-ports eth0 wlan0

Alles scheint in Ordnung zu sein, aber ich kann keine Verbindung mit der überbrückten drahtlosen Verbindung herstellen - obwohl die blinkenden Lichter auf dem USB-Stick darauf hindeuten, dass Pakete ausgetauscht werden.

Ich habe irgendwo gelesen, dass nicht alle Karten / Geräte im Hostap-Modus laufen - sie leiten keine Pakete in eine Richtung weiter: stimmt das? (Die Info war etwas alt) - das ist meine Karte:

[    3.663245] usb 1-1.3.1: new high-speed USB device number 5 using dwc_otg
[    3.794187] usb 1-1.3.1: New USB device found, idVendor=0cf3, idProduct=9271
[    3.804321] usb 1-1.3.1: New USB device strings: Mfr=16, Product=32, SerialNumber=48
[    3.816994] usb 1-1.3.1: Product: USB2.0 WLAN
[    3.823790] usb 1-1.3.1: Manufacturer: ATHEROS
[    3.830645] usb 1-1.3.1: SerialNumber: 12345

Also, was habe ich hier falsch gemacht?

Update : Also ich habe weitere Untersuchungen durchgeführt und kann die Brücke aufbauen, aber anscheinend zerstört das die (kabelgebundene) Ethernet-Verbindung, was seltsam ist. ZB auf dem RPi:

Booten Sie das System ...

ping 192.168.62.1 

(Router) - das funktioniert

Der Versuch, eine Verbindung zu einem WLAN herzustellen, schlägt fehl (oder eher "mit eingeschränkter Konnektivität" auf einem Android-Handy - nicht gut)

brctl showmacs br0

Dies zeigt nur mac von wlan0 und mac von phone an dieser Stelle

brctl addif br0 eth0 wlan0

An dieser Stelle kann ich das Telefon jetzt mit dem drahtlosen Netzwerk verknüpfen, aber ...

ping 192.168.62.1

... scheitert

Ebenso kann ich den RasPi nicht mehr von einem anderen Computer im Netzwerk aus anpingen

Laufen

ifconfig br0

Schlägt vor, dass die Bridge Pakete verwirft ...

Irgendwelche Ideen?

Weitere Aktualisierung : Die /etc/network/interfacesDatei lautet jetzt (und für die obige Sequenz):

auto lo eth0

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
#wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
adrianmcmenamin
quelle
Dies ist definitiv ein aktuelles Thema für Super User, also keine Sorge. Viel Glück mit dem Kopfgeld, ich bin gespannt, was die Antwort auch ist.
Durchbruch
Was iw dev wlan0 infozeigt? Wenn Sie Ihre Geräte-ID googeln, wird angezeigt, dass Sie einen aktuellen Kernel oder Wireless-Module benötigen, um dieses Gerät im AP-Modus auszuführen. Sieh das . Welchen Kernel und welchen ath9kTreiber verwenden Sie?
Gertvdijk
Siehe auch diese Antwort .
Thomas Guyot-Sionnest

Antworten:

10

Brücken leicht gemacht:

Es gibt ein Projekt zu SourceForge, das speziell für Ihre Situation entwickelt wurde. http://sourceforge.net/projects/bridger/ Es kommt sogar als Deb-Paket.

In Bezug auf das 'Verwerfen' von Paketen:

  1. Haben Sie überprüft, ob iptables auf default drop eingestellt ist? sudo iptables --list sollte für eine Box dieses Typs "ACCEPT, ACCEPT, ACCEPT" sagen. Wenn das das Problem ist, schalten Sie es aus.

  2. Leiten Sie die Pakete überhaupt weiter, Bruder? Stellen Sie sicher, dass die Zeile "net.ipv4.ip_forward = 1" NICHT in /etc/sysctl.conf kommentiert ist (dies ist die Standardeinstellung), und starten Sie dann Ihr Netzwerk neu.

  3. Der Promiscuous-Modus wird von Ihrem drahtlosen Dongle nicht unterstützt . (Das heißt, es können keine Pakete akzeptiert werden, die nicht für dieses Gerät bestimmt sind.)

Pure Bridge vs. Shared Bridge:

  1. iface br0 inet dhcp gibt eine gemeinsam genutzte Brücke an, was bedeutet, dass die Brücke selbst eine IP- Adresse erhält und ein Endpunkt für den Datenverkehr sein kann.

  2. Eine reine Bridge erhält keine IP-Adresse und leitet den Datenverkehr nur zwischen den beiden Schnittstellen weiter

  3. Shared Bridge- Beispieldatei / etc / network / interfaces (Debian / Ubuntu)

# Diese Datei beschreibt die auf Ihrem System verfügbaren Netzwerkschnittstellen
# und wie man sie aktiviert. Weitere Informationen finden Sie unter Schnittstellen (5).

# Die Loopback-Netzwerkschnittstelle
auto lo
iface lo inet loopback

# Brücke zwischen eth0 und wlan0
auto br0
iface br0 inet dhcp
  Pre-Up IP Link setze eth0 auf down
  Pre-Up-IP-Link setzen wlan0 down
  pre-up brctl addbr br0
  pre-up brctl addif br0 eth0 wlan0
  pre-up ip addr flush dev eth0
  pre-up ip addr flush dev wlan0
  post-down ip link setze eth0 auf down
  post-down ip link set wlan0 down
  post-down ip link set br0 down
  post-down brctl delif br0 eth0 wlan0
  post-down brctl delbr br0

Neustart des Netzwerks: sudo /etc/init.d/networking restartNachdem Sie komplexe Änderungen an der Netzwerkkonfiguration vorgenommen haben, ist es einfacher, den Computer neu zu starten, als sicherzustellen, dass beim Neustart alles ordnungsgemäß neu gestartet wurde.

Sie denken, Sie haben Routing-Probleme:

  1. Beseitigen Sie DNS als Ursache, indem Sie mit testen ping 8.8.8.8. Wenn dies funktioniert, liegt wahrscheinlich ein DNS-Problem in Ihrem Netzwerk vor.

  2. Überprüfen Sie Ihr Gateway mit sudo ip routehoffentlich sehen Sie default via 192.168.1.1 dev br0 proto dhcp(vorausgesetzt, Ihr Gateway ist 192.168.1.1). Wenn es fehlt oder falsch ist, beheben Sie es sudo ip route add default via 192.168.1.1. Nochmal testen:ping 8.8.8.8

  3. Erneuern Sie Ihre gemeinsame Bridge-IP mit dhclient br0und testen Sie erneut mitping 8.8.8.8

  4. Überprüfen Sie Ihre 'ifconfig Slave' -Schnittstellen mit und stellen Sie sicher, dass eth0 und wlan0 KEINE IP-Adressen haben. Sie sind jetzt ein Teil der Brücke. Wenn dies der Fall ist, stellen Sie sicher, dass Sie sie aus allen Konfigurationsdateien entfernen, und setzen Sie sie auf static 0.0.0.0 oder so.

Wenn KEINES davon funktioniert, probieren Sie diese Debian-Bridging-App aus. Wenn dies nicht funktioniert, unterstützt Ihr drahtloser Dongle den Promiscuous-Modus nicht. (siehe oben)

Wenn es hier zu irgendeinem Zeitpunkt funktioniert, starten Sie es neu und stellen Sie sicher, dass es weiterhin funktioniert.

MattPark
quelle
Bitte sehen Sie sich das neueste Update für die Interface-Datei an und ja, alle Ketten sind auf ACCEPT gesetzt
adrianmcmenamin
Diese Anweisungen funktionieren, zumindest in dem Sinne, wenn ich dhclient br0 verwende und das eth0 auf 0.0.0.0 festgelegt habe. Jetzt muss nur noch herausgefunden werden, wie es automatisch erfolgt :)
adrianmcmenamin 20.12.12
OK, ich habe es eingerichtet und lauffähig gemacht mit ein bisschen Jiggery Pokery über rc.local-Skripte (im Grunde muss ich hostapd neu starten) - so bekommst du das Kopfgeld. Aber jetzt fällt mein Squid-Server auf derselben Box aus - aber ich habe Sie nicht danach gefragt, also muss es eine andere Frage sein.
Adrianmcmenamin
Squid Frage jetzt bei superuser.com/questions/522332/...
adrianmcmenamin
Was sind die eth0und wlan0Einstellungen in diesem Beispiel? Wie stellen Sie die SSID und die Authentifizierung ein wlan0?
Ian
6

Ich habe einige drahtlose Bridges, die unter Debian Linux und Openwrt funktionieren, daher bin ich mit diesem Problem sehr vertraut.

Sie haben einen wichtigen Befehl übersehen: Sie haben vergessen, Ihrem Wireless-Treiber mitzuteilen, dass er 4-Adress-Frames (manchmal unkorrekt oder historisch als WDS bezeichnet) senden soll, die für 802.11 / Wireless-Bridging erforderlich sind. Tun Sie dies mit dem Befehl "iw dev wlan0 set 4addr on". Verwenden Sie eine "Pre-Up" -Anweisung in Ihrer Debian-Interface-Datei auf der Bridge, um sie anzuwenden, bevor Sie die Bridge aufrufen. Beachten Sie, dass der 4-Adressen-Frame-Modus Treiberunterstützung erfordert und von einigen alten, beschissenen 802.11-Treibern oder -Hardware möglicherweise nicht unterstützt wird.

Ich vermute auch, dass Ihre Probleme möglicherweise durch einen Fehler im Linux-Kernel erschwert wurden, der sich speziell auf überbrückte Schnittstellen auswirkt. Ich bin selbst auf diesen Fehler gestoßen und musste meinen eigenen wpa_supplicant aus Quellen kompilieren, da die Version in Debian alt und betroffen ist. wpa_supplicant und hostapd teilen sich eine gemeinsame Codebasis, aber ich bin mir nicht ganz sicher, ob dies sowohl hostapd als auch wpa_supplicant betrifft.

Hier gibt es eine Umgehungslösung für das Problem:

https://w1.fi/cgit/hostap/commit/?id=e6dd8196e5daf39e4204ef8ecd26dd50fdca6040

Ich habe den Eindruck, dass dies in der Version 2.5 ist, und ich weiß, dass es sich um die aktuelle Version 2.6 handelt. Die aktuelle Debian-Version ist 2.4 und ist defekt. Bitte belästigen Sie das Debian-Projekt, um die Pakete wpasupplicant und hostapd zu aktualisieren.

Hier ist eine Beispielkonfiguration für einen WLAN-Bridge-Client, der WPA / WPA2 mit einer WLAN-Bridge zwischen den Schnittstellen wlan0 und eth0 verwendet, wobei der Host eine DHCP-Adresse auf der br0-Schnittstelle erhält (ersetzen Sie "dhcp" durch "manual" für keine IP-Adresse). Fügen Sie in einer Situation, in der Sie der AP sein möchten, die Befehle interface = und bridge = in hostapd.conf ein und lassen Sie die folgenden wpa- * -Befehle weg.

In Ihrer / etc / network / interfaces-Datei:

allow-auto br0
iface br0 inet dhcp
    bridge_ports wlan0 eth0
    bridge_stp off
    bridge_waitport 5
    bridge_fd 0
    wpa-ssid mynetwork
    wpa-psk abc123abc123abc123abc123abc123abc123abc123abc123abc123abc123
    wpa-iface wlan0
    wpa-bridge br0
    pre-up iw dev wlan0 set 4addr on
    post-down iw dev wlan0 set 4addr off

Stellen Sie sicher, dass Ihr wpa_supplicant Version 2.5 oder höher ist. Es funktioniert nicht mit wpa_supplicant 2.4 und aktuellen Kernelversionen.

Ich sollte auch beachten, dass es derzeit einen Race-Bug in ifup gibt, bei dem Bridge-Interfaces beim Booten möglicherweise nicht angezeigt werden, aber das ist ein ganz anderes Problem.

turnip_turnip_turnip
quelle
3

Sie brauchen anscheinend eine IP-Weiterleitung.

Versuchen cat /proc/sys/net/ipv4/ip_forward

Wenn es ein 0Problem ist:echo 1 > /proc/sys/net/ipv4/ip_forward

CSᵠ
quelle
sys.net.ipv4.ip_forwardist für IPv4-Routing, NAT usw. gedacht. Bridges arbeitet eine Schicht tiefer im Netzwerkstapel.
Thomas Guyot-Sionnest
0

Bridging kann nur funktionieren, wenn eine Schnittstelle alle Pakete empfängt, andernfalls werden nur an sie adressierte Pakete angezeigt. Ihr aktuelles Setup beschreibt möglicherweise eine Konfiguration für einen Router, jedoch nicht für eine Bridge.

eth0 und wlan0 sollten keine ip-adressen haben (bedeutung 0.0.0.0) und falls gewünscht, können sie immer eine ip-adresse für br0 verwenden.

Hier ist auch eine offizielle Dokumentation: http://wiki.debian.org/BridgeNetworkConnections

John Wilcox
quelle
1
Ich weiß, dass dies ein alter Beitrag ist, aber da ich ihn bei der Suche nach etwas anderem gefunden habe, dachte ich, dass es für das Bridging keine Rolle spielt, ob eine Bridge-Schnittstelle eine IP-Adresse hat oder nicht. Unter Linux leitet eine Bridged-Schnittstelle auch ARP-Pakete weiter (OSI-Schicht 2). Jeder Switch ordnet mehrere Geräte, die an der anderen Seite der Bridge angeschlossen sind, als an diesem Switch-Port akzeptiert zu. Meine Referenz ist die Bereitstellung von Linux-Servern als Router, Bridges, Firewalls usw. für Hochverfügbarkeitsbereitstellungen in erstklassigen Rechenzentren, einschließlich eines primären USA-NAP für Südamerika
jetole
0

konfiguriere wlan0

vi / etc / network / interface

iface eth0 inet static
address 192.168.2.1
network 192.168.2.0
netmask 255.255.255.0
broadcast 192.168.2.255

vi /etc/sysctl.conf

net.ipv4.ip_forward=1

vi /etc/rc.local

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o wlan0 -j MASQUERADE
netawater
quelle