我的路线表中有两个默认条目

我的路线表中有两个默认条目

连接到我的 OpenVPN 服务器后,我看到我的路由表如下:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         10.199.1.5      128.0.0.0       UG        0 0          0 tun0
default         192.168.1.1     0.0.0.0         UG        0 0          0 enp0s3
10.199.1.1      10.199.1.5      255.255.255.255 UGH       0 0          0 tun0
10.199.1.5      *               255.255.255.255 UH        0 0          0 tun0
104.156.228.133 192.168.1.1     255.255.255.255 UGH       0 0          0 enp0s3
128.0.0.0       10.199.1.5      128.0.0.0       UG        0 0          0 tun0
192.168.1.0     *               255.255.255.0   U         0 0          0 enp0s3

我对这两个默认条目以及如何解释它感到困惑。

对于普通 IP,Genmask 会与目标进行按位与运算来确定哪个条目匹配。但是 Genmask 如何处理“默认”?

在上面的例子中,哪些数据包会被发送到 10.199.1.5,哪些数据包会被发送到 192.168.1.1?

我正在尝试对要发送到端口 22 (SSH) 的数据包进行 fwmark,然后强制将这些数据包的默认路由到我的默认路由器而不是我的 VPN。但在弄乱路由表之前,我还想完全了解路由表。

答案1

default 只是 0.0.0.0 的别名。您可以看到,如果您输入

$ 路线-n

如果我在您的表中编辑它并稍微调整条目的位置,它看起来就像这样:

内核 IP 路由表
目标网关 Genmask 标志 MSS 窗口 irtt Iface
0.0.0.0 10.199.1.5 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 10.199.1.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 enp0s3
10.199.1.1 10.199.1.5 255.255.255.255 UGH 0 0 0 tun0
10.199.1.5 * 255.255.255.255 UH 0 0 0 tun0
104.156.228.133 192.168.1.1 255.255.255.255 UGH 0 0 0 enp0s3
192.168.1.0 * 255.255.255.0 U 0 0 0 enp0s3

啊哈!所以现在您有 0.0.0.0 和 128.0.0.0 的网络掩码,以及 128.0.0.0 和 128.0.0.0 的网络掩码。这两个一起映射整个互联网。但由于网络掩码 128.0.0.0 比 0.0.0.0 更具体,因此它们优先于“标准”默认路由。

因此,除 104.156.228.133(VPN 端点)和 192.168.1.0/24(您的本地网络)外,所有流量都转发到 tun0(完整隧道)。

这是 OpenVPN 用来覆盖默认网关而不实际改变它的一个巧妙技巧。

答案2

只有使用该tun0接口的数据包才会使用 的默认网关192.168.1.1。可以通过更改不同路由的“权重”来修改此行为。请参阅https://unix.stackexchange.com/questions/23820/what-is-the-routing-behaviour-when-two-or-more-default-routes了解更多信息。

相关内容