如何在 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 自由运行(没有过滤器)来观察网络连接出现时发生的情况。

相关内容