无法添加静态路由:SIOADDRT:网络无法访问

Ano*_*ter 21 networking route linux-networking

几天来,我一直在用头撞墙试图弄清楚这一点:我的 ifconfig 是:

eth0      Link encap:Ethernet  HWaddr 00:50:56:BB:XX:XX
          inet addr:192.168.36.132  Bcast:192.168.37.255  Mask:255.255.254.0

eth1      Link encap:Ethernet  HWaddr 00:50:56:BB:XX:XX
          inet addr:116.xx.xx.xx    Bcast:116.xx.xx.xx    Mask:255.255.255.192
Run Code Online (Sandbox Code Playgroud)

当我尝试添加静态路由以离开 eth0 时,出现以下错误:

servername-test:/ # route add -net 10.248.12.0 netmask 255.255.255.240 gw 192.168.36.254 dev eth0 
SIOCADDRT: Network is unreachable
Run Code Online (Sandbox Code Playgroud)

我的默认网关是:

servername-test:~ # netstat -anr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
116.xx.xx.xx    0.0.0.0         255.255.255.192 U         0 0          0 eth1
192.168.238.0   192.168.36.254  255.255.255.0   UG        0 0          0 eth0
192.168.239.0   192.168.36.254  255.255.255.0   UG        0 0          0 eth0
192.168.36.0    192.168.36.254  255.255.254.0   UG        0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         116.xx.xx.xx    0.0.0.0         UG        0 0          0 eth1
Run Code Online (Sandbox Code Playgroud)

ip route list 输出

116.66.240.64/26 dev eth1 proto kernel scope link src 116.xx.xx.xx 
192.168.238.0/24 via 192.168.36.254 dev eth0 
192.168.239.0/24 via 192.168.36.254 dev eth0 
192.168.36.0/23 via 192.168.36.254 dev eth0
169.254.0.0/16 dev eth0 scope link 
127.0.0.0/8 dev lo scope link 
default via 116.xx.xx.xx dev eth1
Run Code Online (Sandbox Code Playgroud)

Mat*_*Ife 19

您尚未声明192.168.36.0/23本地链接,尽管您已为其分配了地址,但您的路由中似乎没有列出本地链接路由。

192.168.36.0    192.168.36.254  255.255.254.0   UG        0 0          0 eth0
192.168.36.0/23 via 192.168.36.254 dev eth0
Run Code Online (Sandbox Code Playgroud)

相反,它的声明192.168.36.0/23应该传递给网关192.168.36.254,根据路由表的其余部分,从技术上讲,该网关似乎不是邻居(内核不知道如何到达192.168.36.254)。

不应该分配网关,192.168.36.0/23因为根据您的 IP 地址,192.168.36.132/23它可能是本地链路范围(邻居通过 ARP 直接响应)。

应该有一个这样的条目:

192.168.36.0    0.0.0.0  255.255.254.0   U        0 0          0 eth0
192.168.36.0/23 dev eth0 scope link
Run Code Online (Sandbox Code Playgroud)

要修复,您需要删除网关声明192.168.36.0/23并替换为以下条目:

ip route add 192.168.36.0/23 dev eth0
Run Code Online (Sandbox Code Playgroud)