Roteamento com WireGuard. Tem uma solução funcional, mas parece um hack

Roteamento com WireGuard. Tem uma solução funcional, mas parece um hack

Estou tentando rotear o tráfego proveniente de uma rede docker... Tenho o Wireguard instalado e funcionando e, diferentemente dos exemplos nos documentos que roteiam TODO o tráfego através da VPN com base no destino, estou tentando rotear apenas ALGUMA parte do tráfego com base na rede de origem, roteamento de política e, em seguida, no destino.

Essencialmente, quero que todo o tráfego proveniente de 10.30.0.0 (rede docker bridge) passe pela interface wg0, exceto o tráfego que retorna para a mesma rede ou para minha lan. Basicamente, apenas tráfego de saída da Internet.

Eu tenho isso funcionando... mais ou menos... usando rotas estáticas.

post-up ip rule add from 10.30.0.0/16 table 200
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200
post-up ip route add 192.168.0.0/16 via 192.168.0.1 table 200
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200

Usar a tabela 200 para todo o tráfego proveniente da rota padrão 10.30.0.0 é por meio de wg0. A rota alternativa é um buraco negro, kill switch caso o wg0 caia.

As próximas duas rotas cuidam do roteamento de qualquer coisa interna em torno do wg0, caso contrário, os contêineres não poderão se comunicar nas redes ou qualquer webgui não poderá ser acessado. Isso funciona perfeitamente.

EXCETO que eu chamo essas rotas em /etc/network/interfaces.d/wg0 para que as interfaces sejam criadas e acionadas na inicialização, com as rotas adequadas. Está tudo bem, exceto esta rota:

post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200

Ele falha porque a docker bridge ainda não está ativa quando o wg0 é ativado, portanto, não é possível criar a rota porque o gateway está faltando. Por enquanto, eu hackeei tudo e usei "@reboot" no cron para abrir essa rota depois que a rede docker estiver ativa.

Existe uma solução mais elegante? Pensei em marcar todos os pacotes vindos de 10.30.0.0 que não são destinados a 10.30.0.0 ou 192.168.0.0 e (iptables -s 10.30.0.0/16 ! -d 192.168.0.0/16 etc etc) para evitar ter que usar esse caminho, mas não consigo descobrir isso de jeito nenhum.

Agradeço qualquer ajuda

Responder1

Eu resolvi isso chamando a tabela principal para essas rotas locais em vez de ter rotas na tabela 200 para elas

post-up ip rule add from 10.30.0.0/16 table 200
post-up ip rule add from 10.30.0.0/16 to 192.168.0.0/16 table main
post-up ip rule add from 10.30.0.0/16 to 10.30.0.0/16 table main
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200

informação relacionada