Route
在刷新的路由表中重置預設 gw 時出現問題
我在 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 路由)