Eu tenho duas VMs, um Ubuntu Server e um Windows Server 2016. Em ambas as máquinas, tenho um comutador virtual com NAT (Hyper-V vSwitch no Windows) com contêineres Docker conectados a eles. No Linux, meu vswitch é 192.168.0.1/24
e no Windows meu vswitch é 192.168.1.1/24
. Gostaria de poder alcançar contêineres em várias máquinas usando uma combinação de roteamento estático e encaminhamento de IP. A rede externa à qual as VMs estão conectadas é 10.0.0.0/23
.
Eu tenho isso funcionando quando ping de contêineres Linux (na rede 192.168.0.1/24
) da VM do Windows. Consegui isso adicionando uma rota estática na VM do Windows à VM do Linux (que está em 10.0.0.10
na rede externa):
New-NetRoute -DestinationPrefix "192.168.0.0/24" -InterfaceAlias "Ethernet" -NextHop 10.0.0.10
Em seguida, na caixa do Linux, habilitei o encaminhamento de IP e fiz algumas mágicas do iptables:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o cbr0 -j MASQUERADE # cbr0 is the vswitch NAT interface which the containers are connected to
iptables -A FORWARD -i cbr0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o cbr0 -j ACCEPT
iptables -A FORWARD -i cbr0 -o cbr0 -j ACCEPT
Enquanto isso tudo está funcionando, estou lutando para conseguir a mesma coisa na direção oposta (Linux - > Windows). Eu adicionei uma rota estática à minha caixa de Linux assim, para apontar a rede 192.168.1.1/24
para a caixa do Windows (em 10.0.0.11
):
ip route add 192.168.1.0/24 via 10.0.0.11
Em seguida, habilito o encaminhamento de IP na caixa do Windows:
Get-NetAdapter | Set-NetIPInterface -Forwarding Enabled
Isso me permite executar o ping no gateway padrão do vSwitch na caixa do Windows a partir da caixa do Linux, que é 192.168.1.1
. No entanto, tentar pingar qualquer outra coisa nessa interface não funciona (por exemplo, 192.168.1.100
). Eu imagino que preciso fazer o equivalente ao iptables no Windows, mas não consegui encontrar uma alternativa. Alguém tem alguma ideia?
Felicidades