linux 系统中路由不起作用

linux 系统中路由不起作用

我正在努力让网络在 Linux VM 上正常工作。设置后,我有以下内容ifconfig

# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.19.190.144  netmask 255.255.0.0  broadcast 172.19.255.255
        inet6 fe80::215:5dff:febe:6707  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:be:67:07  txqueuelen 1000  (Ethernet)
        RX packets 30629  bytes 3428768 (3.2 MiB)
        RX errors 0  dropped 409  overruns 0  frame 0
        TX packets 351  bytes 53232 (51.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 78  bytes 6600 (6.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 78  bytes 6600 (6.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这个路由表:

# ip route
default via 172.19.190.1 dev eth0 proto static metric 100
172.19.0.0/16 dev eth0 proto kernel scope link src 172.19.190.144 metric 100

通过此设置,我可以 ping 通网关和外部互联网主机,但无法 ping 通 172.19.180.x 子网上的主机,并出现“主机不可达”的情况。

当我手动执行

# ip route add 172.19.0.0/16 via 172.19.190.1 dev eth0

然后一切都按预期进行。我现在将这一行添加到/etc/sysconfig/network-scripts/route-eth0

172.19.0.0/16 via 172.19.190.1

重启后,我的路由表如下所示:

# ip route
default via 172.19.190.1 dev eth0 proto static metric 100
172.19.0.0/16 dev eth0 proto kernel scope link src 172.19.190.144 metric 100
172.19.0.0/16 via 172.19.190.1 dev eth0 proto static metric 100

我再次无法访问 172.19.180.x 子网。此方法与手动添加方法的区别ip route add在于,最后一行proto static metric 100末尾有,而手动添加方法则没有。

我需要做什么才能使重启后一切正常运行?

更新:这是我的ifcfg-eth0文件:

BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=.... (masked)
DEVICE=eth0
ONBOOT=yes
IPADDR=172.19.190.144
PREFIX=16
GATEWAY=172.19.190.1
DNS1=172.19.190.240
DNS2=172.19.190.242

更新2:

如果我删除第二条路由(... src 172.19.190.144...)并只保留一条默认路由,那么一切都会正常工作。那么问题就变成了:第二条路由来自哪里,我该如何删除它?

答案1

问题是您有两条到 的路由172.19/16。由于它们的网络掩码长度相同(16 位),因此第二条路由将覆盖第三条路由。

第三条路线:

172.19.0.0/16 via 172.19.190.1 dev eth0 proto static metric 100   

由 添加/etc/sysconfig/network-scripts/route-eth0。第二个:

172.19.0.0/16 dev eth0 proto kernel scope link src 172.19.190.144 metric 100

有一个proto kernel因此它是由配置接口 IP 地址的脚本添加的

下面我猜你使用的是 Fedora。你用来配置 IP 地址的网络掩码/网络前缀太宽。你需要在文件中添加/etc/sysconfig/network-scripts/ifcfg-eth0一行,如下所示:

PREFIX=24

更新 2 的答案:当您向接口添加 IP 地址(例如 1.2.3.4)时,也会添加一些路由。具体路由取决于工具:

  • ip addr将强制您指定网络前缀(网络掩码的大小)1.2.3.4,否则会收到强烈投诉。如果您执行:ip addr add dev eth0 1.2.3.4/24,您将获得一条1.2.3.4/24 dev eth0奖励路由(+ 2 条您看不到的路由,因为它们在local路由表中,参见ip route show table local)。

  • ifconfig如果您未指定网络掩码并添加路由,则会假定您的网络前缀为 24 1.2.3.4/24 dev eth0

因此,对你的问题的直接回答是:这条PREFIX=16线/etc/sysconfig/network-scripts/ifcfg-eth0导致第二条路线出现。

相关内容