Debian
如何在 IP 更改時執行腳本
我的 Debian 機器目前是我家庭 LAN 的一部分,位於處理所有網路相關活動(DHCP、防火牆、電話、IPTV ……)的 ISP 盒子後面。住宅家庭網路的經典案例。
我計劃很快將伺服器移動到光纖轉換器(光纖輸入,RJ45 輸出)和 ISP 盒之間的交換機 - 並將其配置為通過 DHCP 從 ISP 接收我的 Internet 公共 IP 地址。
不幸的是,我的 ISP 不時強制更改此地址(以提供收費的固定 IP 的“專業服務”)。我編寫了一個腳本來檢查我在 Internet 上看到的 IP 地址,並在不匹配的情況下修改我的面向外部名稱的 DNS 條目。
我可以通過定期執行此腳本,
cron
但是當 IP 更改時觸發它會更有趣eth0
(這將在 ISP 將新地址“推送到它的盒子”時發生,這實際上是我的伺服器)。是否有這樣的機制可用(更改 IP 地址時要執行的操作)?
您可以使用網路管理器調度程序腳本在介面啟動或關閉時執行腳本,這將在 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
並刪除第二個。