Navigation

    Netgate Discussion Forum
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search

    Howto: setup Dynamic DNS with Loopia.se and freedns.afraid.org

    DHCP and DNS
    5
    9
    14612
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      gnarfer last edited by

      I don't know if this is common knowlege but I've found a way to enable Dynamic DNS for loopia and freeDNS. This is how I did it. (Updated)

      Edit /usr/local/www/services_dyndns.php to match
      $types = explode(",", "DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,ODS.org,ZoneEdit,Loopia,freeDNS");
      $vals = explode(" ", "dyndns dyndns-static dyndns-custom dhs dyns easydns noip ods zoneedit loopia freedns");

      Edit /etc/inc/dyndns.class
        /* –--------First remove the requirement of variable $dnUpdateURL for freedns and add requrement for $dnsHost----------- /
        /
      freedns needs this /
        /
      if (!$dnsUpdateURL) $this->_error(7);/
        /
      fix 4 pfsense /
        if (!$dnsHost) $this->_error(5);
        …...............
      /
      ----------Second fix a correct _dnsUpdateURL from fixed hostname and dnsHost---------- /
        case 'freedns':
        $needIP = FALSE;
                  curl_setopt($ch, CURLOPT_URL, 'http://freedns.afraid.org/dynamic/update.php?'.$this->_dnsHost);
                  /
      curl_setopt($ch, CURLOPT_URL, $this->_dnsUpdateURL); /
                  $data = curl_exec($ch);
                  if (@curl_error($ch)) log_error("Curl errror occured: " . curl_error($ch));
                  curl_close($ch);
                  $this->_checkStatus($data);
                  break;
        …...............
      /
      ----------Third fix https for loopia---------- */
      curl_setopt($ch, CURLOPT_URL, 'https://dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname='.$this->_dnsHost.'&myip='.$this->_dnsIP);

      Restart webGUI

      Go to the webgui and setup DynamicDNS

      For loopia just use your credentials
      For freeDNS
      Set Hostname to match your update string (the part after ? for example if my update url is http://freedns.afraid.org/dynamic/update.php?UmhJRATwTVRTTUlBQVhrM3oyNDoyMDA0NjUz my hostname would be UmhJRATwTVRTTUlBQVhrM3oyNDoyMDA0NjUz
      Set Username and Password to anything (You only need to set it to make it pass pfsense mandatory fields)

      That is it!
      Happy surfing  8)
      It would be nice to be able to choose loopia in the webgui in the future. ;)

      1 Reply Last reply Reply Quote 0
      • G
        gnarfer last edited by

        Added my /etc/inc/dyndns.class and /usr/local/www/services_dyndns.php files. :)

        dyndns.class.txt
        services_dyndns.php.txt

        1 Reply Last reply Reply Quote 0
        • U
          UrbanSk last edited by

          Greate news!

          I have just started using loopias DNS service. Do you know how to check if this change works?

          /Urban

          1 Reply Last reply Reply Quote 0
          • G
            gnarfer last edited by

            Test it by setting the ip manualy at loopia.se and then restart the service in pfsense. After that do a nslookup on your host or check the ip on loopia or just ask anybody to try and access your servers.

            1 Reply Last reply Reply Quote 0
            • U
              UrbanSk last edited by

              Works wery nice. Only drawback is that i manually have to edit this whenever i install anew version.

              Can this be included in the release?

              /UrbanSk

              1 Reply Last reply Reply Quote 0
              • H
                hoba last edited by

                If anybody of you can provide a patch so we can easily integrate it and make it available in the next version ( http://devwiki.pfsense.org/SubmittingPatches ).

                1 Reply Last reply Reply Quote 0
                • U
                  UrbanSk last edited by

                  Changes are suubmitted to CVS.

                  http://cvstrac.pfsense.com/chngview?cn=22664
                  http://cvstrac.pfsense.com/chngview?cn=22665
                  http://cvstrac.pfsense.com/chngview?cn=22666
                  http://cvstrac.pfsense.com/chngview?cn=22667
                  http://cvstrac.pfsense.com/chngview?cn=22668
                  /Urban Sk

                  1 Reply Last reply Reply Quote 0
                  • A
                    alexdimarco last edited by

                    ran into an error …

                    freedns uses some illegal characters for links such as ==
                    this is not allowed in the edited script.
                    Quickest workaround is to regenerate the link on freedns until the name is free of illegal characters

                    1 Reply Last reply Reply Quote 0
                    • S
                      stroths last edited by

                      Wanted to thank you for posting these instructions.  I modified them and got DNS Made Easy working.  For anyone who is trying to do this, here's what I did.  Keep in mind, this is my first try, so I'm sure there is a better way.

                      First, edit /usr/local/www/services_dyndns.php

                      Add the entries in bold below.

                      $types = explode(",", "DynDNS (dynamic),DynDNS (static),DynDNS (custom),DHS,DyNS,easyDNS,No-IP,ODS.org,ZoneEdit,Loopia,freeDNS, DNS Made Easy");
                      $vals = explode(" ", "dyndns dyndns-static dyndns-custom dhs dyns easydns noip ods zoneedit loopia freedns dnsmadeeasy");

                      Next, edit /etc/inc/dyndns.class and add some entries (bolded)

                      if ($this->_dnsService == 'dyndns' ||
                      $this->_dnsService == 'dyndns-static' ||
                      $this->_dnsService == 'dyndns-custom' ||
                      $this->_dnsService == 'dhs' ||
                      $this->_dnsService == 'noip' ||
                      $this->_dnsService == 'easydns' ||
                      $this->_dnsService == 'hn' ||
                      $this->_dnsService == 'zoneedit' ||
                      $this->_dnsService == 'dyns' ||
                      $this->_dnsService == 'ods' ||
                      $this->_dnsService == 'freedns' ||
                      $this->_dnsService == 'loopia' ||
                      $this->_dnsService == 'dnsmadeeasy' ||
                      $this->_dnsService == 'staticcling')

                      Also make this change (same file).  I inserted it under the loopia entry.

                      case 'loopia':
                      $needsIP = TRUE;
                      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                      curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass);
                      curl_setopt($ch, CURLOPT_URL, 'https://dns.loopia.se/XDynDNSServer/XDynDNS.php?hostname='.$this->_dnsHost.'&myip='.$this->_dnsIP);
                      $data = curl_exec($ch);
                      if (@curl_error($ch)) log_error("Curl error occurred: " . curl_error($ch));
                      curl_close($ch);
                      $this->_checkStatus($data);
                      break;
                                       
                      **                                    case 'dnsmadeeasy':
                                                              $needsIP = TRUE;
                                                              $server = "https://www.dnsmadeeasy.com/servlet/updateip?";
                      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
                                                              curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass);
                      curl_setopt($ch, CURLOPT_URL, $server.'username='.$this->_dnsUser.'&password='.$this->_dnsPass.'&id='.$this->_dnsHost.'&ip='.$this->_dnsIP);
                                                              $data = curl_exec($ch);
                                                              if (@curl_error($ch)) log_error("Curl error occurred: " . curl_error($ch));
                                                              curl_close($ch);
                                                              $this->_checkStatus($data);
                                                              break;**

                      And this change (same file).  I put it under loopia again

                      case 'loopia':
                      if (preg_match("/nochg/i", $data)) {
                      $status = "phpDynDNS: (Success) No Change In IP Address";
                      $successful_update = true;
                      } else if (preg_match("/good/i", $data)) {
                      $status = "phpDynDNS: (Success) IP Address Changed Successfully!";
                      $successful_update = true;
                      } else if (preg_match('/badauth/i', $data)) {
                      $status = "phpDynDNS: (Error) User Authorization Failed";
                      } else {
                      $status = "phpDynDNS: (Unknown Response)";
                      log_error("phpDynDNS: PAYLOAD: {$data}");
                      $this->_debug($data);
                      }
                      break;
                      case 'dnsmadeeasy':
                                                              if (preg_match("/nochg/i", $data)) {
                                                                      $status = "phpDynDNS: (Success) No Change In IP Address";
                                                                      $successful_update = true;
                                                              } else if (preg_match("/good/i", $data)) {
                                                                      $status = "phpDynDNS: (Success) IP Address Changed Successfully!";
                                                                      $successful_update = true;
                                                              } else if (preg_match('/badauth/i', $data)) {
                                                                      $status = "phpDynDNS: (Error) User Authorization Failed";
                                                              } else {
                                                                      $status = "phpDynDNS: (Unknown Response)";
                                                                      log_error("phpDynDNS: PAYLOAD: {$data}");
                                                                      $this->_debug($data);
                                                              }
                                                              break;

                      Reload the web configurator and DNS Made Easy will now be listed.  In the hostname, put your Record ID in the HostName field for the particular record you want updated.  Mine is a 7 digit number, so I suspect that is the standard for them.

                      Put in your username and password in the corresponding fields and you should be good.

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post