如何在 IP 更改時運行腳本

如何在 IP 更改時運行腳本

我的 Debian 機器目前是我家中 LAN 的一部分,位於 ISP 盒子後面,負責處理所有網路相關活動(DHCP、防火牆、電話、IPTV...)。住宅家庭網路的經典案例。

我計劃很快將伺服器移至光纖轉換器(光纖輸入、RJ45 輸出)和 ISP 盒之間的交換機,並將其配置為透過 DHCP 從 ISP 接收我的互聯網公共 IP 位址。

不幸的是,我的 ISP 時不時地強制更改此位址(以便提供固定 IP 的“專業服務”,但需付費)。我編寫了一個腳本,用於檢查 Internet 上顯示的 IP 位址,並在不匹配的情況下修改我的外部名稱的 DNS 條目。

我可以透過定期執行此腳本,cron但當 IP 變更時觸發它會更有趣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

您可以調整這兩個if語句以與您的腳本配合使用,或者如果您的腳本僅需要在介面出現時運行,則只需修改第一個語句if並刪除第二個語句即可。

答案2

如果您使用的系統具有 dbus-monitor(1) 工具,則可以將此程式作為守護程式啟動,以便它可以監視介面位址變更。不確定它是哪一則訊息,但類似於:

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

您也可以讓 dbus-monitor 自由運作(沒有篩選器)來觀察網路連線出現時發生的情況。

相關內容