
Tenho várias placas Raspberry Pi 3 modelo B com um adaptador Wi-Fi externo conectado a elas. Meu propósito é:
- Crie uma rede mesh de dispositivos RSP.
- Cada placa RSP deve ter seu próprio AP e clientes (móveis/laptops) podem ser conectados a ela.
- Os clientes desses AP podem se movimentar em diferentes faixas de dispositivos RSP e ainda assim devem ser capazes de se comunicar entre si, independentemente do AP ao qual estão conectados (como se estivessem conectados a uma única rede)
Para corrigir nº 1: usei batman-adv na interface wifi interna (wlan0) do RSP3 e agora todos os dispositivos podem executar ping entre si por meio de suas interfaces bat0 virtuais.
Para o nº 2: usei o adaptador wifi externo (wlan1) e com a ajuda de hostapd e dnsmasq, posso rodar 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. Até agora não consegui fazer uma única rede para todos os clientes. Também tentei usar o encaminhamento de IP entre wlan0 e wlan1, mas não consigo executar ping nos clientes conectados de outros dispositivos RSP.
Existe alguma outra abordagem (além do WDS) para criar uma rede única para todos os clientes conectados?
Responder1
Há algumas coisas que precisam de ajustes para que isso funcione.
Primeiro, você não deve ter todos os AP wlan1 do RPI no mesmo canal, pois isso causará interferência significativa entre eles.
Você também não deveria precisar usar o WDS. Veresta explicaçãopara obter 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 ideia certa de que precisa criar uma ponte entre wlan0 e wlan1 em cada RPI. 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-advaqui.
Outra coisa a observar é que você provavelmente não precisa executar o dnsmasq para serviços DHCP. Seus clientes poderiam simplesmente usar seus endereços IPv6 locais de link atribuídos automaticamente para se comunicarem entre si por meio desta LAN sem fio.
EDITAR:Meu erro. Parece que não há suporte para fazer uma ponte verdadeira usando wlan no RPI3. Parece que há uma possível solução alternativa usando NATaqui. Também pode ser possível se você conectar dois adaptadores WiFi externos que suportem conexões em ponte.
Responder2
Você não disse nada sobre a configuração de IP, e a configuração de IP é exatamente o que você precisa para resolver o problema nº 3.
Escolha seu plano IP com cuidado
Toda a sua rede terá um “esquema IP geral”. Por exemplo, muitas redes usam 192.168.*.*
.
Você pode usarqualquer espaço privado IP, tanto em IPv4 quanto em IPv6. Certifique-se de que não colidirá com nenhuma outra rede que seus usuáriosou RPispode estar conectado.
Por exemplo, digamos que usaremos a rede global 172.17.*.*
. Observe que os endereços "todos zero" ( 172.17.*.0
) e "todos uns" ( 172.17.*.255
) são reservados (ou seja, não utilizáveis) em uma rede e em todas as suas subdivisões.
Teremos que subdividir esta grande rede em redes menores que cada RPi utilizará de forma independente. Uma das sub-redes será utilizada para comunicação entre os RPis, para isso guardaremos 172.17.0.*
para nós. Poderíamos usar outro número, mas usar 0 facilita a configuração do Pis com um script.
A parte “pública” da rede utilizará os IPs 172.17.xxx.*
exclusivos xxx
para cada RPi. Novamente, para facilitar um script, começamos em 1 e incrementamos.
Os RPis precisam de um IP emambosredes. 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 gateway de rede 172.17.xxx.*
pelos demais RPis. Seria lógico combinar o endereço IP com a rede retransmitida: usaremos 172.17.0.xxx
.
Configure o Pis
Configure seus RPis'
wlan1
(opúblicointerface) para usar ofixoIP172.17.xxx.254
ondexxx
é único entre todos os seus RPis e não 0 (veja acima). Máscara de rede é255.255.255.0
.Configure seus RPis'
wlan0
(oprivadointerface) para usar ofixoIP172.17.0.xxx
ondexxx
é o mesmo que acima. Máscara de rede é255.255.255.0
.Em cada RPi, execute o seguinte script, após 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
DR, fazemos o seguinte: escolhemos uma rede grande, aqui 172.17.0.0/16
. Subdividimo-lo em 255 redes menores: 172.17.xxx.0/24
. Nós guardamos 0
para nós mesmos e fornecemos todos os outros números aos usuários. Em seguida, instruímos os RPis a transferir pacotes direcionados a outros computadores para o RPi "gateway" apropriado.
Diga aos dispositivos dos usuários para procurarem no lugar certo
Presumo que você esteja usando dnsmasq como servidor DHCP para redes públicas. Para que os dispositivos do usuário sejam configurados corretamente, você precisará ajustar suas configurações.
Configure o DHCP para que ele atenda endereços em um intervalo adaptado à rede, ou seja,
172.17.xxx.1
para172.17.xxx.253
.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
Usar uma rota estática evita sobrescrever o gateway padrão de seus clientes. Dessa forma, se eles ainda estiverem conectados a outra rede (ou seja, um laptop com Ethernet conectada), não deverão ter nenhum problema.
Certifique-se de testar isso com 1 ou 2 Pis e 1 ou 2 clientes antes de se comprometer com a configuraçãotodosseu RPis.