如果接口物理关闭,Linux 为什么不从路由表中删除路由?

如果接口物理关闭,Linux 为什么不从路由表中删除路由?

如下所示,Linux(3.7-trunk-686-pae) 尽管接口物理已关闭,但路由表中仍保留到 10.10.12.64/28 的路由:

root@kali:~# ip addr show dev eth0
2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
    link/ether b4:99:ba:57:7c:5f brd ff:ff:ff:ff:ff:ff
    inet 10.10.12.77/28 scope global eth0
root@kali:~# ip route show dev eth0
10.10.12.64/28  proto kernel  scope link  src 10.10.12.77 
root@kali:~# ip route get 10.10.12.69
10.10.12.69 dev eth0  src 10.10.12.77 
    cache 
root@kali:~# 

如果我以管理方式禁用接口(“ip link set dev eth0 down”),路由将从路由表中删除。

当接口本身物理关闭时,将路由保留在路由表中的目的是什么?例如,如果在接口关闭时不存在更具体的路由 10.10.12.64/28,则流量可以发送到不太具体的路由(例如 0.0.0.0/0)到另一个已启动的接口。

答案1

无法保证另一个接口将正确路由流量。即使它确实路由到指定地址的设备,该设备也可能不是预期设备。可能会出现许多问题:

将路由更改为另一个接口可能会对流量施加 NAT 规则,这会在接口启动时中断连接。

对于问题中指定的专用 IP 地址范围,接口可能会连接到具有完全不同网络的另一个组织。本地 10.0.0.0/8 网络不适合路由此类流量。即使在同一组织中,该块也可能是复制生产网络的测试网络。

对于可以通过 Internet 路由的地址,可能出于安全原因不通过 Internet 路由流量。尽管不建议这样做,但可以使用本地路由来路由应保持安全的流量。虽然最好对流量进行加密,但在某些情况下这可能很难做到。

答案2

我最好的建议是使用 netplug -http://www.red-bean.com/~bos/

只需使用这个来运行

 ip link set eth0 down

当电缆被拔掉时。当它恢复时则相反。

这对于纯粹是路由器的机器来说很好。但如果机器有其他服务,那么这些服务就必须绑定到内部IP地址。

相关内容