如何通过 Wifi 直接路由 Cisco Anyconnect(工作 VPN),而不是非工作 VPN?

如何通过 Wifi 直接路由 Cisco Anyconnect(工作 VPN),而不是非工作 VPN?

我对我的设置有一个非常具体的要求。

我购买了第三方 VPN(例如 ExpressVPN)供个人使用。我使用 Mac 的内置客户端连接到它。相应的网络接口称为ppp0
我的工作场所要求我使用具有拆分隧道的 Cisco Anyconnect VPN(称为“workVPN”)。相应的网络接口称为utun1

因此,我当前的设置如下:无论 PersonalVPN 中的复选框是否选中“通过此 VPN 发送所有数据”,当我通过 Cisco Anyconnect 连接到 WorkVPN 时,路由如下:

  1. Data to Work -> utun1 -> ppp0 -> en0 -> PersonalVPN Server -> WorkVPN server -> Data sent to work server
  2. Other data -> ppp0 -> en0 -> PersonalVPN Server -> Internet

ppp0相反,我想要两个单独的连接:除了通过的流量之外,我想发送我的所有互联网流量utun1。即

  1. Data to Work -> utun1 -> en0 -> WorkVPN server -> Data sent to work server
  2. Other data -> ppp0 -> en0 -> PersonalVPN Server -> Internet

我在网上查阅了所有内容后,了解到应该更新路由表。但这并不能解决问题。因为根据路由表,数据被路由到正确的网络接口。使用 进行traceroute调试也无济于事,因为traceroute显示了网关。网关条目是正确的,因为数据包实际上是去往该 VPN 特定网关的。问题是 WorkVPN 数据包是否通过个人 VPN 服务器。

以下是具体查询:

  1. 从工作服务器(开启工作 VPN)下载大文件的速度与开启/未开启个人 VPN 的速度差异很大。我的假设是 的底层接口utun1ppp0而不是en0。有没有更好的方法来证实这一点?Traceroute 首先进入网关,这是正确的(因为路由表正确)。
  2. 有没有办法以某种方式告诉 Mac OS 通过 发送utun1数据en0
  3. Mac 内置 VPN 客户端设置中的“通过此代理发送所有数据”有什么用?如果我不选择它,会发生什么?

如果有任何不清楚的地方,我可以提供更多信息。

谢谢。

编辑:我的问题与其他问题不同,例如因为我没有通过不同的来源询问代理要求。这也不同于所有与手动分割流量相关的问题,因为它们在我的设置中被正确分割。

答案1

经过更多的答案和更多的测试后,我终于解决了所有这些疑问。

  1. 有一款适用nettop于 Mac OS 的工具。使用nettop -m route,可以观察每条路由的实时流量。它可以帮助调试 Cisco Anyconnect 的底层路由。下载一个大文件并观察 nettop 的相关路由,以查看该下载使用了哪些路由和接口。

  2. 事实证明,我必须添加通过en0接口连接的路由,而不必让 MacOS 的原生 VPN 客户端更新它。我使用以下命令添加路由(其他相关论坛也提到了这一点): sudo route change <IP-address> -iface en0 IP 地址是 Cisco Anyconnect 尝试连接的 VPN 服务器的 IP 地址。您可以在 Anyconnect 统计信息窗口的“服务器地址”字段中看到 IP 地址。

  3. 此复选框“通过此代理发送所有数据”充当默认路由机制。以下任一方式均可:

    • 不選擇复选框并手动添加一些路线经过通过此 VPN,或者
    • 选择复选框并手动添加一些路线没有通过通过此VPN。

我希望这对那些想要建立类似设置的人有所帮助。

答案2

我读了几遍才明白你的问题/目标。总之,你想使用 ExpressVPN 进行一般的互联网流量,但不是连接到 AnyConnect 服务器时。是的,正确的解决方法是通过 en0 接口添加到 AnyConnect 服务器 IP 地址的路由。

仅供参考,在 Unix 系统上验证活动路由的一般命令是:

netstat -rn

不过,nettop 是一个很酷的命令。

相关内容