Route

在刷新的路由表中重置預設 gw 時出現問題

  • November 14, 2019

我在 192.168.0.11 有一個介面 enp7s0。

我的路由器是 192.168.0.1。

我的路由表是

Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    100    0        0 enp7s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp7s0
192.168.0.0     0.0.0.0         255.255.255.0   U     100    0        0 enp7s0

一切正常。我沒有設置 iptalbes。

現在我嘗試重置我的路由表並再次設置預設gw。

ip route flush table main
route add default gw 192.168.0.1

沖洗沒問題。但添加失敗。

SIOCADDRT: network is unreachable

這裡有什麼問題??

在 Linux 上,預設情況下(當沒有使用標誌noprefixroute添加地址時),將地址添加到介面會隱式添加到 LAN 的路由,範圍為 link。您有一條到網關的路由,因為它可以使用 dev enp7s0 到達

# ip route
default via 192.168.0.1 dev enp7s0 
192.168.0.0/24 dev enp7s0 proto kernel scope link src 192.168.0.11 
# ip route get 192.168.0.1
192.168.0.1 dev enp7s0 src 192.168.0.11 uid 0 
   cache 

當您刷新路由時,您還刷新了隱式範圍連結路由:

# ip route flush table main
# ip route
# ip route get 192.168.0.1
RTNETLINK answers: Network is unreachable

ip route add 192.168.0.0/24 dev enp7s0所以你有兩種方法來取回它:要麼手動添加它*(*

# ip route
# ip link set enp7s0 down; ip link set enp7s0 up
# ip route
192.168.0.0/24 dev enp7s0 proto kernel scope link src 192.168.0.11 
# ip route add default via 192.168.0.1
#

唯一的區別是存在proto kernel作為指示路由是由核心而不是手動添加的。所以最好不要使用flush命令(使用delete),或添加其他過濾器(例如:ip route flush scope global將保留本地 LAN 路由)

引用自:https://unix.stackexchange.com/questions/552044