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

ネットワークは Network Manager によって管理されているので、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

NMを再起動します:

sudo service network-manager restart

これは期待通りに動作しますが、イーサネット ケーブルを抜くと、NetworkManager がイベントを検出するまでに約 10 秒のタイムアウトが発生します。これを 5 秒程度に短縮することはできますか?

関連情報