在 Ubuntu 16.04 中,我使用以下命令,以便网络管理器在添加 VPN 连接时提供 L2TP 作为选项:
sudo add-apt-repository ppa:nm-l2tp/network-manager-l2tp; sudo apt update ; sudo apt-get install -y network-manager-l2tp network-manager-l2tp-gnome strongswan
上面是故意将多条命令合并成一行,这样在终端上一行就可以完成设置。
添加 L2TP VPN 并成功连接后,我能够通过 Meraki 防火墙访问远程网络上所需的一切。
但是,如果我在本地计算机上观看 4K YouTube 视频(或任何其他占用大量带宽的互联网活动),我会注意到我并没有直接从本地互联网连接获取该视频;相反,它实际上是通过 VPN 隧道下载的!这不是我想要的,因为远程网络几乎没有足够的上传带宽来覆盖那里正在使用的所有 VOIP 电话。因此,我需要 VPN 客户端仅将 VPN 连接用于实际位于该远程网络上的资源。
过去,当我使用 vpnc VPN 或 OpenVPN VPN 时,我可以选中此框以防止本地互联网活动消耗远程网络的带宽:
但是,如果我使用 L2TP VPN 选中此复选框,它确实只使用本地互联网资源,但我无法再访问远程 VPN 网络上的任何远程资源。例如,如果选中此复选框,在 VPN 连接期间,我甚至无法 ping 远程 LAN 的网关。
我如何才能做到:
- 访问远程 L2TP VPN 网络上的资源并
- 所有其他互联网活动是否仅消耗本地互联网资源?
Meraki 支持人员指导我进行此操作文档。但是,要求所有非技术用户都为可能连接到 VPN 的每个物理位置向他们的 Ubuntu 笔记本电脑添加路由是不切实际的。我需要一个解决方案,可以配置客户端自动执行拆分隧道,这样我就可以为每个用户设置它,他们唯一要做的就是连接。
答案1
连接到 VPN 会更改你的默认路由
如果您在连接 VPN 之前和之后查看路由表,您会注意到不仅有额外的路由,而且默认路由也已更改。除非有“更好”的特定路由,否则您的流量将通过默认路由发出。
要查看路由表,您可以运行ip route
。以前您可以运行route
,但大多数发行版不再有该命令。
ip route
对于每种 VPN 类型和每个 VPN 客户端,您都只能使用不同的选项和可能性,但是当您使用时openconnect
,您可以控制这一点并防止默认路由发生变化。
更清楚的是,假设您的 VPN 网络是192.2.2.0/24
。当您连接到 VPN 时,您需要一条新路由来将该流量路由到网关。它很可能看起来像192.2.2.0/24 via 192.2.2.1 on tun0
,但网关 IP 可能不同。通过这条路由,任何到 的流量192.2.2.0 255.255.255.0
都将转到tun0
而192.2.2.1
不是eth0
/wlan0
到您的路由器。您只是不想192.2.2.1
成为您的默认路由。