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

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

私の Debian マシンは現在、すべてのネットワーク関連アクティビティ (DHCP、ファイアウォール、テレフォニー、IPTV など) を処理する ISP ボックスの背後にある自宅 LAN の一部です。これは、住宅用ホーム ネットワークの典型的な例です。

近々、サーバーをファイバー コンバーター (ファイバー入力、RJ45 出力) と ISP ボックス間のスイッチに移動し、ISP から DHCP 経由でインターネット パブリック IP アドレスを受信するように構成する予定です。

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

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

そのようなメカニズム(IP アドレスの変更時に実行するアクション)は利用できますか?

答え1

Network Manager ディスパッチャ スクリプトを使用して、インターフェイスが起動または停止したときにスクリプトを実行できます。これは、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

if2 つのステートメントをスクリプトに合わせて調整できます。また、インターフェイスが起動したときにのみスクリプトを実行する必要がある場合は、最初のステートメントを変更しifて 2 番目のステートメントを削除します。

答え2

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

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

また、dbus-monitor を(フィルターなしで)自由に実行して、ネットワーク接続が確立したときに何が起こるかを監視することもできます。

関連情報