ip route add - RTNETLINK 答案:文件存在

rno*_*ooo 9 routing ip

在 Linux 机器上有 2 个接口:

Bond0: inet addr:170.242.57.113  Bcast:170.242.57.255  Mask:255.255.255.0
Eth4    : inet addr:172.21.136.124  Bcast:172.21.137.255  Mask:255.255.254.0
Run Code Online (Sandbox Code Playgroud)

因为 eth4 在不同的网络上,我想设置一个新路由,因此

used route-eth4
ADDRESS0=172.21.136.0
NETMASK0=255.255.254.0
GATEWAY0=172.21.137.251
Run Code Online (Sandbox Code Playgroud)

但这失败了,查看 ifup 并确定 /etc/sysconfig/network-scripts/ifup-routes 是设置路由的脚本,发出以下命令

ip route  add 172.21.136.0/23 via 172.21.137.251 dev eth4
RTNETLINK answers: File exists
Run Code Online (Sandbox Code Playgroud)

看起来无法为 /23 添加路由

但如果我用 2 /24 来做就行

ip route  add 172.21.136.0/24 via 172.21.137.251 dev eth4
ip route  add 172.21.137.0/24 via 172.21.137.251 dev eth4
netstat –nr

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irttIface
172.21.137.0    172.21.137.251  255.255.255.0   UG        0 0          0 eth4
172.21.136.0    172.21.137.251  255.255.255.0   UG        0 0          0 eth4
170.242.57.0    0.0.0.0         255.255.255.0   U         0 0          0 bond0
172.21.136.0    0.0.0.0         255.255.254.0   U         0 0          0 eth4
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth4
0.0.0.0         170.242.57.251  0.0.0.0         UG        0 0          0 bond0
Run Code Online (Sandbox Code Playgroud)

它工作正常,我不明白为什么它不适用于 /23

Address:   172.21.136.124        10101100.00010101.1000100 0.01111100
Netmask:   255.255.254.0 = 23    11111111.11111111.1111111 0.00000000
Wildcard:  0.0.1.255             00000000.00000000.0000000 1.11111111
=>
Network:   172.21.136.0/23       10101100.00010101.1000100 0.00000000 (Class B)
Broadcast: 172.21.137.255        10101100.00010101.1000100 1.11111111
HostMin:   172.21.136.1          10101100.00010101.1000100 0.00000001
HostMax:   172.21.137.254        10101100.00010101.1000100 1.11111110
Hosts/Net: 510                   (Private Internet)
Run Code Online (Sandbox Code Playgroud)

任何的想法?

the*_*bit 8

它工作正常,我不明白为什么它不适用于 /23

因为它已经在那里了——这RTNETLINK answers: File exists就是告诉你的。

您的 netstat -rt 输出包含此路线:

172.21.136.0    0.0.0.0         255.255.254.0   U         0 0          0 eth4
Run Code Online (Sandbox Code Playgroud)

这与ip route add 172.21.136.0/23 via 172.21.137.251 dev eth4.

  • 当网络为本地时,0.0.0.0 用于网关。对于连接到它的网络,您不需要网关。 (4认同)
  • Fwiw 我不认为“文件存在”是可接受的错误消息。如果它是一条已经存在的路由,为什么不使用“路由存在”作为错误信息?如果没有,哪个文件已经存在? (2认同)