1
Ljcbaby 2022-01-20 21:33:23 +08:00
访问的时候直接指定了网卡?毕竟这种检查的都有类似的逻辑
|
2
yankebupt 2022-01-20 21:52:48 +08:00
Ubuntu (wisely) make it easy to turn off Network Connectivity Checking in Ubuntu 17.10:
Open Settings. Select Privacy. Turn 'network connectivity checking' off. 来源 google |
3
tomychen 2022-01-20 22:12:09 +08:00
删除默认网关
route add -host VPN-IP/32 gw 路由 IP 然后 VPN 连接后,再走 VPN 网关出去。这样问题就解了 也就是只有一个路由是从本地走的,就是到 VPN 的,其他的并没路由表 |
4
tomychen 2022-01-20 22:18:17 +08:00
...哈,回错了,我以为问的是如何防止类似的包出去。
绕过的方式,可能就是类似于 ping -I 这种指定设备的 |
5
xuanbg 2022-01-21 02:50:20 +08:00
路由最基本的规则就是掩码越大优先级越高,0.0.0.0/1 dev vpn 这条路由是优先级最低的。
你把本机路由表打出来看看就知道了。 |
6
Kinnice 2022-01-21 09:40:47 +08:00
ip route get 35.224.170.84 看一下到底如何走的
|
7
cnt2ex OP @Ljcbaby
@tomychen 我发现如果通过-I 选项,指定接口 ping ,的确能从本地接口直接出去。但是如果-I 给的是地址,依然会按照路由表,走 vpn 接口。但文档好像没写这两个做法的区别。 -I interface interface is either an address, or an interface name. If interface is an address, it sets source address to specified interface address. If interface in an interface name, it sets source interface to specified interface. 除此之外,我发现系统的 ping 命令没有 setuid ,但是有 CAP_NET_RAW 。我把 ping 命令拷贝一份过后(此时没有 CAP_NET_RAW 了),依然可以通过-I 选项指定接口 ping 出去。原来 linux 的系统路由表是可以没有 root 权限就能绕过的吗? @xuanbg @Kinnice 应该不是路由规则的问题,ping 35.224.170.84 是从 vpn 接口出去的,ip route get 35.224.170.84 也是显示走 vpn 的接口。 |
8
yanqiyu 2022-01-21 17:43:10 +08:00
@cnt2ex 如果你的 VPN 和原来的网络都有默认路由的话也不算绕过了路由表...只是绕过了优先级,这事情 bind()就能干
你要不考虑把原先的网络的默认路由干掉,只留下必要的路由? |
9
tomychen 2022-02-01 14:37:09 +08:00
@cnt2ex 其实我比较好奇的是 wireshark 抓到的包是什么,TCP ? UDP ? DNS ?还是 ICMP ?如果是 ICMP ,可能还 OK ,如果是其他协议的包,就真的有点意思了。
但没看到完整路由表,也不好说。 其实你可以用我之前方式测试,我测试的时候,习惯把默认路由摘掉,手动指定一条只静态只到 VPN 的路由,VPN 连上后,再全局走 vpn ,这样的测试保证一点就是,即便 VPN ,异常掉线,直接就没网络了,而不会走原有的网关出去。这或者才是“全局"VPN ,应该有的样子吧。 |
10
cnt2ex OP @tomychen 抓到的是 HTTP 的包。
wireshark 在物理网卡上抓包,大部分流量是 VPN 的加密流量。少部分是 LLDP/mDNS 之类的流量。 然后就是正文楼里提到的 HTTP 流量。并且该 http 请求得到了响应(证明的确从物理网卡上出去并得到了响应),返回内容大概是这样 HTTP/1.1 204 No Content Server: Apache/2.4.18 (Ubuntu) X-NetworkManager-Status: online Connection: close 路由表我省略了一些本地路由和 VPN 服务器的路由,但是我 ping HTTP 请求的目标地址,ICMP 是没有直接走物理网卡的,物理网卡抓不到 ICMP 相关的包,而在 VPN 的网卡上可以抓到,说明该 ICMP 的确是走了 VPN ,所以我排除了路由表的问题。 我对这抱的最大的疑问就是,原来程序不需要 root 权限就可以简单绕过系统的路由表?不仅仅是 ICMP ,连 HTTP 也是。 |