
Tengo varias placas Raspberry Pi 3 modelo B con un adaptador wifi externo conectado. Mi propósito es:
- Cree una red en malla de dispositivos RSP.
- Cada placa RSP debe tener su propio AP y se pueden conectar clientes (móviles/portátiles).
- Los clientes de estos AP pueden moverse entre diferentes rangos de dispositivos RSP y aún deberían poder hablar entre sí sin importar a qué AP estén conectados (como si estuvieran conectados a una sola red).
° 1: utilicé batman-adv en la interfaz wifi interna (wlan0) de RSP3 y ahora todos los dispositivos pueden hacer ping entre sí a través de sus interfaces bat0 virtuales.
° 2: utilicé el adaptador wifi externo (wlan1) y con la ayuda de hostapd y dnsmasq, puedo ejecutar el AP (el mismo ssid y canal en todos los AP) en cada una de las placas RSP. También he conectado algunos dispositivos móviles en diferentes AP.
Mi principal problema de bloqueo es el objetivo n.º 3:
Para resolver esto, intenté crear un puente entre las interfaces wlan0 y wlan1 con la herramienta bridge-utils. Pero en RSP, ambas interfaces no son compatibles con el módulo WDS. Hasta ahora no puedo crear una red única para todos los clientes. También intenté utilizar el reenvío de IP entre wlan0 y wlan1 pero no puedo hacer ping a los clientes conectados desde otros dispositivos RSP.
¿Existe algún otro enfoque (aparte de WDS) para crear una red única para todos los clientes conectados?
Respuesta1
Hay un par de cosas que necesitan ajustes para que esto funcione.
Primero, no debe tener todos los AP wlan1 de RPI en el mismo canal porque causará una interferencia significativa entre ellos.
Tampoco debería necesitar utilizar WDS. Veresta explicaciónpara más información sobre esto. Solo asegúrese de que cada AP tenga el mismo SSID, tipo de seguridad WiFi y la misma contraseña.
Tiene la idea correcta de que necesita crear un puente entre wlan0 y wlan1 en cada RPI. No estoy familiarizado con bridge-utils, pero probablemente sería mejor seguir las instrucciones sobre cómo crear un puente en la documentación de batman-adv.aquí.
Otra cosa a tener en cuenta es que probablemente no necesite ejecutar dnsmasq para los servicios DHCP. Sus clientes podrían simplemente usar sus direcciones IPv6 locales de enlace asignadas automáticamente para comunicarse entre sí a través de esta LAN inalámbrica.
EDITAR:Mi error. Parece que no se admite hacer un verdadero puente usando wlan en RPI3. Parece que existe una posible solución utilizando NATaquí. También puede ser posible si conecta dos adaptadores WiFi externos que admitan conexiones puente.
Respuesta2
No ha dicho nada sobre la configuración de IP, y la configuración de IP es precisamente lo que necesita para solucionar el problema n.º 3.
Elija su plan IP con cuidado
Toda su red tendrá un "esquema de IP general". Por ejemplo, muchas redes utilizan 192.168.*.*
.
Puedes usarcualquier espacio privado IP, tanto en IPv4 como en IPv6. Asegúrese de que no colisione con ninguna otra red de sus usuarios.o RPispodría estar conectado.
Por ejemplo, digamos que usaremos la red global 172.17.*.*
. Tenga en cuenta que las direcciones "todos ceros" ( 172.17.*.0
) y "todos unos" ( 172.17.*.255
) están reservadas (es decir, no se pueden utilizar) en una red y en todas sus subdivisiones.
Tendremos que subdividir esta gran red en redes más pequeñas que cada RPi utilizará de forma independiente. Una de las subredes se utilizará para la comunicación entre los RPis, y la guardaremos 172.17.0.*
para nosotros. Podríamos usar otro número, pero usar 0 facilita la configuración del Pis con un script.
La parte "pública" de la red utilizará las IP 172.17.xxx.*
que xxx
son únicas para cada RPi. Nuevamente, para facilitarle las cosas a un script, comenzamos en 1 y lo incrementamos.
Los RPis necesitan una IP enambosredes. Para la red pública, es una buena práctica utilizar .254
, así será 172.17.xxx.254
. Pero ¿qué pasa con la red central? El RPi será utilizado como puerta de enlace a la red 172.17.xxx.*
por otros RPi. Lo lógico sería hacer coincidir la dirección IP con la red retransmitida: usaremos 172.17.0.xxx
.
Configurar el Pis
Configure sus RPis
wlan1
(elpúblicointerfaz) para utilizar elfijadoIP172.17.xxx.254
dondexxx
es única entre todos sus RPis y no 0 (ver arriba). La máscara de red es255.255.255.0
.Configure sus RPis
wlan0
(elprivadointerfaz) para utilizar elfijadoIP172.17.0.xxx
dondexxx
es el mismo que el anterior. La máscara de red es255.255.255.0
.En cada RPi, ejecute el siguiente script, después de reemplazarlo
$END
por la cantidad de RPi que esté utilizando: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, hacemos lo siguiente: elegimos una red grande, aquí 172.17.0.0/16
. Lo subdividimos en 255 redes más pequeñas: 172.17.xxx.0/24
. Los guardamos 0
para nosotros y damos todos los demás números a los usuarios. Luego, le decimos a los RPi que transfieran los paquetes dirigidos a otras computadoras al RPi de "puerta de enlace" apropiado.
Dile a los dispositivos de los usuarios que busquen en el lugar correcto
Supongo que está utilizando dnsmasq como servidor DHCP para las redes públicas. Para configurar correctamente los dispositivos del usuario, deberá modificar su configuración.
Configure DHCP para que proporcione direcciones en un rango adaptado a la red, es decir,
172.17.xxx.1
a172.17.xxx.253
.Agregue una ruta estática a la parte DHCP de la configuración de dnsmasq (nuevamente reemplazándola
xxx
apropiadamente):dhcp-option=121,16.172.17.0.0,172.17.xxx.254
Al utilizar una ruta estática, evite sobrescribir la puerta de enlace predeterminada de sus clientes. De esta manera, si todavía están conectados a otra red (es decir, una computadora portátil con Ethernet conectada), no deberían tener ningún problema.
Asegúrese de probar esto con 1 o 2 Pis y 1 o 2 clientes antes de comprometerse a configurartodosus RPis.