Update for dynamic dns...

Discussion in 'Tips/Tricks/Mods' started by BorderAmigos, May 21, 2009.

  1. BorderAmigos

    BorderAmigos New Member

    Here's my thoughts for updating my ISPConfig3 MyDNS when my dynamic IP changes. I haven't had it change yet so I'm not 100% sure it's going to work.

    On a remote server that has server side includes there is ip.shtml that contains only this line

    <!--#echo var="REMOTE_ADDR" -->
    When accessed this will give the current actual IP to my local server. The remote server is outside my local router.

    Then there is a cron job running update_ip_address.php every 10 minutes. This file outputs to dynamic.html which is just an indication if something changed or not.

    // Configuration
    $db_server = 'localhost';
    $db_user = 'root';
    $db_password = 'password';
    $echo_page = 'http://remote.example.com/ip.shtml';   
    $echoed_ip = trim(file_get_contents($echo_page));
    $con = mysql_connect($db_server,$db_user,$db_password);
    if (!$con) die('Could not connect: ' . mysql_error());
    mysql_select_db('dbispconfig', $con);
    $table_data = mysql_query("SELECT * FROM dns_rr");
    $change_flag = false;
    while ($item_data = mysql_fetch_array($table_data))
     if ($item_data['type'] == 'A')
      $stored_ip = trim($item_data['data']);
      if (!($stored_ip == $echoed_ip)) $change_flag = true;
    echo date('l jS F Y h:i:s A');
    if ($change_flag)
     echo ' ... IP Changed from '.$stored_ip.' to '.$echoed_ip.'.';
     mysql_query("UPDATE dns_rr SET data='$echoed_ip' WHERE type='A'");
     echo ' ... No Change.';
    Basically, it gets the current IP echoed from the remote host, compares it to all the A records in the database that ISPConfig3 MyDNS is using, then UPDATEs them if they are different.

    I haven't had my IP address change yet but this seems like it should work. Thoughts? Comments?
  2. BorderAmigos

    BorderAmigos New Member

    I did some updates to this little script. Sometimes my remote server wasn't responding and so I would have an empty IP address. I added a check do do nothing if this is the case.

    Also added some lines to email me when the IP changed, one of which goes to my cell phone. This script runs on a cron job every 10 minutes with the output piped to a log file. The log file is rotated with logrotated. Seems to work well so far.

    Putting the update here just in case anyone can use it.


Share This Page