Wie öffentliche IP-Adresse vom Heimnetzwerk herausfinden wenn der DynDNS-Hostname nicht funktioniert?

Genau diese Frage habe ich mir heute gestellt. Offensichtlich gibt es bei DynDNS technische Probleme oder Limitierungen bei den begehrten Free-Accounts, die es einem beispielsweise ermöglichen, auf einfache Art und Weise auf das Netzwerk zuhause zuzugreifen ohne täglich IPs zu notieren.

 

Ich verwende einen solchen DynDNS-Hostname, um mich täglich ab und an daheim einzuwählen um auf meine Nagios-Instanz zuzugreifen. Die letzten Wochen und Monate habe ich regelmäßig das Problem, dass mein DynDNS-Hostname nicht auf die aktuelle IP-Adresse gelinkt wird. Das ist natürlich unschön, da mein VPN-Login mit dem DynDNS-Hostname vorgenommen wird. In einem solchen Fall kann ich mich also nicht einloggen, da mich der Hostname ins Timeout-Nirvana führt.

 

Hierfür habe ich jetzt eine schicke Lösung – benötigt wird lediglich ein Webserver im Internet und ein aktiver Host im Heimnetzwerk, auf dem man 2 kleine PHP-Skripte und ein temporäres Lockfile anlegt. Heutzutage kein Problem, einen öffentlichen Webspace haben die meisten ohnehin. Das Prinzip ist folgendes:

  • Tritt der DynDNS Hostname-Fehler auf, wird Skript 1 (ip.php) aufgerufen, welches ein temporäres Lockfile anlegt (dem entsprechenden Zielordner müssen vorher Schreibrechte eingeräumt worden sein)
  • Der aktive Host im Heimnetzwerk prüft periodisch mittels Skript 2 (ip_request.php) ob ein Lockfile vorhanden ist
  • Ist ein Lockfile vorhanden wird mittels PHP mail() eine Mail mit der öffentlichen IP versendet und das Lockfile gesendet
  • Idealerweise schützt man das Verzeichnis auf dem Webserver mittels HTAccess

 

Am besten realisiert man das Ganze auf dem Host im Heimnetzwerk mit einem kleinen Cronjob:

 

*/2 * * * * root        wget http://BENUTZERNAME:PASSWORT@WEBSERVER.TLD/ip_request.php -O /dev/null

 

 

ip.php:

 

<?php
 if(is_file("tmp/ip_request") == false)
 {
 $datei = fopen("tmp/ip_request","w");
 fwrite($datei, "foo");
 fclose($datei);
 echo "Request sent.";
 }
 else { echo "Request to get IP was already sent."; }
 ?>

 

 

 

ip_request.php:

 

<?php
 if(is_file("tmp/ip_request"))
 {
 mail("DEINE-MAIL@SERVER.TLD", "My current IP",
 "My current IP is: ".$_SERVER['REMOTE_ADDR'],
 "From: DEIN NAME <DEINE-MAIL@SERVER.TLD>");
 unlink("tmp/ip_request");
 echo "Request answered, thanks.";
 }
 ?>

 

 

Funktioniert bei mir wunderbar – ideal, wenn man ohnehin irgendwo noch einen Host im Netzwerk am Laufen hat. 🙂

2 Kommentare Schreibe einen Kommentar

Schreibe einen Kommentar