Isso é (para mim!) uma pergunta difícil. Eu posso oferecer uma solução parcial e uma ideia para testar uma solução completa.
SE este era um Linux regular, como por exemplo um Debian, pode-se inserir, no arquivo /etc/network/interfaces
, na sub-rotina da interface externa (vamos chamá-lo wan
), a seguinte linha:
pre-up iptables -A OUTPUT -s 192.168.0.0/24 -o wan -j DROP
onde assumi que sua LAN é 192.168.0.0/24. O fato de usar pre-up
torna certa a regra de firewall em vigor quando a interface wan
é ativada. Juntamente com a regra:
iptables -t nat -A POSTROUTING -o wan -j MASQUERADE
podemos ter certeza de que os pacotes da LAN passam apenas pelo tun0
, mesmo que alguns sejam descartados enquanto esperamos que o OpenVPN estabeleça a conexão com o servidor.
No entanto, não consegui encontrar nas páginas da Web do OpenWRT um substituto para a condição pre-up
acima. Então, se você configurar seu firewall com as duas regras acima, você estará certo de que nenhum pacote de sua LAN deixa seu roteador fora do OpenVPN, mas você não tem certeza de que o firewall do iptables será ativado antes networking.
Em esta página Wiki do OpenWRT , a ordem de execução dos diferentes serviços é explicada:
rcS executes the symlinks to the actual startup scripts located in /etc/rc.d/S##xxxxxx with option "start":
.....
S40network start a network subsystem (run /sbin/netifd, up interfaces and wifi
S45firewall create and implement firewall rules from /etc/config/firewall
Você vê que os dois serviços são iniciados um após o outro, o que deixa pouco tempo para os pacotes passarem; isso é certamente melhor do que esperar que o OpenVPN apareça. Esta é a minha solução parcial: é parcial porque encurtei o tempo durante o qual os pacotes da LAN podem passar, mas não acedeu desta vez .=0
Você pode tentar inverter os dois serviços, isto é, renomeando-os:
S40firewall
S45network
e veja se isso funciona. Não tenho certeza sobre o que o iptables/netfilter
faz, quando a interface que ele tenta proteger não existe. No meu Debian isso funcionou bem, mas, como eu não tenho um OpenWRT para experimentar, não posso ter certeza de que isso funcionará para você também. Esta é a minha sugestão para uma solução completa. Felicidades.