DNS: Benachrichtigung bei IP-Änderung mittels PHP-Script und einem Cronjob

Netzwerkkabel im Switch

Bild von Nutzer „blickpixel“ auf pixabay.com unter CC0 Public Domain Lizenz; zugeschnitten und bearbeitet von vektorkneter.de

Bei meiner Arbeit kommt es immer mal wieder vor, dass ich darauf warten muss bis eine Domain von Hoster A zu Hoster B umgezogen ist. Zum Prüfen, ob der Umzug bereits durchgeführt ist, habe ich bislang das ping Kommando im Terminal genutzt oder mehrfach die Website im Browser aufgerufen. Wie auch immer – beide Methoden bedeuteten aktive Überwachung dieses Vorgangs.
Da ich aber ein großer Freund von Set-It-And-Forget-It-Lösungen bin, habe ich ein kleines PHP-Skript geschrieben, welches mir – durch einen Cronjob regelmäßig angeschubst – eine E-Mail sendet sobald sich die IP-Adresse der Domain bzw. des Hostnames geändert hat.

ipchangenotifier.php – Funktionsweise

In diesem Skript definiere ich den zu prüfenden Hostname, seine bisherige IP und eine E-Mail-Adresse für das Senden der Benachrichtigung. Anschließend lade ich das Skript auf meinen Server und lasse es von einem Chronjob stündlich ausführen. Das Skript ruft dann via gethostbyname() die aktuelle IPv4-Adresse des zuvor konfigurierten Hostnames ab und vergleicht diese mit der ebenfalls konfigurierten alten IP-Adresse. Sobald die aktuelle IP und die konfigurierte alte IP-Adresse nicht mehr identisch sind – sich also die Adresse des Hostnames geändert hat – sendet das Skript eine E-Mail an die zuvor definierte Adresse.

Damit anschließend nicht jede Stunde neue E-Mails eingehen (der Cronjob läuft ja weiter) schreibt das Skript nach dem Senden der ersten Benachrichtigungs-E-Mail eine Textdatei in das eigene Verzeichnis – von mir „Stopfile“ getauft. Vor jedem Skriptdurchlauf wird auf die Existenz dieser Datei geprüft und wenn diese vorhanden ist wird das Skript abgebrochen. Somit sendet ipchangenotifier.php genau eine Benachrichtigungsmail und überspringt anschließend den erneuten Skriptdurchlauf trotz weiterhin aktivem Chronjob.

ipchangenotifier.php – Konfiguration

$config['hostname']

Definiert den zu überwachenden Hostnamen.

$config['old_ip']

Definiert die alte (bisherige) IPv4-Adresse des Hosts.

$config['email']

E-Mail-Adresse an welche die Benachrichtigung gesendet werden soll.

$config['stopfilename']

Dateiname des Stopfile, welche den weiteren Skriptdurchlauf stoppt. Dieser Name sollte natürlich nicht mit einer bereits auf dem Server existierenden Datei kollidieren. Außerdem muss sichergestellt sein, dass PHP Schreibrechte auf das Verzeichnis (in welchem sich das Skript befindet) besitzt.

$config['verbose']

true oder false – definiert, ob das Skript seine Konfiguration ausgeben soll. In der Regel wird man true nur zum Testen verwenden wollen und sonst den Wert auf false belassen.

Alle Einstellungen sind auch im Skript selber mit Kommentaren versehen.

Einschränkungen

Da gethostbyname() nur IPv4-Adressen ermittelt, kann dieses Skript nicht zum Prüfen von Hosts genutzt werden, die ausschließlich über IPv6 erreichbar sind. In den häufigsten Fällen wird es aber, zumindest Stand heute, auch eine IPv4-Adresse zum Hostnamen geben. Außerdem kann es vorkommen, dass ipchangenotifier.php bereits die neue IP ermitteln kann – der vom Hoster genutzte DNS-Server also bereits aktualisiert wurde – aber die Namensauflösung des lokalen Rechners noch auf die alte IP zeigt. Denn verschiedene DNS-Server aktualisieren ihre Einträge unterschiedlich schnell. Dennoch ist die Benachrichtungs-E-Mail ein guter Indikator, dass der Umzug durchgeführt wurde.

Das Skript ist nach besten Wissen getestet und erfüllt in meinem Szenario die gewünschten Anforderungen. Dennoch erfolgt die Nutzung des auf eigene Gefahr!

Download: ipchangenotifier.php v1.0 (zipped, 3KB)

Schreibe einen Kommentar