Linux 机器上 Windows Server 上两个接口之间的 IP 转发

Linux 机器上 Windows Server 上两个接口之间的 IP 转发

我有两台虚拟机,一台是 Ubuntu Server,另一台是 Windows Server 2016。两台机器上都有一个带 NAT 的虚拟交换机(Windows 上的 Hyper-V vSwitch),Docker 容器连接到它们。在 Linux 上,我的 vswitch 是192.168.0.1/24,在 Windows 上,我的 vswitch 是192.168.1.1/24。我希望能够使用静态路由和 IP 转发的组合来跨机器访问容器。虚拟机连接到的外部网络是10.0.0.0/23

192.168.0.1/24当我从 Windows VM ping Linux 容器(在网络上)时,它已经正常工作了。我通过在 Windows VM 上添加到 Linux VM(位于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/24Windows 机器 (at 10.0.0.11):

ip route add 192.168.1.0/24 via 10.0.0.11

然后我在 Windows 上启用 IP 转发:

Get-NetAdapter | Set-NetIPInterface -Forwarding Enabled

这样我就可以从 Linux 机器 ping Windows 机器上的 vSwitch 的默认网关,即192.168.1.1。但是,尝试 ping 该接口上的任何其他东西都不起作用(例如192.168.1.100)。我想我需要在 Windows 上执行与 iptables 等效的操作,但我找不到替代方案。有人有什么想法吗?

干杯

相关内容