我对我的设置有一个非常具体的要求。
我购买了第三方 VPN(例如 ExpressVPN)供个人使用。我使用 Mac 的内置客户端连接到它。相应的网络接口称为ppp0
。
我的工作场所要求我使用具有拆分隧道的 Cisco Anyconnect VPN(称为“workVPN”)。相应的网络接口称为utun1
。
因此,我当前的设置如下:无论 PersonalVPN 中的复选框是否选中“通过此 VPN 发送所有数据”,当我通过 Cisco Anyconnect 连接到 WorkVPN 时,路由如下:
Data to Work -> utun1 -> ppp0 -> en0 -> PersonalVPN Server -> WorkVPN server -> Data sent to work server
Other data -> ppp0 -> en0 -> PersonalVPN Server -> Internet
。
ppp0
相反,我想要两个单独的连接:除了通过的流量之外,我想发送我的所有互联网流量utun1
。即
Data to Work -> utun1 -> en0 -> WorkVPN server -> Data sent to work server
Other data -> ppp0 -> en0 -> PersonalVPN Server -> Internet
。
我在网上查阅了所有内容后,了解到应该更新路由表。但这并不能解决问题。因为根据路由表,数据被路由到正确的网络接口。使用 进行traceroute
调试也无济于事,因为traceroute
显示了网关。网关条目是正确的,因为数据包实际上是去往该 VPN 特定网关的。问题是 WorkVPN 数据包是否通过个人 VPN 服务器。
以下是具体查询:
- 从工作服务器(开启工作 VPN)下载大文件的速度与开启/未开启个人 VPN 的速度差异很大。我的假设是 的底层接口
utun1
是ppp0
而不是en0
。有没有更好的方法来证实这一点?Traceroute 首先进入网关,这是正确的(因为路由表正确)。 - 有没有办法以某种方式告诉 Mac OS 通过 发送
utun1
数据en0
? - Mac 内置 VPN 客户端设置中的“通过此代理发送所有数据”有什么用?如果我不选择它,会发生什么?
如果有任何不清楚的地方,我可以提供更多信息。
谢谢。
编辑:我的问题与其他问题不同,例如这因为我没有通过不同的来源询问代理要求。这也不同于所有与手动分割流量相关的问题,因为它们在我的设置中被正确分割。
答案1
经过更多的答案和更多的测试后,我终于解决了所有这些疑问。
有一款适用
nettop
于 Mac OS 的工具。使用nettop -m route
,可以观察每条路由的实时流量。它可以帮助调试 Cisco Anyconnect 的底层路由。下载一个大文件并观察 nettop 的相关路由,以查看该下载使用了哪些路由和接口。事实证明,我必须添加通过
en0
接口连接的路由,而不必让 MacOS 的原生 VPN 客户端更新它。我使用以下命令添加路由(其他相关论坛也提到了这一点):sudo route change <IP-address> -iface en0
IP 地址是 Cisco Anyconnect 尝试连接的 VPN 服务器的 IP 地址。您可以在 Anyconnect 统计信息窗口的“服务器地址”字段中看到 IP 地址。此复选框“通过此代理发送所有数据”充当默认路由机制。以下任一方式均可:
- 不選擇复选框并手动添加一些路线经过通过此 VPN,或者
- 选择复选框并手动添加一些路线没有通过通过此VPN。
我希望这对那些想要建立类似设置的人有所帮助。
答案2
我读了几遍才明白你的问题/目标。总之,你想使用 ExpressVPN 进行一般的互联网流量,但不是连接到 AnyConnect 服务器时。是的,正确的解决方法是通过 en0 接口添加到 AnyConnect 服务器 IP 地址的路由。
仅供参考,在 Unix 系统上验证活动路由的一般命令是:
netstat -rn
不过,nettop 是一个很酷的命令。