4

У меня есть две виртуальные машины, одна 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, но я не смог найти альтернативу. У кого-нибудь есть какие-либо идеи?

ура

0