Cablato al bridge wireless in Linux


17

Sto tentando di configurare il mio Raspberry Pi come bridge, usando Debian wheezy. Ho un hostapd.conf: (alcuni dettagli sono cambiati per sicurezza, e sì, so che WEP non va bene) ...

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

E questo 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

Sembra che tutto vada bene, ma non riesco ad associarmi alla connessione wireless a ponte, anche se le luci lampeggianti sulla chiavetta USB suggeriscono che i pacchetti vengono scambiati.

Ho letto da qualche parte che non tutte le schede / dispositivi funzioneranno in modalità hostap - non passeranno i pacchetti in una direzione: giusto? (Le informazioni erano un po 'vecchie) - questa è la mia carta:

[    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

Quindi, cosa ho sbagliato qui?

Aggiornamento : Quindi ho fatto ulteriori indagini e posso sollevare il ponte, ma a quanto pare ciò distrugge la connessione Ethernet (cablata), che è strano. Ad esempio, sull'RPi:

Avvia il sistema ...

ping 192.168.62.1 

(router) - funziona

Tentativo di associazione con LAN wireless ... non riesce (o meglio "con connettività limitata" sul telefono Android - non va bene)

brctl showmacs br0

Questo mostra solo mac di wlan0 e mac di telefono a questo punto

brctl addif br0 eth0 wlan0

A questo punto ora posso associare il telefono alla rete wireless, ma ...

ping 192.168.62.1

...non riesce

Allo stesso modo, non riesco più a eseguire il ping di RasPi da nessun'altra macchina sulla rete

In esecuzione

ifconfig br0

Suggerisce che il bridge sta facendo cadere pacchetti ...

Qualche idea?

Ulteriore aggiornamento : il /etc/network/interfacesfile ora (e per la sequenza sopra) recita:

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

Questo è decisamente in argomento per Super User, quindi non preoccuparti. Buona fortuna con la generosità, sono curioso di sapere qual è anche la risposta.
Breakthrough

Cosa iw dev wlan0 infomostra? E googling sull'ID del dispositivo mostra che è necessario un kernel recente o moduli wireless per eseguire questo dispositivo in modalità AP. Vedere questo . Quale kernel e ath9kdriver stai eseguendo?
gertvdijk,

Risposte:


10

Ponti semplificati:

C'è un progetto su sourceforge fatto apposta per la tua situazione. http://sourceforge.net/projects/bridger/ Viene fornito anche come pacchetto deb.

Per quanto riguarda i pacchetti "in calo":

  1. Hai controllato per vedere se iptables è impostato sul drop predefinito? sudo iptables --list dovresti dire "ACCETTA, ACCETTA, ACCETTA" per una casella di questo tipo. In questo caso, disattivalo.

  2. Stai addirittura inoltrando i pacchetti, fratello? Assicurati che la riga "net.ipv4.ip_forward = 1" NON sia commentata in /etc/sysctl.conf (è di default), quindi riavvia la rete.

  3. La modalità promiscua non è supportata dal dongle wireless. (significa che non può accettare pacchetti che non sono destinati a questo)

Pure Bridge vs. Shared Bridge:

  1. iface br0 inet dhcp indica un bridge condiviso , il che significa che il bridge stesso ottiene un ip e può essere un endpoint per il traffico.

  2. Un bridge puro non ottiene un indirizzo IP e inoltra solo il traffico tra le due interfacce

  3. File di configurazione di esempio Shared Bridge / etc / network / interfaces (Debian / Ubuntu)

# Questo file descrive le interfacce di rete disponibili sul tuo sistema
# e come attivarli. Per ulteriori informazioni, consultare interfacce (5).

# L'interfaccia di rete di loopback
auto lo
iface lo inet loopback

# Bridge tra eth0 e wlan0
auto br0
iface br0 inet dhcp
  pre-up ip link impostato eth0 down
  pre-up ip link set 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
  link ip post-down impostato eth0 down
  collegamento ip post-down impostato wlan0 down
  link ip post-down impostato br0 down
  post-down brctl delif br0 eth0 wlan0
  post-down brctl delbr br0

Riavvia la rete: sudo /etc/init.d/networking restartdopo aver apportato modifiche complesse alla configurazione della rete, è più semplice riavviare piuttosto che assicurarsi che tutto sia riavviato correttamente al riavvio.

Pensi di avere problemi di routing:

  1. Elimina DNS come causa testando con ping 8.8.8.8. Se funziona, probabilmente hai un problema DNS nella tua rete.

  2. Controlla il tuo gateway con la sudo ip routesperanza che vedi default via 192.168.1.1 dev br0 proto dhcp(supponendo che il tuo gateway sia 192.168.1.1). Se manca o è sbagliato, risolvilo sudo ip route add default via 192.168.1.1. Riprova:ping 8.8.8.8

  3. Rinnova il tuo bridge IP condiviso con dhclient br0e riprova conping 8.8.8.8

  4. Controllare le interfacce 'slave' con ifconfige assicurarsi che eth0 e wlan0 NON avere indirizzi IP. Ora fanno parte del ponte. In tal caso, assicurati di rimuoverli da tutti i file di configurazione, impostali su 0.0.0.0 statico o qualcosa del genere.

Se NESSUNO di questi funziona, prova l'app debian bridging e, se non funziona, il tuo dongle wireless non supporta la modalità promiscua. (vedi sopra)

Se funziona in qualsiasi momento qui, riavvia e assicurati che funzioni ancora.


Si prega di consultare l'ultimo aggiornamento per il file delle interfacce e, sì, tutte le catene sono impostate su ACCETTA
adrianmcmenamin,

Queste istruzioni funzionano, almeno nel senso se applico dhclient br0 e specifica che eth0 è bloccato su 0.0.0.0, ora devo solo capire come renderlo automatico :)
adrianmcmenamin

OK, l'ho installato e funzionante con un po 'di jiggery pokery tramite script rc.local (essenzialmente devo riavviare hostapd) - quindi ottieni la taglia. Ma ora il mio server di calamari sulla stessa scatola non sta funzionando, ma non te l'ho chiesto, quindi dovrà essere un'altra domanda.
Adrianmcmenamin,

La domanda sui calamari ora è su superuser.com/questions/522332/…
adrianmcmenamin il

Quali sono le impostazioni eth0e wlan0in questo esempio? In particolare, come si imposta il SSID e l'autenticazione wlan0?
Ian,

6

Ho alcuni bridge wireless che funzionano su Debian Linux e Openwrt, quindi conosco bene questo problema.

Hai perso un comando importante: hai dimenticato di dire al tuo driver wireless di trasmettere frame a 4 indirizzi (a volte impropriamente / storicamente chiamati WDS), che è richiesto per il bridge 802.11 / wireless. Fallo con il comando "iw dev wlan0 set 4addr on". Utilizzare un'istruzione "pre-up" nel file delle interfacce Debian sul bridge per applicarla prima di aprire il bridge. Si noti che la modalità frame a 4 indirizzi richiede il supporto del driver e alcuni vecchi driver o hardware 802.11 scadenti potrebbero non supportarlo.

Sospetto anche fortemente che i tuoi problemi possano essere stati complicati da un bug nel kernel di Linux che influenza in modo specifico le interfacce a ponte. Mi sono imbattuto in questo bug da solo e ho dovuto compilare il mio wpa_supplicant da fonti perché la versione in Debian è vecchia e interessata. wpa_supplicant e hostapd condividono una base di codice comune, ma non sono del tutto sicuro che ciò abbia influito su hostapd e su wpa_supplicant.

C'è un impegno per risolvere il problema qui:

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

Ho l'impressione che sia nella versione 2.5 e so che è nella fonte 2.6 attuale. L'attuale versione di Debian è la 2.4, che è rotta. Preoccupare il progetto Debian per aggiornare i loro pacchetti wpasupplicant e hostapd.

Ecco una configurazione di esempio per un client bridge wireless che utilizza WPA / WPA2 con un bridge wireless tra le interfacce wlan0 ed eth0, con l'host che ottiene un indirizzo DHCP sull'interfaccia br0 (sostituire "dhcp" con "manuale" senza indirizzo IP). Per una situazione in cui vuoi essere l'AP, includi i comandi interface = e bridge = in hostapd.conf e ometti i comandi wpa- * di seguito.

Nel tuo file / etc / network / interfaces:

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

E assicurati che il tuo wpa_supplicant sia la versione 2.5 o successiva. Non funzionerà con wpa_supplicant 2.4 e le versioni correnti del kernel.

Dovrei anche notare che al momento esiste un bug di gara in ifup in cui le interfacce bridge potrebbero non riuscire ad apparire all'avvio, ma questo è un altro problema.


3

Sembra che tu abbia bisogno di inoltrare l'ip.

provare cat /proc/sys/net/ipv4/ip_forward

Se è un 0problema:echo 1 > /proc/sys/net/ipv4/ip_forward


sys.net.ipv4.ip_forwardè per il routing IPv4, NAT, ecc. Bridges lavora uno strato sotto nello stack di rete.
Thomas Guyot-Sionnest,

0

Il bridging può funzionare solo quando un'interfaccia riceve tutti i pacchetti, altrimenti vedranno i pacchetti indirizzati solo a loro. La configurazione corrente potrebbe descrivere una configurazione per un router ma non per un bridge.

eth0 e wlan0 non dovrebbero avere indirizzi IP (che significa 0.0.0.0) e se lo si desidera, è comunque possibile utilizzare sempre un indirizzo IP per br0.

Ecco anche alcuni documenti ufficiali: http://wiki.debian.org/BridgeNetworkConnections


1
So che questo è un vecchio post, ma dato che l'ho trovato durante la ricerca di qualcos'altro, ho pensato di menzionare che non importa se un'interfaccia bridge ha / non ha un indirizzo IP per quanto riguarda il bridging. Su Linux, un'interfaccia a ponte inoltra anche i pacchetti ARP (livello OSI 2). Qualsiasi switch mapperà più dispositivi collegati all'altro lato del bridge come accettati su quella porta dello switch. Il mio riferimento è l'esperienza nella distribuzione di server Linux come router, bridge, firewall, ecc. Per implementazioni ad alta disponibilità in data center di alto livello tra cui un NAP USA primario per S. America
jetole,

0

configura 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.