A situação
O Raspbian Stretch está conectado sem fio a uma sub-rede privada 10.0.0.0/16 via wlan0 (modelo RT5370). Sem modificações adicionais, o Raspbian Stretch tem acesso à Internet e o DNS está funcionando. PS: Não tenho acesso físico ao roteador que se conecta à Internet - apenas wireless.
Adicionei outra NIC RT5370 como wlan1 e configurei-a como um ponto de acesso sem fio usando hostapd.
Como não conheço o intervalo de endereços do servidor DHCP do roteador, não quero adicionar um endereço estático ao wlan0.
Configurei um endereço IPv4 estático em wlan1 192.168.0.1/28 (16 endereços de host) e configurei o dnsmasq para ser o servidor DHCP desta rede.
O problema
Deve ser bem simples, na verdade.
O Raspbian Stretch pode 1) acessar a Internet ou 2) atuar como um WAP para conectar clientes. O problema é que os dois recursos não funcionarão ao mesmo tempo.
Já vi guias onde a conexão com a Internet é estabelecida via cobre em vez de ondas de rádio, mas não vejo por que faz alguma diferença se a interface conectada à Internet for sem fio em vez de com fio. De qualquer forma...
O que eu tentei
Em uma nova reinicialização, posso executar ping em google.com e 8.8.8.8 com êxito.
Posso ver wlan0 e wlan1 após a verificação ifconfig
e eles parecem estar configurados corretamente.
Aqui está a saída de route
.
Kernel IP routing table
Destination Gateway Genbask Flags Metric Ref Use Iface
default 10.0.0.36 0.0.0.0 UG 303 0 0 wlan0
default 192.168.0.1 0.0.0.0 UG 304 0 0 wlan1
10.0.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.240 U 303 0 0 wlan1
Não sei por que parece que dois gateways padrão estão aqui quando uma única rota padrão parece mais apropriada, mas a Internet funciona, então continuo...
Depois de provar que o Raspbian Stretch tem acesso à Internet, tento:
root@computer:/# hostapd /etc/hostapd/hostapd.conf
E veja isto:
Configuration file: /etc/hostapd/hostapd.conf
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlan1 disabled_11b_rates=0
nl80211: driver initialization failed.
wlan1: interface state UNINITIALIZED->DISABLED
wlan1: AP-DISABLED
hostapd_free_hapd_data: Interface wlan1 wasn't started
Agora, curiosamente, depois de fazer isso:
root@computer:/# killall wpa_supplicant
root@computer:/# hostapd /etc/hostapd/hostapd.conf &
Eu entendi isso:
Configuration file: /etc/hostapd/hostapd.conf
Using interface wlan1 with hwaddress aa:bb:cc:11:22:33 and ssid "myssid"
wlan1: interface state UNINITIALIZED->ENABLED
wlan1: AP-ENABLED
Isso me permite conectar com êxito máquinas clientes ao myssid via wlan1, mas agora não consigo executar ping em google.com ou 8.8.8.8 e notei que wlan0 não está aparecendo no ifconfig e minha tabela de roteamento está assim agora:
Kernel IP routing table
Destination Gateway Genbask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.240 U 303 0 0 wlan1
Para recuperar o wlan0, eu faço:
root@computer:/# service dhcpcd restart
root@computer:/# sysctl daemon-reload
Agora wlan0 e wlan1 estão aparecendo no ifconfig, o Raspbian Stretch pode executar ping em google.com e 8.8.8.8, mas os clientes conectados ao wlan1 não têm acesso à Internet.
Neste ponto, minha tabela de roteamento está assim:
Kernel IP routing table
Destination Gateway Genbask Flags Metric Ref Use Iface
default 10.0.0.36 0.0.0.0 UG 303 0 0 wlan0
10.0.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.0.0 0.0.0.0 255.255.255.240 U 304 0 0 wlan1
Se eu pudesse permitir o acesso à Internet dos clientes wlan1, tudo poderia acabar :)
Responder1
Como não há rota do roteador do gateway da Internet para a rede conectada ao wlan1 (192.168.0.0/28), acabei configurando o NAT dinâmico com sobrecarga de PAT entre wlan0 e wlan1.
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Missão cumprida!
Se eu tivesse acesso ao roteador do gateway da Internet, provavelmente poderia adicionar uma rota estática do endereço wlan0 do Raspbian Stretch à rede 192.168.0.0/28, mas 1) não tenho acesso a esse roteador e 2) também teria para configurar - a) uma reserva DHCP no servidor DHCP (ao qual também não tenho acesso) ou b) um endereço IP estático no wlan0 do Raspbian Stretch - se eu quisesse evitar fazer alterações quando a facilidade wlan0 dhcp expirar. Portanto, uma rota estática não funcionará neste caso.
De qualquer forma, este é o primeiro roteador/firewall funcional que vi ou ouvi falar que funcionaNÃOuse uma conexão com fio à WANOUa LAN.
As pessoas poderiam usar isso totalmente em uma rede WiFi gratuita e aberta em vez de usar um proxy VPN ou SOCKS (se você souber o suficiente sobre iptables para proteger sua conexão).