Como usar vários Raspberry Pi para criar uma única rede (malha) de pontos de acesso

2

Eu tenho várias placas modelo 3 de framboesa pi com um adaptador externo conectado a elas. Meu objetivo é:

  1. Crie uma rede de malha de dispositivos RSP.
  2. Cada placa RSP deve ter seu próprio AP e os clientes (móveis / laptops) podem ser conectados a ela.
  3. Os clientes desses APs podem se movimentar em diferentes intervalos de dispositivos RSP e ainda devem poder conversar entre si, independentemente do ponto de acesso ao qual estejam conectados (como se estivessem conectados a uma única rede)

Para corrigir # 1: usei o batman-adv na interface wifi interna (wlan0) do RSP3 e agora todos os dispositivos podem pingar uns aos outros através de suas interfaces virtuais bat0.

Para # 2: usei o adaptador wifi externo (wlan1) e com a ajuda de hostapd e dnsmasq, posso executar o AP (mesmo ssid e canal em todos os AP) em cada placa RSP. Também conectei alguns dispositivos móveis em diferentes APs agora.

Meu principal problema de bloqueio é o objetivo nº 3:

Para resolver isso, tentei criar uma ponte entre as interfaces wlan0 e wlan1 com a ferramenta bridge-utils. Mas no RSP, ambas as interfaces não suportam o módulo WDS. Então, até agora não consigo fazer uma única rede para todos os clientes. Eu também tentei usar o encaminhamento de IP entre wlan0 e wlan1, mas não consigo pingar os clientes conectados de outros dispositivos RSP.

Existe alguma outra abordagem (diferente de WDS) para criar uma única rede para todos os clientes conectados?

    
por Mahesh Jena 11.08.2017 / 08:41

2 respostas

1

Você não disse nada sobre configuração IP, e a configuração IP é exatamente o que você precisa para resolver o problema nº 3.

Escolha cuidadosamente seu plano de IP

Toda a sua rede terá um "esquema geral de IP". Por exemplo, muitas redes usam 192.168.*.* .

Você pode usar qualquer espaço privado de IP, tanto em IPv4 quanto em IPv6 . Certifique-se de que ele não colidiria com outras redes às quais seus usuários ou RPis possam estar conectados.

Por exemplo, digamos que usaremos a rede global 172.17.*.* . Observe que os endereços "all-zero" ( 172.17.*.0 ) e "all-ones" ( 172.17.*.255 ) são reservados (ou seja, não são utilizáveis) em uma rede e em todas as suas subdivisões.

Teremos que subdividir essa grande rede em redes menores que cada RPi usará independentemente. Uma das sub-redes será usada para comunicação entre os RPIs, para isso nós manteremos 172.17.0.* para nós mesmos. Poderíamos usar outro número, mas usar 0 facilita a configuração do Pis com um script.

A parte "pública" da rede usará os IPs 172.17.xxx.* , em que xxx é exclusivo para cada RPi. Novamente, para facilitar o script, começamos em 1 e aumentamos.

Os RPis precisam de um IP em ambas redes. Para a rede pública, é uma prática recomendada usar .254 , então será 172.17.xxx.254 . Mas e a rede central? O RPi será usado como um gateway para a rede 172.17.xxx.* pelos outros RPIs. Seria lógico combinar o endereço IP com a rede retransmitida: usaremos 172.17.0.xxx .

Configurar o Pis

  1. Configure o wlan1 do seu RPis (a interface pública ) para usar o fixo IP 172.17.xxx.254 onde xxx é único entre todos os seus RPis e não 0 (veja acima). A máscara de rede é 255.255.255.0 .

  2. Configure o wlan0 dos seus RPIs (a interface privada ) para usar o fixo IP 172.17.0.xxx onde xxx é o mesmo que acima. A máscara de rede é 255.255.255.0 .

  3. Em cada RPi, execute o seguinte script, depois de substituir $END pelo número de RPIs que você está usando:

    echo 1 > /proc/sys/net/ipv4/ip_forward
    for i in $(seq 1 $END); do route add -net 172.17.$i.0 netmask 255.255.255.0 gw 172.17.0.$i; done
    iptables -A FORWARD -s 172.17.0.0/16 -d 172.17.0.0/16 -j ACCEPT
    

TL; DR, fazemos o seguinte: escolhemos uma rede grande, aqui 172.17.0.0/16 . Nós o subdividimos em 255 redes menores: 172.17.xxx.0/24 . Nós mantemos 0 para nós mesmos e fornecemos todos os outros números para os usuários. Em seguida, informamos ao RPis para transferir pacotes destinados a outros computadores para o RPI "gateway" apropriado.

Diga aos dispositivos dos usuários para procurar no lugar certo

Eu suponho que você esteja usando o dnsmasq como o servidor DHCP para as redes públicas. Para que os dispositivos do usuário sejam configurados corretamente, você precisará ajustar suas configurações.

  1. Configure o DHCP para que ele atenda aos endereços em um intervalo adaptado à rede, I.E. 172.17.xxx.1 a 172.17.xxx.253 .

  2. Adicione uma rota estática à parte DHCP da configuração do dnsmasq (novamente substituindo xxx apropriadamente):

    dhcp-option=121,16.172.17.0.0,172.17.xxx.254
    

Usando uma rota estática, evite sobrescrever o gateway padrão de seus clientes. Dessa forma, se eles ainda estiverem conectados a outra rede (ou seja, um laptop com Ethernet conectado), eles não devem ter nenhum problema.

Certifique-se de testar isso com 1 ou 2 Pis e 1 ou 2 clientes antes de se comprometer a configurar todos seus RPIs.

    
por 11.08.2017 / 09:49
1

Existem algumas coisas que precisam de ajustes para que isso funcione.

  • Primeiro, você não deve ter todos os APs wlan1 do RPI no mesmo canal, pois isso causa uma interferência significativa entre eles.

  • Você também não precisa usar o WDS. Veja esta explicação para mais informações sobre isso. Apenas certifique-se de que cada AP tenha o mesmo SSID, tipo de segurança WiFi e a mesma senha.

  • Você tem a idéia certa de que você precisa criar uma ponte entre wlan0 e wlan1 em cada RPI. Eu não estou familiarizado com bridge-utils, mas provavelmente seria melhor apenas seguir as instruções sobre como fazer uma ponte na documentação do batman-adv aqui .

Outra coisa a notar é que você provavelmente não precisa estar executando o dnsmasq para serviços DHCP. Seus clientes podem usar apenas os endereços IPv6 locais de link atribuídos automaticamente para se comunicarem por essa LAN sem fio.

EDIT: Meu erro. Parece que fazer uma ponte verdadeira usando o wlan no RPI3 não é suportado. Parece que há uma possível solução alternativa usando o aqui . Também pode ser possível se você conectar dois adaptadores WiFi externos que suportem conexões de ponte.

    
por 11.08.2017 / 10:16