通过 Windows VM 路由流量

通过 Windows VM 路由流量

我有一个在 KVM 上运行的 Windows VM,并通过 NAT 网络连接到我的客户机。
除了 NAT 网络,我无法使用任何其他网络,因为 Windows VM 有一个企业软件,只允许一个连接。
客户机 Windows VM 运行只能在 Windows 上运行的自定义 VPN。我的主机运行的是 Linux,我想通过 VM 和 VPN 重定向部分流量(例如 10.0.0.0/8)。

我正在尝试做的事情:

┌─────────────────────────────────────┐
│            Windows VM               │
│      ┌────────────────────────┐     │
│      │                        │     │                ┌───────────────────────┐
│      │                    ┌───▼─────┤                │                       │
│      │ 192.168.122.2      │   VPN   │     ┌─────┐    │   Corporate network   │
├──────┼────────────────────┴───┬─────┤     │     │    │                       │
│      │       NAT network      └─────┼────►│ WWW ├───►│  10.0.0.0/8           │
│      │                              │     │     │    │                       │
├──────┼──────────────────────────────┤     └─────┘    │                       │
│      │ 192.168.122.1                │                └───────────────────────┘
│                                     │
│                                     │
│            Linux guest              │
└─────────────────────────────────────┘

我已尝试过:

  • 在来宾虚拟机上启用 IP 转发
  • 在主机上添加到客户机的路由(ip route add 10.0.0.0/8 via 192.168.122.2)

但是 traceroute 显示虚拟机没有转发请求。

是否可以使用 NAT 网络来实现这一点?您将如何实现这一点?

我已经看到了关于这个主题的其他问题(将一些流量路由到连接到 VPN 的虚拟机),但找不到实现正确路由的方法。

答案1

理论上可行,但实践中未必如此,因为即使所有设置都正确,企业 VPN 客户端也可能故意阻止转发来自外部的数据包。(例如,据我所知,思科的 AnyConnect 就是这样一个客户端。)

使用“NAT 网络”应该没有问题,因为通常“NAT”部分仅适用于完全离开主机的数据包,而在主机和客户机之间,它只是一个桥接的以太网子网。(如果两个主机之间没有网关,则也没有 NAT。)

但是,您实际上需要在不同的地方使用 NAT – 除了您添加的路由之外,您还需要 Windows 计算机伪装来自主机的所有数据包,然后再将它们转发到 VPN 接口。如果这里没有 SNAT,VPN 服务器(和您的公司网络)将看到来自您的 LAN IP 地址的数据包 – 它们可能会被 VPN 客户端过滤,可能会在 VPN 服务器上被拒绝,即使它们没有被拒绝,公司网络中的设备也不知道如何回复给他们。

因此,在您无法控制远程网络的情况下(即您没有设置适当的站点到站点 VPN),“VPN 客户端”机器需要对来自 192.168.122.x 的所有数据包进行 SNAT,就好像它们来自“VPN 客户端”本身(来自其 10.something 地址)。

我不知道如何在 Windows 10 中启用 SNAT/masquerade,但我确信该功能存在,因为 Hyper-V 在消费者版本的默认 vSwitch 上启用了它(所以您可能可以在 Windows VM 中安装 Hyper-V 并使“物理”以太网接口成为 vSwitch 的成员?)

相关内容