У меня есть две виртуальные машины, одна Ubuntu Server и одна Windows Server 2016. На обеих машинах у меня есть виртуальный коммутатор с NAT (Hyper-V vSwitch в Windows) с подключенными к ним контейнерами Docker. В Linux мой vswitch - 192.168.0.1/24
а в Windows - vswitch 192.168.1.1/24
. Я хотел бы иметь возможность получать доступ к контейнерам на разных машинах, используя комбинацию статической маршрутизации и переадресации IP. Внешняя сеть, к которой подключены виртуальные машины, - 10.0.0.0/23
.
У меня это работает при пинге контейнеров Linux (в сети 192.168.0.1/24
) с виртуальной машины Windows. Я добился этого, добавив статический маршрут на виртуальной машине Windows к виртуальной машине Linux (в 10.0.0.10
во внешней сети):
New-NetRoute -DestinationPrefix "192.168.0.0/24" -InterfaceAlias "Ethernet" -NextHop 10.0.0.10
Затем в окне Linux я включил IP-переадресацию и сделал магию 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
Пока все это работает, я изо всех сил пытаюсь добиться того же в противоположном направлении (Linux -> Windows). Я добавил статический маршрут к своему блоку Linux следующим образом, чтобы указать сеть 192.168.1.1/24
на блок Windows (в 10.0.0.11
):
ip route add 192.168.1.0/24 via 10.0.0.11
Затем я включаю IP-переадресацию на коробке Windows:
Get-NetAdapter | Set-NetIPInterface -Forwarding Enabled
Это тогда позволяет мне пропинговать шлюз по умолчанию vSwitch на коробке Windows от коробки Linux, которая является 192.168.1.1
. Однако попытка пропинговать что-либо еще на этом интерфейсе не работает (например, 192.168.1.100
). Я предполагаю, что мне нужно сделать эквивалент iptables в Windows, но я не смог найти альтернативу. У кого-нибудь есть какие-либо идеи?
ура