将一些流量路由到连接到 VPN 的虚拟机

将一些流量路由到连接到 VPN 的虚拟机

问题

我需要使用仅在 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)。此外,这将是一个系统范围的配置,无需手动将代理安装到每个应用程序中。

  1. 确保 Windows VM转发数据包
  2. 通过检查以下项确保 Windows VM 将其虚拟接口用于所有数据包:路由表
  3. 在 macOS 计算机上创建指向虚拟机作为下一跳的路由表
  4. 在你的 macOS 机器上创建一个路由策略,该策略将针对你描述的流量(例如,结合端口和目标地址),并使用(3)中的表来路由这些数据包

根据虚拟机的存在,步骤 3 可能需要动态地打开或关闭。

(..)因为我对网络几乎一无所知

粗略地说,上述步骤实现的目标如下:

  1. 将虚拟机变成路由器。
  2. 告诉 VM 路由器使用 VPN 作为所有数据包的传出接口
  3. 这只是一个静态路由,告诉 macOS 主机将数据包转发到虚拟机的哪个目的地。
  4. 通常,路由器仅使用目标地址/前缀来决定传出接口和下一跳。路由策略允许使用不同的信息来做出该决定。这在您的情况下是必需的,因为您只想针对特定的应用层协议,因此有必要超越网络层。

编辑 1:为了使步骤 1 正常工作,您可能还必须以“桥接模式”设置虚拟机的网络,以便可以在主机操作系统上对其进行寻址。

相关内容