我的 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 自由運作(沒有篩選器)來觀察網路連線出現時發生的情況。