我与 Digital Ocean Debian 服务器建立了有效的 OpenVPN 连接。
这是我的路由表ip route
:
0.0.0.0/1 via 10.8.0.5 dev tun0
default via 192.168.1.1 dev eth0 onlink
10.8.0.1 via 10.8.0.5 dev tun0
10.8.0.5 dev tun0 proto kernel scope link src 10.8.0.6
128.0.0.0/1 via 10.8.0.5 dev tun0
159.203.40.61 via 192.168.1.1 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.132
一切皆好。
如果我跟踪我的 Debian 机器 (159.203.40.61),由于规则,第一跳立即是默认网关159.203.40.61 via 192.168.1.1 dev eth0
。毫无疑问。
如果我跟踪外部 IP(例如 8.8.8.8),则第一跳是 10.8.0.1。这是因为规则0.0.0.0/1 via 10.8.0.5 dev tun0
和单播规则10.8.0.1 via 10.8.0.5 dev tun0
。因此,流量使用 tun0 接口(第一跳 10.8.0.1)在本地加密。我认为由于单播规则,它将到达 10.8.0.1(而不是 .5)(如果我错了,请纠正我)。
但是,第二跳(跟踪路由外部 IP 时)是 159.203.24.253。这是 Digital Ocean 的 IP,但不是我的 Digital Ocean Debian 机器的 IP。这是为什么?
2 159.203.24.253 (159.203.24.253) 117.230 ms 116.918 ms 159.203.24.254 (159.203.24.254) 117.266 ms
(还有一个 .254,我猜是为了负载平衡)
我认为,由于它需要到外面,所以它会从接口 tun0 切换到接口 eth0,其中默认网关是 (192.168.1.1)。然后,由于有单播规则159.203.40.61 via 192.168.1.1 dev eth0
,我预计第二跳是 159.203.40.61,但事实并非如此(而是 159.203.24.253)。
更新:在 Digital Ocean Debian 机器上,有以下路由规则:
159.203.24.0/20 dev eth0 proto kernel scope link src 159.203.40.61
因此,159.203.24.253 和 .254 与我的数字海洋机器位于同一网络上。
那里的默认网关是 159.203.24.1
也许 159.203.24.1 路由器上有一条规则,将数据包发送到 159.203.24.253 和 .254
更新 2,也许是答案:
在我的本地机器上请求 8.8.8.8。在 tun0 上进行数据加密。第一跳是 10.8.0.1(不是 .5,因为单播规则)要到达那里,需要切换到 eth0:使用默认网关 192.168.1.1 到达 159.203.40.61(单播规则)。
数字海洋机器收到数据包。它首先转到 10.8.0.1,在 tun0 上解密数据。然后,由于最终目的地是 8.8.8.8,它切换到 eth0 :默认网关是 159.203.24.1,这是一个路由器,它将数据包发送到第二跳,即 159.203.24.253/254
似乎两跳之间所涉及的网关没有显示在跟踪路由中。