我注意到,根据 sysctl,WSL(Windows 10pro 1709)中似乎启用了 IP 转发。我希望可以用它在 WSL 上制作一个软件路由器——在同一物理主机上处理 Hyper-V VM 流量。VM 和主机可以通过共享的 /24 ipv4 子网进行通信。
理想情况下,我希望使用 WSL 来配置类似 iptables 的规则,或者使用某种可以使用 RAW 套接字重写流量的软件路由器程序。
# on the WSL bash
$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
我的 Windows 主机和虚拟机都在 192.168.4.X 中。192.168.4.215 是主机。192.168.4.228 是虚拟机。
我在 Windows 防火墙中添加了一条规则,以允许该子网上的每个传入 TCP 端口,并通过传输由 WSL 主机提供并由 VM 下载的网页来测试连接性。(例如python -m SimpleHTTPServer
在 wsl 中运行并 curl http://192.168.2.215
在 vm 上使用)
我已将 Windows 主机添加为虚拟机内的默认网关:
# route add default gw 192.168.4.215
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.4.215 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
但我在虚拟机上发起的 TCP 连接未被 Windows 路由(例如curl http://<publicip>
)。无法连接
我还需要在 Windows 中解除什么阻止?
编辑
我有点放弃了。因为我对虚拟机流量所做的一切就是通过主机的 VPN 隧道对其进行 NAT,所以我最终使用 powershell 创建了一个特殊的 NAT 接口:
https://serverfault.com/questions/911578/windows-10-pro-as-a-nat-between-two-interfaces