Ligado à ponte sem fio no Linux


17

Estou tentando configurar meu Raspberry Pi como uma ponte, usando o Debian wheezy. Eu tenho um hostapd.conf: (alguns detalhes foram alterados por 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 dar certo, mas não consigo me associar à 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: está certo? (A informação era um pouco antiga) - este é o 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 entendi errado aqui?

Atualização : Então, eu fiz novas investigações e posso levantar 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 associação à LAN sem fio ... falha (ou melhor, "com conectividade limitada" no telefone Android - nada bom)

brctl showmacs br0

Isso só mostra o mac da 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

Corrida

ifconfig br0

Sugere que a ponte está descartando pacotes ...

Alguma ideia?

Atualização adicional : O /etc/network/interfacesarquivo agora (e para a sequê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

Definitivamente, este é um tópico para o Superusuário, então não se preocupe. Boa sorte com a recompensa, estou curioso para saber qual é a resposta também.
Breakthrough

O que iw dev wlan0 infomostra? E pesquisar no Google ID do dispositivo mostra que você precisa de um kernel recente ou de módulos sem fio para executar este dispositivo no modo AP. Veja isso . Qual kernel e ath9kdriver você está executando?
gertvdijk

Respostas:


10

Pontes fáceis:

Existe um projeto no sourceforge feito apenas para a sua situação. http://sourceforge.net/projects/bridger/ Ele ainda vem como um pacote deb.

Com relação a 'descartar' pacotes:

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

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

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

Ponte pura versus ponte compartilhada:

  1. iface br0 inet dhcp indica uma ponte compartilhada , o que significa que a própria ponte recebe um IP e pode ser um ponto de extremidade para o tráfego.

  2. Uma ponte pura não obtém um endereço IP e apenas encaminha o tráfego entre as duas interfaces

  3. Arquivo de configuração de amostra de ponte compartilhada / etc / network / interfaces (Debian / Ubuntu)

# Este arquivo descreve as interfaces de rede disponíveis no seu sistema
# e como ativá-los. Para mais informações, consulte interfaces (5).

# A interface de rede de loopback
auto lo
iface lo inet loopback

# Ponte entre eth0 e wlan0
auto br0
iface br0 inet dhcp
  conjunto de links IP pré-up eth0 desativado
  conjunto de links IP pré-up wlan0 down
  pré-up brctl addbr br0
  pré-up brctl addif br0 eth0 wlan0
  pré-up ip addr flush dev eth0
  pré-up ip addr flush dev wlan0
  conjunto de links IP pós-down eth0 down
  conjunto de links IP pós-down wlan0 down
  conjunto de links ip pós-down br0 down
  brctl delif br0 post0-down eth0 wlan0
  post-down brctl delbr br0

Reinicie a rede: sudo /etc/init.d/networking restartDepois de fazer alterações complexas na configuração da rede, é mais fácil apenas reiniciar em vez de garantir que tudo tenha sido 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 a sudo ip routeesperança de ver default via 192.168.1.1 dev br0 proto dhcp(assumindo que seu gateway seja 192.168.1.1). Se estiver ausente ou errado, corrija-o sudo ip route add default via 192.168.1.1. Teste novamente:ping 8.8.8.8

  3. Renove o seu ip ponte compartilhada com dhclient br0e reteste comping 8.8.8.8

  4. Verifique suas interfaces 'escravo' com ifconfige certifique-se eth0 e wlan0 NÃO têm endereços IP. Eles fazem parte da ponte agora. Se o fizerem, certifique-se de removê-los de todos os arquivos de configuração, defina-os como 0.0.0.0 estático ou algo assim.

Se nada disso funcionar, tente o aplicativo de ponte debian e, se isso não funcionar, seu dongle sem fio não suporta o modo promíscuo. (Veja acima)

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


Consulte a atualização mais recente do arquivo de interfaces e, sim, todas as cadeias estão definidas como ACEITAR
adrianmcmenamin

Estas instruções de funcionar, pelo menos no sentido de se aplicar br0 dhclient e especifique o eth0 é bloqueado para 0.0.0.0, agora só tem que trabalhar para fora como para torná-lo automático :)
adrianmcmenamin

OK, eu o instalei e funcionei com um pouco de brincadeira por meio de scripts rc.local (basicamente eu tenho que reiniciar o hostapd) - para que você receba a recompensa. Mas agora meu servidor squid na mesma caixa está falhando - mas eu não lhe perguntei sobre isso, então terá que ser outra pergunta.
Adrianmcmenamin


Quais são as configurações eth0e wlan0neste exemplo? Especificamente, como você define o SSID e qualquer autenticação wlan0?
Ian

6

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

Você perdeu um comando importante: esqueceu de dizer ao driver sem fio para transmitir quadros de 4 endereços (às vezes chamado de forma inadequada / histórica de WDS), necessário para a ponte sem fio 802.11 /. Faça isso com o comando "iw dev wlan0 set 4addr on". Use uma declaração "pre-up" no seu arquivo de interfaces Debian na ponte para aplicá-la antes de abrir a ponte. Observe que o modo de quadro de 4 endereços requer suporte de driver e alguns drivers ou hardware ruins 802.11 podem não ser compatíveis.

Eu também suspeito fortemente que seus problemas podem ter sido complicados por um bug no kernel do Linux que afeta especificamente as interfaces de ponte. Eu me deparei com esse 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 tenho certeza absoluta de que isso afetou tanto o hostapd quanto o wpa_supplicant.

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

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

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

Aqui está um exemplo de configuração para um cliente de ponte sem fio usando WPA / WPA2 com uma ponte sem fio entre as interfaces wlan0 e eth0, com o host obtendo um endereço DHCP na interface br0 (substitua "dhcp" por "manual" para nenhum endereço IP). 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.

Devo também observar que atualmente há um bug de corrida no ifup, onde as interfaces de ponte podem não aparecer no momento da inicialização, mas isso é outra questão.


3

Você parece precisar de encaminhamento de IP.

experimentar cat /proc/sys/net/ipv4/ip_forward

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


sys.net.ipv4.ip_forwardé para roteamento IPv4, NAT etc. O Bridges trabalha uma camada abaixo na pilha de rede.
Thomas Guyot-Sionnest

0

A ponte só pode funcionar quando uma interface recebe todos os pacotes, caso contrário, eles verão os pacotes 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 (significando 0.0.0.0) e, se desejar, você sempre pode usar um endereço IP para br0.

Aqui está também alguma documentação oficial: http://wiki.debian.org/BridgeNetworkConnections


1
Eu sei que este é um post antigo, mas desde que o encontrei enquanto procurava por outra coisa, pensei em mencionar que não importa se uma interface de ponte possui / não tem um endereço IP no que diz respeito à ponte. No Linux, uma interface em ponte também retransmitirá pacotes ARP (camada 2 do OSI). Qualquer switch mapeará vários dispositivos conectados ao outro lado da ponte como sendo aceitos nessa porta do switch. Minha referência é experiência na implantação de servidores Linux como roteadores, pontes, firewalls, etc para implantações de alta disponibilidade em maiores centros de dados nível incluindo um principal EUA NAP para S. America
jetole

0

configurar 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.