Meine Debian-Maschine ist derzeit Teil meines Heim-LAN, hinter der ISP-Box, die alle netzwerkbezogenen Aktivitäten (DHCP, Firewall, Telefonie, IPTV, ...) abwickelt. Ein klassischer Fall eines privaten Heimnetzwerks.
Ich plane, den Server bald auf einen Switch zwischen dem Glasfaserkonverter (Glasfasereingang, RJ45-Ausgang) und der ISP-Box zu verschieben – und ihn so zu konfigurieren, dass er meine öffentliche Internet-IP-Adresse per DHCP vom ISP erhält.
Mein ISP erzwingt leider von Zeit zu Zeit eine Änderung dieser Adresse (um einen „professionellen Service“ mit einer festen IP gegen Gebühr anzubieten). Ich habe ein Skript geschrieben, das meine im Internet angezeigte IP-Adresse überprüft und den DNS-Eintrag meines nach außen gerichteten Namens im Falle einer Nichtübereinstimmung ändert.
Ich kann dieses Skript regelmäßig über ausführen, cron
interessanter wäre es jedoch, es bei einer eth0
IP-Änderung auszulösen (was passieren wird, wenn der ISP eine neue Adresse „an seine Box“ sendet, die jetzt eigentlich mein Server ist).
Gibt es einen solchen Mechanismus (Aktionen, die bei einer Änderung der IP-Adresse ausgeführt werden sollen)?
Antwort1
Sie könnten ein Network Manager-Dispatcher-Skript verwenden, um ein Skript auszuführen, wenn die Schnittstelle hoch- oder heruntergefahren wird. Dies geschieht, wenn der ISP Ihre IP-Adresse ändert (es trennt Ihre Verbindung und stellt sie dann mit einer neuen wieder her).
Schauen Sie sich die Dateien in an /etc/NetworkManager/dispatcher.d/
. In meiner gibt es ein einfaches Skript 20-chrony
, das eine gute Vorlage erstellt:
#!/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
Sie können die beiden if
Anweisungen anpassen, damit sie mit Ihren Skripten funktionieren. Wenn Ihre Skripte nur ausgeführt werden müssen, wenn die Schnittstelle angezeigt wird, ändern Sie einfach die erste if
und entfernen Sie die zweite.
Antwort2
Wenn Sie ein System mit dem Tool dbus-monitor(1) verwenden, können Sie dieses Programm als Daemon starten, damit es auf Änderungen der Schnittstellenadressen achten kann. Ich bin nicht sicher, welche Meldung es ist, aber sie könnte so etwas sein wie:
dbus-monitor 'some-filtering-expression' |
while read -r line; do
xargs /path/to/your/script "${line"}
done
Sie können dbus-monitor auch frei laufen lassen (ohne Filter), um zu beobachten, was passiert, wenn Ihre Netzwerkverbindung hergestellt wird.