Estrangulamento do Hostapd

5

Algum tempo atrás eu fiz uma pergunta sobre configurar meu Raspberry Pi com uma conexão de rede em ponte - Wired to wireless bridge no Linux - e a resposta que obtive funcionou bem.

Agora, eu tive que começar tudo de novo com o Raspberry Pi e usei a configuração descrita. Mas não incorporaria o dispositivo wlan0 na ponte afirmando:

 can't add wlan0 to br0: Operation not supported

Mas se eu correr

/usr/bin/hostapd /etc/hostapd/hostapd.conf

Em seguida, o dispositivo wlan0 é adicionado com sucesso à ponte. Alguém poderia explicar o que está acontecendo aqui e como eu posso automatizar totalmente a adição de wlan0 à ponte?

O dispositivo USB está usando o driver ath9k_htc.

Como por solicitação : / etc / network / interfaces e /etc/hostapd/hostapd.conf foram baseados na resposta mencionada acima (embora eu tenha mudado para o WPA e parado de usar o WEP) , agora fique assim (seguindo a resposta abaixo):

auto lo
iface lo inet loopback
iface eth0 inet static
address 0.0.0.0
iface wlan0 inet static
address 0.0.0.0

auto br0
iface br0 inet dhcp
    bridge_ports eth0
    pre-up ip link set eth0 down
    pre-up ip link set wlan0 down
    pre-up brctl addbr br0
    pre-up brctl addif br0 eth0
    pre-up ip addr flush dev eth0
    post-down ip link set eth0 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

e

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=SSID
channel=11
wpa=2
wpa_passphrase=PASSPHRASE
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
ctrl_interface=/var/run/hostapd
ieee80211n=1
    
por adrianmcmenamin 03.03.2013 / 21:57

2 respostas

6

É simples assim: hostapd adiciona sua interface à ponte especificada por bridge= depois de ter transformado wlan0 no modo AP. Adicionar sua interface em uma ponte antes que o hostapd esteja em execução não é possível, porque sua interface ainda está no modo gerenciado padrão.

Não diga ifupdown (via /etc/network/interfaces ) para adicionar wlan0 à sua ponte e deixe hostapd fazer isso:

bridge-ports eth0 # no wlan0 here.

Oh, o seu /etc/network/interfaces está muito inchado. Você não precisa mexer muito com o brctl.

auto lo
iface lo inet loopback

# If you don't need to configure eth0, don't add a stanza for eth0.

iface wlan0 inet manual
    # hostapd has ifupdown hooks in /etc/network/if-*.d/, just like bridge-utils
    hostapd /etc/hostapd/hostapd.conf

auto br0
iface br0 inet dhcp
    # This will run dhcp on eth0, then proceed to create an AP.

    # bridge-ports already handles creating the bridge, adding the ports and
    # upping them (with ifconfig and ioctls :-( )
    bridge_ports eth0

    # After the bridge is set up with only eth0, up the interface using
    # the previously defined stanza.  hostapd will add wlan0 to the bridge
    # using the modern rtnetlink API.
    post-up ifup wlan0

    # When preparing to down, destroy the AP (and remove it from the bridge)
    # before the bridge is downed.
    pre-down ifdown wlan0
    
por 03.03.2013 / 23:03
-1

Normalmente, essas interfaces não podem ser interligadas, já que o cabeçalho da camada de enlace WiFi não tem um campo de endereço separado de origem (ou destino) - é assumido que será sempre o mesmo endereço do dispositivo de transmissão (ou recebimento). Isso significa que um dispositivo WiFi não pode atuar como ponte.

Eu estou supondo que o hostapd alterna a interface para o modo "4addr", no qual os cabeçalhos contêm todos os quatro endereços. Se você tiver iw instalado, execute:

iw dev wlan0 set 4addr on
    
por 03.03.2013 / 22:49