Linux 不尊重路由表

Linux 不尊重路由表

我创建了一个 VPN 连接。

这是我连接后的路由表:

lz@jetson:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.255.5   0.0.0.0         UG    50     0        0 tun0
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eth0
191.37.145.144  192.168.0.1     255.255.255.255 UGH   100    0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.0.1     0.0.0.0         255.255.255.255 UH    100    0        0 eth0
192.168.255.1   192.168.255.5   255.255.255.255 UGH   50     0        0 tun0
192.168.255.5   0.0.0.0         255.255.255.255 UH    50     0        0 tun0

正如你所看到的,192.168.0.x应该经过tun0,但它经过eth0192.168.0.1最终到达我的路由器。

ip route get 192.168.0.1
192.168.0.1 dev eth0 src 192.168.0.12 uid 1000 
    cache 

我尝试给出度量0tun0但它没有任何作用

sudo ip route add 192.168.0.0/24 via 192.168.255.5

成功了,但太多了。为什么 Linux 不尊重路由表?

答案1

您忽略了以下条目:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
192.168.0.1     0.0.0.0         255.255.255.255 UH    100    0        0 eth0

它们两个也都与您的目的地相匹配,并且都具有比您的“tun0”路由更长的前缀长度(即,它们在掩码中具有更多的“1”位) - 第一个是/24,因此优先级始终高于0.0.0.0/0“tun”路由,而第二个是/32,并且具有最高优先级。

作为一般规则,路由表条目是通过“最长前缀匹配”来选择的;也就是说,主要优先级值是前缀长度。路由度量是仅有的用作次要的“决胜局”值,当多条路由具有相同的前缀长度时,在它们之间进行选择。

相关内容