这可能是一个太过琐碎的问题,但我读了很多页面,仍然找不到如何使用路由进行基本操作的信息。
背景信息:我们公司使用过时的 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 使用的空间,而不是在公共互联网上。