我创建了一个 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
,但它经过eth0
,192.168.0.1
最终到达我的路由器。
ip route get 192.168.0.1
192.168.0.1 dev eth0 src 192.168.0.12 uid 1000
cache
我尝试给出度量0
,tun0
但它没有任何作用
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,并且具有最高优先级。
作为一般规则,路由表条目是通过“最长前缀匹配”来选择的;也就是说,主要优先级值是前缀长度。路由度量是仅有的用作次要的“决胜局”值,当多条路由具有相同的前缀长度时,在它们之间进行选择。