Linux

路由在linux系統中不起作用

  • November 11, 2019

我正在努力讓網路在 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 網關和外部 Internet 主機,但無法 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...) 並且只保留一個預設值,那麼一切正常。那麼問題就變成了:第二條路線從何而來,我該如何擺脫它?

問題是您有兩條通往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如果您不指定網路遮罩並添加1.2.3.4/24 dev eth0路由,將假定您的網路具有前綴 24。

因此,對您的問題的直接回答是:PREFIX=16行 in/etc/sysconfig/network-scripts/ifcfg-eth0導致出現第二條路線。

引用自:https://serverfault.com/questions/991352