Benutzer-Werkzeuge

Action disabled: source

Dynamische IP Adresse updaten

Gerade wenn man einen Server zu Hause betreibt ist man darauf angewiesen, dass die Domainnamen korrekt zur aktuellen dynamischen IP Adresse aufgelöst werden. Dabei bin ich über www.dnsomatic.com gestolpert. Der Dienst bietet die Möglichkeit mit einem Request gleich alle Hosts bei unterschiedlichen DynDNS-Anbieter zu aktualisieren.

Also habe ich für meine Hosts folgendes Script geschrieben, welches man als cronjob regelmässig ausführen kann

#!/usr/bin/php
<?php
/* error reporting ausschalten für den Fall, dass ein Problem mit der Internetverbindung besteht
 * und der Host nicht aufgelöst werden kann. Zusätzlich ein Timeout für den HTTP Request setzen
*/
error_reporting(E_NONE);
$ctx = stream_context_create(array(
    'http' => array(
        "timeout" => 1
        )
    )
); 
touch ( "/www/ip.log" );
 
//externe IP Adresse abfragen
$ip = trim ( file_get_contents ( "http://myip.dnsomatic.com",0,$ctx ) );
if ( $ip == false ){
 //Fehler
 $status = "ERROR: Could not connect to the requested host. Eighter a timeout occured, the hostname could not be resolved or the page on the host is down for any reason\r\n";
 //Fehler in Log schreiben
 $fp = fopen ("/www/ip.log","a" );
 $status = "===\r\n".date("r",time())."\r\n{$status}===\r\n";
 fwrite ( $fp,$status );
 fclose($fp);
 exit;
}
if ( !file_exists("/www/ip.txt" ) ){
 touch ( "/www/ip.txt" );
}
$ip_old = trim ( file_get_contents ( "/www/ip.txt" ) );
if ( $ip_old !== $ip ) {
 //IP geändert, also Request vorbereiten
 $str = urlencode ( "YOUR_USER_WITH_DNSOMATIC" ).":".urlencode ( "PASSWORD" );
 $status = file_get_contents ( "https://{$str}@updates.dnsomatic.com/nic/update?hostname=all.dnsomatic.com&myip={$ip}&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG")."\r\n";
 if ( strpos ( $status,"good" ) === 0 ){
  //Erfolgreiches Update. Logeintrag
  $fp = fopen ( "/www/ip.txt","a" );
  fwrite ( $fp,$ip );
  fclose ( $fp );
 } else {
  //Fehlereintrag im Log
  $status = "ERROR: Could not update the IP {$ip}. Please check with your provider";
 }
} else {
 //IP nicht geändert kein Update nötig
 $status = "NOCHG: No update needed\r\n";
}
//Status in Logfile schreiben
$fp = fopen ("/www/ip.log","a" );
$status = "===\r\n".date("r",time())."\r\n{$status}===\r\n";
fwrite ( $fp,$status );
fclose($fp);
?>
Melden Sie sich an, um einen Kommentar zu erstellen.

Seiten-Werkzeuge