如何更新路由表以避免 vpn

如何更新路由表以避免 vpn

这可能是一个太过琐碎的问题,但我读了很多页面,仍然找不到如何使用路由进行基本操作的信息。

背景信息:我们公司使用过时的 vpn 服务 (snx),对员工进行中间人攻击,仅使用自签名证书,可能还有更荒谬的东西,这最终意味着,当我登录公司 vpn 时,大多数 URL 都会不断抱怨证书,而且公司可能做了一些可疑的事情,这导致非常频繁的通信失败。

我需要做的:更新路由表,以便只有指定的 IP 通过 vpn 路由。

在我开始vpn之前,路由表看起来是这样的:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    600    0        0 wlp0s20f3
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 wlp0s20f3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp0s20f3

我启动vpn之后就变成了这样:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         192.0.0.0       U     0      0        0 tunsnx
default         _gateway        0.0.0.0         UG    600    0        0 wlp0s20f3
A.B.C.D          0.0.0.0         255.255.255.255 UH    0      0        0 tunsnx
64.0.0.0        0.0.0.0         240.0.0.0       U     0      0        0 tunsnx
...
shortened a lot
...
128.0.0.0       0.0.0.0         128.0.0.0       U     0      0        0 tunsnx
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 wlp0s20f3
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     600    0        0 wlp0s20f3

我尝试使用 YouTube(以及论坛上的帮助)进行调试。所以当我这样做时:

ip route get 172.217.23.238

响应是:

172.217.23.238 dev tunsnx src ABCX uid 1001 缓存

它没有出现在列表中的任何地方,但是 ABC 部分与带有主机名标志的规则匹配。

现在我失去了它。我不明白,是什么迫使 youtube 被路由到 vpn。据我所知,标志 UH 应该只路由该规则中提到的特定地址,因此由于 ABCX 不是 ABCD,我猜这条规则没有被使用。如果它没有被使用,并且路由表中没有其他任何东西,那么它一定是默认网关规则。幸运的是,我们有两个。一个带有零,一个带有工作“默认”。不知道应该优先使用哪个,但我会选择一个带有标志 G 的,它不是我们的 vpn tunsnx nic。

所以我想杀死一个默认网关,与 tunsnx nic 相关的网关:

sudo route del -net 0.0.0.0 netmask 0.0.0.0

并删除了 wlp0s20f3 上的默认网关,导致系统处于重启就绪状态,route仅打印一行后就挂起。

是的,我应该说,我必须关闭 systemd-resolved,因为我无法将其配置为与 snx 一起工作。

我可能遗漏了一些非常琐碎的信息,导致我无法理解发生了什么/为什么/以及如何避免大多数流量出现 tunsnx。有人能帮忙吗(也欢迎链接到深入的资源,以易读的方式真正解释这一点)。

更新:如果我删除与 tunsnx nic[1] 相关的所有路由,我最终会处于功能失调状态。虽然路由表看起来与 snx 启动之前完全一样,但在我关闭 snx 之前什么都无法访问。这是否与 2 条默认路由有关?

更新2:我尝试过:

  • 仅删除 tunsnx 默认网关并保持其他不变 —> 将阻止所有流量。
  • 删除 tunsnx 默认网关,并用更大的度量重新创建它,这样它就不会被使用 —> 将阻止所有流量
  • 删除所有 tunsnx 路由后,我还删除了正常的默认网关并重新创建了它,以查看它是否没有帮助,但事实并非如此。

更新 3:启动 vpn 后,我删除了所有 tunsnx 规则,并根据要求运行以下命令来查明 snx 是否仍然以某种方式干扰:

sudo tcpdump -n -I any
tcpdump: tunsnx: That device doesn't support monitor mode

对于 wifi 网卡也是一样:

sudo  tcpdump -n -I wlp0s20f3
tcpdump: tunsnx: That device doesn't support monitor mode

请注意,即使我们要求 wlp0s20f3,投诉仍然是关于我们没有询问的 tunsnx。

[1] route -n | grep tunsnx | sed "s/^\([0-9.]*\) *\([0-9.]*\) *\([0-9.]*\) .*/sudo route del -net \1 gw \2 netmask \3;/" | tr -d "\n" ;echo

答案1

您遇到的问题是 VPN 通过使用多个更具体的子网覆盖了您的默认路由。

解决方案是删除所有经过 tunsnx 的路由,并为 tunsnx 添加新的路由,这些路由仅覆盖您工作场所感兴趣的主机使用的 IP 范围。(这可能仅限于他们使用的 IP 地址子网以及 10.0.0/8 192.168.0.0/16 和 172.16.0.0/12 - 是 NAT 使用的空间,而不是在公共互联网上。

相关内容