路由在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 網關和外部 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
導致出現第二條路線。