![为什么在 Linux 上设置 VPN 连接后会添加特定的路由规则?](https://linux22.com/image/565907/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%20Linux%20%E4%B8%8A%E8%AE%BE%E7%BD%AE%20VPN%20%E8%BF%9E%E6%8E%A5%E5%90%8E%E4%BC%9A%E6%B7%BB%E5%8A%A0%E7%89%B9%E5%AE%9A%E7%9A%84%E8%B7%AF%E7%94%B1%E8%A7%84%E5%88%99%EF%BC%9F.png)
VPN 连接建立后,默认添加以下路由规则:
vpn_server_ip previous_default_gateway
这条规则对我来说似乎没用。为什么要添加它?
笔记:
- VPN 连接不是用于连接 Internet 的连接。
vpn_server_ip
不属于虚拟网络。
例子:
在示例中,我将使用“$ route -n”符号。在设置 VPN 连接之前,我
0.0.0.0 192.168.0.1
之后的路由表如下所示:
193.196.65.76 192.168.0.1
0.0.0.0 192.168.0.1
147.38.45.1 0.0.0.0 iface ppp0
所以我明白为什么
147.38.45.1 0.0.0.0 iface ppp0
添加了。147.38.45.1 是 VPN 中服务器的 IP。但我不明白为什么
193.196.65.76 192.168.0.1
添加了,193.196.65.76 是拨入服务器的 IP。也许这只是针对拨入服务器 IP 在 VPN 网络中的情况的一种预防措施?!
答案1
在解释这一点时,接口名称很重要。我将创建一个示例并在此处进行解释。
这是连接到 VPN 之前的路由表。我们的主接口位于 10.0.2.0/24 网络中,IP 地址为 10.0.2.15,默认路由 -> 10.0.2.2。一切都发生在 eth1 上。
k@workstation:~$ ip r
10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.15 metric 1
default via 10.0.2.2 dev eth1 proto static
这是连接到 VPN 后的路由表。添加的第一个条目正如您的问题;通过我们以前的主网关(通过 eth1)的 VPN 端点。它还为我刚刚获得的新 IP 地址添加了本地网络。然后它将默认网关更改为通过 VPN。
k@workstation:~$ ip r
123.123.123.123 via 10.0.2.2 dev eth1 proto static
10.8.0.21 dev tun0 proto kernel scope link src 10.8.0.22
10.8.0.1 via 10.8.0.21 dev tun0 proto static
10.0.2.0/24 dev eth1 proto kernel scope link src 10.0.2.15 metric 1
default via 10.8.0.21 dev tun0 proto static
该路由确保到 VPN 端点的流量流经物理网络接口,并且不会尝试通过 VPN 进行路由 - 因为这是不可能的,因为该流量是通过物理网络进行隧道传输的。
即使主网关没有改变,VPN 软件也会经常这样做,以防 VPN 端点与你的新 IP 地址位于同一子网。这也是为什么你不能与同一 IP 地址上的 VPN 端点通信并在建立连接后期望“本地连接”的原因。
(本示例使用 OpenVPN 制作)