如何使用 NM 自动检测网络接口的状态

如何使用 NM 自动检测网络接口的状态

我有 eth0 设备和 tun0 设备(VPN),我想自动检测这些设备中的任何一个是否改变状态,即它们是启动还是关闭。

在每种情况下,我都希望自动调用预定义的脚本。因此:

  • 如果 eth0 出现故障,我想调用脚本 1
  • 如果 tun0 发生故障,则执行脚本 2
  • 如果 tun0 启动,则执行脚本 3

如何使用 NetworkManager 来实现这一点?

对于 tun0,我可以使用/etc/network/interfaces

auto tun0
iface tun0 inet manual
    up /bin/sh /home/matej/tun-up.sh
    down /bin/sh /home/matej/tun-down.sh

由于网络是由网络管理器管理的,那么 eth0 怎么样?

答案1

非常感谢!我做的是:

sudo nano /etc/NetworkManager/dispatcher.d/02-events

内容如下:

#!/bin/sh -e

if [ "$1" = "eth0" ] && [ "$2" = "down" ] ; then
echo "eth0 is down!" >> /home/matej/dispatch.txt
fi

if [ "$1" = "tun0" ] && [ "$2" = "down" ] ; then
echo "VPN is down!" >> /home/matej/dispatch.txt
fi

if [ "$1" = "tun0" ] && [ "$2" = "up" ] ; then
echo "VPN is up!" >> /home/matej/dispatch.txt
fi

使其可执行:

sudo chmod +x /etc/NetworkManager/dispatcher.d/02-events

重启网管:

sudo service network-manager restart

这按预期工作,但是当我拔掉以太网电缆时,大约有 10 秒的超时时间,然后 NetworkManager 才会检测到事件。可以将其缩短到 5 秒吗?

相关内容