我有一台通过有线以太网连接的 Windows 10 主机。其以太网接口与 Hyper-V vEthernet 接口桥接。主机和 VM 客户机均使用家庭网络上的 DHCP 进行配置,并且均能连接互联网。
当我启用 Pulse Secure VPN (v5.3.3) 连接时,主机的流量会被隧道传输,但来宾的流量不会(来宾仍然使用底层非 VPN 连接)。来宾正在运行 Ubuntu 16.04。
我怎样才能让两者都穿过隧道?
我知道,基于知识库文章软件在物理设备上使用轻量级过滤器。这种类型的过滤器驱动程序是否存在限制,导致难以与桥接器一起使用?
也许有解决方法来共享隧道连接?
答案1
简而言之,创建一个软件 NAT,并在该 NAT 子网上为 VM 提供一个 vNIC。
一旦建立连接,此特定 VPN 软件将在主机上设置新的 VPN 虚拟适配器,配置为 /32 IP(例如10.1.1.17/32
)。当该 VPN “连接”时,它将使用新的优先默认网关路由条目修改 Windows 主机的路由表,使传出的主机流量通过 VPN 接口。然后,VPN 软件在特定物理设备上传递加密数据包。
但是,流经以太网桥(物理以太网接口 + VM 虚拟以太网)的流量不会流经该路由表,因此无论 VPN 优先网关如何,流量都会以相同的方式流动。我的意思是,桥接流量将离开主机而不经过 VPN 路由。这解释了为什么我无法让 VM 客户机流量通过隧道。至少这是我的理解。
我的下一个尝试是在虚拟机和 VPN 虚拟适配器**之间添加另一个桥接器,这样我就可以从虚拟机路由到该默认网关10.1.1.17/32
。但是,这个特定的 VPN 虚拟适配器**很挑剔,如果移入桥接器,它就会拒绝工作。此外,据我所知,在 Windows 10 中只能有一个桥接设备,所以无论如何这都不是一个理想的选择。
意识到这是 L3 问题后,我尝试将 Windows 10 主机配置为在两个子网(VM <=> VPN)之间路由。毕竟,主机在 VM 子网192.168.4.0/24
和 VPN 子网上都分配了一个地址(唯一这样的地址10.1.1.17/32
)。但将 Windows 10 配置为实际路由器似乎是一场噩梦(您需要服务器版本)。
我最终使用软件 NAT 来解决这个问题。事实证明,Windows 10 可以创建本机 NAT(无需额外的服务或软件)。为了允许虚拟机的流量通过 VPN,我在该 NATted 子网上为他们提供了一个 vNIC,Windows 负责通过其主表转发该流量,这做通过 VPN。这样,我还可以摆脱一些桥接,因为当软件 VPN 出现故障(即断开连接)时,流量会自动重新路由到我拥有的任何其他物理连接(WiFi 或有线)!
我已经在那里发布了配置 NAT 的步骤:
https://serverfault.com/questions/911578/windows-10-pro-as-a-nat-between-two-interfaces
关于 Windows 10 上的 NAT 限制的注意事项:我读过一些报告,称 Win10 上的 NAT 接口限制为 1 个,但这似乎与我的个人经验不符。我安装了适用于 Windows 的 Docker,安装时它会创建自己的“DockerNat”接口。我的自定义 NAT 接口能够与 DockerNat 设备并存。
**它被称为“Pulse Secure - Juniper 网络虚拟适配器”