meta final (diagrama ASCII)
WAN->Router->Server->GRE Tunnel->VM network->VM #1, etc.
Eu devo explicar algumas coisas primeiro.
Eu tenho um servidor executando o Proxmox (Debian 8.7 x64). Sua conexão com a Internet é eth0 (por trás do NAT com o protocolo GRE encaminhado)
A interface GRE (gre1) é criada e monitorada por um daemon personalizado em execução no host, mas, por outro lado, não toca nas regras ou rotas do firewall. O IP desta máquina no túnel GRE é 192.168.168.2 e o ponto final remoto é 192.168.168.1
Eu tenho uma configuração de bridge de rede (vmbr0). Aqui está a configuração relevante.
auto vmbr0
iface vmbr0 inet static
address 10.2.0.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.2.0.0/24' -o gre1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.2.0.0/24' -o gre1 -j MASQUERADE
Na máquina que é a outra extremidade do túnel GRE, eu já tenho o iptables configurado corretamente para o NAT e posso pingar 192.168.168.1 e destinos externos usando ping -Ig1 no host, mas dentro de uma VM eu posso pingar 192.168. 168.2 e .1 mas não fora dos destinos.
Eu suspeito que a solução para isso é alguma tabela de roteamento foo como eu consegui trabalhar anteriormente substituindo a rota do gateway padrão no host por 192.168.168.1 e criando manualmente uma rota para o endpoint do túnel GRE via 192.168.1.1 ( meu roteador), no entanto, isso também força todo o tráfego do host através do túnel GRE, o que eu não quero, apenas o tráfego da VM.
Para forçar todo o tráfego, incluindo o tráfego do host, pelo túnel GRE, fiz isso.
ip route add GRE_TUNNEL_ENDPOINT via 192.168.1.1 # to avoid running the GRE tunnel in itself
ip route change default via 192.168.168.1
Talvez algumas políticas de roteamento de origem estejam em ordem?
Obrigado
Tags networking debian gre proxmox