问题
我需要使用仅在 Windows 上运行的客户端软件连接到企业 VPN。我使用的是 MacOS。我想设置一台使用 VPN 软件运行 Windows 10 的虚拟机。我希望将一些流量(对企业内部网络的请求)从主机路由到虚拟机(连接到 VPN)。所有其他流量应直接进入互联网,无需重新路由。
要路由的流量:浏览网站(HTTP(S))和使用 git(通过 SSH)。
主意
我的想法是在 MacOS 的系统偏好设置中设置一个自动代理配置(PAC 文件),以便将一些流量发送到 VM。VM 在端口 3128 上运行 Squid 代理。
function FindProxyForURL(url, host) {
PROXY = "PROXY 192.168.0.140:3128"
if (shExpMatch(host,"*.corporate.internal")) {
return PROXY;
}
return "DIRECT";
}
我的方法可能完全错误,因为我对网络几乎一无所知——或者可能只是需要一些配置。无论如何,它目前不起作用。
非常感谢任何有关如何解决该问题的意见。
答案1
通过您添加的流量分类,我将按如下方式处理此问题。与使用虚拟机内部的 Web 代理的解决方案相比,这是一个更低级(即基于路由)的解决方案。在此级别上执行此操作的优势在于,您可以定位除 HTTP 之外的其他应用层协议(例如,根据需要使用 SSH)。此外,这将是一个系统范围的配置,无需手动将代理安装到每个应用程序中。
- 确保 Windows VM转发数据包
- 通过检查以下项确保 Windows VM 将其虚拟接口用于所有数据包:路由表。
- 在 macOS 计算机上创建指向虚拟机作为下一跳的路由表
- 在你的 macOS 机器上创建一个路由策略,该策略将针对你描述的流量(例如,结合端口和目标地址),并使用(3)中的表来路由这些数据包
根据虚拟机的存在,步骤 3 可能需要动态地打开或关闭。
(..)因为我对网络几乎一无所知
粗略地说,上述步骤实现的目标如下:
- 将虚拟机变成路由器。
- 告诉 VM 路由器使用 VPN 作为所有数据包的传出接口
- 这只是一个静态路由,告诉 macOS 主机将数据包转发到虚拟机的哪个目的地。
- 通常,路由器仅使用目标地址/前缀来决定传出接口和下一跳。路由策略允许使用不同的信息来做出该决定。这在您的情况下是必需的,因为您只想针对特定的应用层协议,因此有必要超越网络层。
编辑 1:为了使步骤 1 正常工作,您可能还必须以“桥接模式”设置虚拟机的网络,以便可以在主机操作系统上对其进行寻址。