Estou desenvolvendo um aplicativo para Android que mantém a conectividade de um dispositivo com uma rede de malha WiFi baseada no Linux e envia periodicamente informações de status (GPS, vida útil da bateria etc.) para um servidor conhecido em algum lugar da malha. . Eu sou bem novo no geral em geral, então este projeto tem sido uma curva de aprendizado massiva, e eu acho que quando se trata de redes eu estou bem longe da minha cabeça. Estou com alguns problemas ao obter o tráfego de pacotes de atualização para encontrar de forma consistente o caminho de volta ao servidor e esperando que alguém possa me apontar na direção certa.
Cada um dos nós da malha é um pequeno computador Linux com três interfaces de rede:
ap0
A interface do ponto de acesso WiFi gerenciada por hostapd
. O endereço IP está definido como 192.168.0.1
, com os telefones celulares conectados atribuídos automaticamente a um IP na mesma sub-rede via dhcpd
.
mesh0
A interface de malha WiFi 802.11s conectando os nós da malha juntos. Cada um é membro da rede 10.0.0.0
.
eth0
Porta ethernet padrão, atribuído% IP192.168.1.101
. Apenas um dos nós da malha usará essa interface, que se conectará a uma rede que contém a máquina do servidor ( 192.168.1.1
).
Apenas para esclarecer, aqui está uma maquete da estrutura da rede:
Até agora, tudo o que consegui alcançar foi fazer os nós pingarem uns aos outros. Os dispositivos sem fio não podem ver fora de sua própria rede (a sub-rede do ponto de acesso), nem nada além do nó conectado à Ethernet capaz de executar ping no servidor. O script definindo tudo isso se parece com isso (em grande parte remendado das buscas no Google):
ifconfig wlan0 down
iw dev wlan0 del
iw phy phy0 interface add ap0 type managed
ip link set dev ap0 address 60:60:60:60:60:01 #this is different for each unit
ifconfig mesh0 up
ifconfig mesh0 10.0.0.1
ifconfig ap0 192.168.0.1 up
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o mesh0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i mesh0 -o eth0 -j ACCEPT
Certamente eu estou sentindo falta de algo muito burro / crucial, embora tudo tenha sido muito impressionante e eu não tenho certeza por onde começar. Alguma idéia?