IP変更時にスクリプトを実行する方法

IP変更時にスクリプトを実行する方法

私のDebianコンピュータは現在私の家のLANの一部であり、ISPボックスの後ろに座って、すべてのネットワーク関連アクティビティ(DHCP、ファイアウォール、テレフォニー、IPTV...)を処理します。住宅用ホームネットワーキングの典型的な例です。

まもなく、光ファイバ変換器(光ファイバ入力、RJ45出力)とISPボックスの間のスイッチにサーバーを移動し、DHCPを介してISPからインターネットパブリックIPアドレスを受信するように設定します。

残念ながら、私のISPは(有料で固定IPを使用して「プロフェッショナルサービス」を提供するために)このアドレスを随時変更することを強制しています。インターネットに表示されているIPアドレスを確認し、一致しない場合は外部名のDNSエントリを変更するスクリプトを作成しました。

このスクリプトを定期的に実行することでこれを行うことができますが、cronIPが変更されたときにそれをトリガーする方が面白いでしょうeth0(ISPが「ボックスに新しいアドレスをプッシュしたときに発生する」)。これは実際には現在私のサーバーです。

これを行うために使用できるメカニズム(IPアドレスを変更するときの作業)はありますか?

答え1

インターフェイスが機能または停止したときにネットワーク管理者スケジューラスクリプトを使用してスクリプトを実行できます。ISPがIPアドレスを変更した場合(接続を切断してから新しいアドレスに復元する場合)、これが行われます。

のマニュアルを見てください/etc/NetworkManager/dispatcher.d/。私のものには20-chrony良いテンプレートとして機能する簡単なスクリプトがあります。

#!/bin/sh
# This is a NetworkManager dispatcher script for chronyd to set its NTP sources
# online/offline when a default route is configured/removed on the system.

export LC_ALL=C

if [ "$2" = "up" ]; then
        /sbin/ip route list dev "$1" | grep -q '^default' &&
                /usr/bin/chronyc -a online > /dev/null 2>&1
fi

if [ "$2" = "down" ]; then
        /sbin/ip route list | grep -q '^default' ||
                /usr/bin/chronyc -a offline > /dev/null 2>&1
fi

exit 0

スクリプトと連携するようにこれら2つのステートメントを調整できますif。または、インターフェイスが表示されたときにのみスクリプトを実行する必要がある場合は、最初のステートメントを変更してif2番目のステートメントを削除するだけです。

答え2

dbus-monitor(1) ツールを備えたシステムを使用している場合は、このプログラムをデーモンとして起動してインターフェイスアドレスの変更を監視できます。どのメッセージかはわかりませんが、次のようになります。

dbus-monitor 'some-filtering-expression' |
while read -r line; do
    xargs /path/to/your/script "${line"}
done

また、dbus-monitorをフィルタなしで自由に実行して、ネットワーク接続が行われたときに何が起こるのかを観察することもできます。

関連情報