Как запустить скрипт при смене IP

Как запустить скрипт при смене IP

Моя машина Debian в настоящее время является частью моей домашней локальной сети, за коробкой интернет-провайдера, которая обрабатывает все сетевые действия (DHCP, брандмауэр, телефония, IPTV, ...). Классический случай домашней сети.

Я планирую вскоре переместить сервер на коммутатор между оптоволоконным преобразователем (вход оптоволокно, выход RJ45) и устройством интернет-провайдера и настроить его на получение моего публичного IP-адреса в Интернете через DHCP от интернет-провайдера.

К сожалению, мой интернет-провайдер время от времени заставляет менять этот адрес (чтобы предоставлять «профессиональные услуги» фиксированного IP за плату). Я написал скрипт, который проверяет мой IP-адрес, отображаемый в Интернете, и изменяет запись DNS моего внешнего имени в случае несоответствия.

Я могу запускать этот скрипт периодически через cron, но было бы интереснее запускать его при eth0изменении IP-адреса (что произойдет, когда интернет-провайдер добавит новый адрес «в свой ящик», который теперь фактически является моим сервером).

Есть ли такой механизм (действия при смене IP-адреса)?

решение1

Вы можете использовать скрипт диспетчера Network Manager для запуска скрипта при включении или выключении интерфейса, что он и сделает, когда интернет-провайдер изменит ваш 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 работать в свободном режиме (без фильтров), чтобы наблюдать за тем, что происходит при появлении сетевого соединения.

Связанный контент