我有一台 Windows 10 Pro 主机,虚拟机在 Hyper-V 中运行。虚拟机与主机位于一个专用 LAN 上。我想为虚拟机提供互联网连接,和让虚拟机流量通过主机上配置的 VPN 连接。特定软件 VPN(pulse secure)不会创建与 vswitch“可桥接”的接口。
我的 hyper-V VM 位于 192.168.4.0/24,而我的 Windows 10 主机在 192.168.4.215/24 上有一个虚拟接口,我想将其用作 VM 流量的网关。我想使用 Windows 主机上的路由表将来自 192.168.4.0/24 上的 VM 的流量路由到主机上配置的 VPN 接口。
我通常将虚拟机放在 LAN 上,为同一 LAN 上的主机创建虚拟接口,然后将虚拟接口桥接到物理接口(物理 NIC 或无线 NIC),从而为虚拟机提供 Internet 连接。但是,在这种情况下,虚拟机流量将绕过 Windows 主机上配置的软件 VPN - 我希望虚拟机流量通过 VPN 进行路由,就像主机应用程序的流量路由一样。
当我激活 VPN 连接(pulse secure)时,主机上会出现一个新的虚拟接口,地址为 10.0.0.100/32,并且主机的路由表中会自动添加一条默认路由,指向 10.0.0.100 作为默认网关。这实际上使 Windows 主机及其桌面应用程序生成的所有外部流量都通过 VPN 接口。
我想配置主机以将所有来自 192.168.4.0/24 的传入 IP 流量重新路由/转发到 VPN 接口(可能经过 NAT)。通常我会将要连接的接口桥接在一起,但这个特定的 VPN 适配器拒绝桥接任何设备。
有没有办法在 win10 pro 中实现这一点,还是我需要 windows server?这也很烦人,因为这个特定的 vpn 软件在 Linux 上得不到很好的支持。
答案1
通过创建 HyperV NAT 接口,我已成功在 Windows 10 上实现了某些功能。我相信您需要 Windows 10 专业版才能实现此功能。Win10 家庭版(目前)没有 Hyper-V。
这种方法效果很好:
https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-guide/setup-nat-network
- 按照上述链接中的说明,使用 powershell 创建 NAT 接口。根据文档,此类接口显然限制为 1 个,但我的计算机上目前有 2 个活动 vNAT 接口:一个是我自己创建的,另一个称为 DockerNAT,由 Docker for Windows 创建。此步骤将为您提供一个新的 vSwitch,并在主机上为其分配一个 IP。
- 在 Hyper-V 中,编辑 VM 的设置以添加连接到步骤 1 中创建的 NAT 交换机接口的新网络接口。
- 在虚拟机上,为新网卡分配该 NAT 子网上的静态 IP(例如
ip addr add dev ethX 192.168.0.100/24
),并将默认网关配置为 vSwitch IP,例如(route add default gw 192.168.0.1 ethX
) - 将任意名称服务器添加到 /etc/resolv.conf (
e.g. echo "nameserver 8.8.8.8" >> /etc/network/interfaces
)
使用 NAT 接口的效果是,使用 NAT vSwitch 的任何 VM 发出的流量都将伪装在网关 IP 后面(192.168.0.1
在我的示例中),并将使用 Windows 主机的路由表在内部重新路由。因此,当我打开 VPN 时,这也会将所有 Natted 流量重新路由到 VPN。
在许多情况下,我想直接从主机访问虚拟机,但 NAT 使这变得很困难(一切都在后面192.168.0.1
)。我没有进行大量动态端口转发(使用 powershell 也可以做到这一点),而是简单地在主机和虚拟机之间创建了另一个非 NAT 的内部网络(例如192.168.5.0/24
)。