Wired to wireless bridge no Linux

17

Eu estou tentando configurar o meu Raspberry Pi como uma ponte, usando o Debian wheezy. Eu tenho um hostapd.conf : (alguns detalhes foram alterados para segurança, e sim, eu sei que o WEP não é bom) ...

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 isso em /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

Tudo parece estar ok, mas eu não posso me associar com a conexão sem fio em ponte - mesmo que as luzes piscando no pen drive sugiram que os pacotes estão sendo trocados.

Eu li em algum lugar que nem todos os cartões / dispositivos serão executados no modo hostap - eles não passarão pacotes em uma direção: certo? (A informação era um pouco antiga) - este meu cartão:

[    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

Então, o que eu tenho errado aqui?

Atualização : Então eu fiz mais investigações e consegui fazer a ponte, mas aparentemente isso destrói a conexão ethernet (com fio), o que é estranho. Por exemplo, no RPi:

Inicialize o sistema ...

ping 192.168.62.1 

(roteador) - isso funciona

Tentativa de associar à LAN sem fio ... falha (ou melhor, "com conectividade limitada" no telefone Android - não é bom)

brctl showmacs br0

Isso mostra apenas o mac de wlan0 e o mac do telefone neste momento

brctl addif br0 eth0 wlan0

Neste ponto, agora posso associar o telefone à rede sem fio, mas ...

ping 192.168.62.1

... falha

E, da mesma forma, não consigo mais executar ping no RasPi de nenhuma outra máquina na rede

Rodando

ifconfig br0

Sugere que a bridge está descartando pacotes ...

Alguma idéia?

Atualize ainda mais : O arquivo /etc/network/interfaces agora (e para a seqüência acima) diz:

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
    
por adrianmcmenamin 16.12.2012 / 20:11

5 respostas

10

Pontes facilitadas:

Existe um projeto no sourceforge feito apenas para sua situação. link Ele vem como um pacote deb.

Com relação aos pacotes de 'drop':

  1. Você verificou se o iptables está definido como padrão? sudo iptables --list deve dizer "ACCEPT, ACCEPT, ACCEPT" para uma caixa deste tipo. Se esse é o problema, desative-o.

  2. Você está mesmo encaminhando os pacotes, mano? Certifique-se de que a linha "net.ipv4.ip_forward = 1" NÃO esteja comentada em /etc/sysctl.conf (é por padrão ), reinicie sua rede.

  3. O modo promíscuo não é suportado pelo seu dongle sem fio. (o que significa que não pode aceitar pacotes que não são destinados a ele)

Ponte Pura vs. Ponte Compartilhada:

  1. iface br0 inet dhcp indica uma ponte compartilhada , o que significa que a ponte em si obtém um ip e pode ser um ponto de extremidade para o tráfego.

  2. Uma ponte pura não recebe um endereço IP e só encaminha o tráfego entre as duas interfaces

  3. Ponte compartilhada Exemplo de arquivo de configuração / etc / network / interfaces (Debian / Ubuntu)

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# Bridge between eth0 and wlan0
auto br0
iface br0 inet dhcp
  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 wlan0
  pre-up ip addr flush dev eth0
  pre-up ip addr flush dev wlan0
  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

Reinicie a rede: sudo /etc/init.d/networking restart Depois de fazer alterações complexas na configuração da rede, é mais fácil reinicializar do que ter certeza de que tudo foi reiniciado corretamente na reinicialização.

Você acha que tem problemas de roteamento:

  1. Elimine o DNS como causa testando com ping 8.8.8.8 . Se isso funcionar, provavelmente você tem um problema de DNS na sua rede.

  2. Verifique seu gateway com sudo ip route . Espero que você veja default via 192.168.1.1 dev br0 proto dhcp (supondo que seu gateway seja 192.168.1.1). Se estiver faltando ou errado, corrija sudo ip route add default via 192.168.1.1 . Teste novamente: ping 8.8.8.8

  3. Renove o ip da sua ponte compartilhada com dhclient br0 e teste novamente com ping 8.8.8.8

  4. Verifique suas interfaces 'escravas' com ifconfig e certifique-se de que eth0 e wlan0 NÃO possuam endereços IP. Eles são uma parte da ponte agora. Se o fizerem, certifique-se de removê-los de todos os arquivos de configuração, defini-los para 0.0.0.0 estático ou algo assim.

Se NUNCA funcionar, experimente o aplicativo debian bridging, e se isso não funcionar, seu dongle sem fio não suporta o modo promíscuo. (veja acima)

Se ele funcionar a qualquer momento aqui, reinicialize e verifique se ele ainda funciona.

    
por 18.12.2012 / 23:12
6

Eu tenho algumas pontes sem fio trabalhando no Debian Linux e no Openwrt, então estou muito familiarizado com esse problema.

Você perdeu um comando importante: esqueceu-se de informar ao seu driver sem fio para transmitir quadros de 4 endereços (às vezes indevidamente / historicamente chamado WDS), o que é necessário para a ponte 802.11 / sem fio. Faça isso com o comando "iw dev wlan0 set 4addr on". Use uma instrução "pre-up" no seu arquivo de interfaces da Debian na bridge para aplicá-la antes de criar a ponte. Note que o modo frame de 4 endereços requer suporte ao driver e alguns hardwares ou drivers 802.11 ruins podem não suportar.

Eu também suspeito strongmente que seus problemas podem ter sido complicados por um bug no kernel Linux que afeta especificamente as interfaces em ponte. Eu corri para este bug e tive que compilar meu próprio wpa_supplicant a partir de fontes porque a versão no Debian é antiga e afetada. wpa_supplicant e hostapd compartilham uma base de código comum, mas não estou completamente certo de que isso afetou o hostapd, assim como o wpa_supplicant.

Há uma solução alternativa para o problema aqui:

link

Tenho a impressão de que isso está na versão 2.5 e sei que está na fonte atual. A versão atual do Debian é 2.4, que está quebrada. Por favor, importe o projeto Debian para atualizar seus pacotes wpasupplicant e hostapd.

Aqui está uma configuração de exemplo para um cliente de ponte sem fio usando WPA / WPA2 com uma ponte sem fio entre as interfaces wlan0 e eth0, com o host recebendo um endereço DHCP na interface br0 (substitua "dhcp" por "manual" para nenhum IP endereço). Para uma situação em que você deseja ser o AP, inclua os comandos interface = e bridge = no hostapd.conf e omita os comandos wpa- * abaixo.

No seu arquivo / 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 verifique se o seu wpa_supplicant é a versão 2.5 ou posterior. Não funcionará com o wpa_supplicant 2.4 e as versões atuais do kernel.

Também devo observar que atualmente existe um bug de corrida no ifup, no qual as interfaces de ponte podem não aparecer no momento da inicialização, mas isso é outro problema.

    
por 19.03.2016 / 04:47
3

Você parece precisar de encaminhamento de ip.

tente cat /proc/sys/net/ipv4/ip_forward

Se for 0 issue: echo 1 > /proc/sys/net/ipv4/ip_forward

    
por 17.12.2012 / 11:23
0

Bridging só pode funcionar quando uma interface recebe todos os pacotes, caso contrário, eles receberão pacotes de ver endereçados apenas a eles. Sua configuração atual pode descrever uma configuração para um roteador, mas não para uma ponte.

eth0 e wlan0 não devem ter endereços IP (ou seja, 0.0.0.0) e, se desejado, você pode sempre usar um endereço IP para br0.

Veja também algumas documentações oficiais: link

    
por 20.12.2012 / 20:32
0

configure o 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
    
por 06.01.2015 / 16:21