我有一个带有两个网卡的无头 Debian 服务器:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 01:02:1d:54:7c:01 brd ff:ff:ff:ff:ff:ff
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 01:02:1d:54:7e:01 brd ff:ff:ff:ff:ff:ff
如果我断开连接到 的电缆eth1
,则端口将关闭,但从管理角度而言,它将保持开启状态:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 01:02:1d:54:7c:01 brd ff:ff:ff:ff:ff:ff
2: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
link/ether 01:02:1d:54:7e:01 brd ff:ff:ff:ff:ff:ff
这意味着与 关联的路由eth1
仍然存在于路由表中。eth1
一旦物理断开连接,是否有办法强制管理关闭?
答案1
一个快速但肮脏的解决方案是使用ip monitor
一个“ifupdowns”界面的脚本。
该脚本将是:
#!/bin/sh
ip monitor link | while IFS=':' read num name status; do
read extraline # iproute2 outputs physical address on a separate line.
newstate=$(echo "$status"|awk -F' ' '{print $NF}')
if [ "$newstate" = "UP" ]; then
ifup "$name"
elif [ "$newstate" = "DOWN" ]; then
ifdown "$name"
fi
done
该脚本在尝试更改网络接口状态之前不会检查它,但这应该不是问题。
要使用它,只需将其放入 中/opt/bin/linkmonitor.sh
,使其可执行并在末尾chmod +x /opt/bin/linkmonitor.sh
添加一个&符号:/etc/rc.local
/opt/bin/linkmonitor.sh &
如果您需要更强大的解决方案,您可能会对路由故障转移解决方案。