如果物理连接丢失,则关闭网络接口

如果物理连接丢失,则关闭网络接口

我有一个带有两个网卡的无头 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 &

如果您需要更强大的解决方案,您可能会对路由故障转移解决方案。

相关内容