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

    BUG in 2.4.1 - DynDNS wildcard settings not working as it should

    Scheduled Pinned Locked Moved General pfSense Questions
    7 Posts 3 Posters 1.4k Views
    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.
    • M
      magnust
      last edited by

      The pfsense Dynamic DNS service does not work correctly with Loopia DynDNS. Looking into the problem it seems other DynDNS providers could be affected too since the single line of code that is misbehaving is used in many places.

      Looking at the dynDNS code in /etc/inc/dyndns.class, the original untouched code below does not work with Loopia even if the wildcard setting is checked on the pfsense dyndns settings page. The original code will update the IP okay but remove the CNAME totally in the DNS settings at Loopia. When CNAME is removed from the domain DNS settings the 'www.domain.com' address will stop working, only 'domain.com' will work until CNAME is restored in Loopias DNS settings.

      case 'loopia':
      	$needsIP = TRUE;
      	if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON";
      	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.'&wildcard='.$this->_dnsWildcard );
      	break;
      

      This tweaked test code below works perfectly with Loopia. IP updates correctly and CNAME in the DNS settings at Loopia is kept untouched:

      case 'loopia':
      	$needsIP = TRUE;
      	$this->_dnsWildcard = "ON";
      	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.'&wildcard='.$this->_dnsWildcard );
      	break;
      

      As you can see the only difference is that I force the variable "$this->_dnsWildcard" to "ON". This means that the original line of code:

      if (isset($this->_dnsWildcard) && $this->_dnsWildcard != "OFF") $this->_dnsWildcard = "ON";
      

      simply just isn't setting the variable to "ON" as it should when the checkbox on the settings page is checked. Why is this single line of code not working? Well I don't know what the variable contains when it is tested with if and isset. But it's either not set at all even though the checkbox is or it is set to "OFF" by default somewhere earlier in the code.

      This problem has been around since… ever. Mentioned before here http://forum.pfsense.org/index.php/topic,67793.msg375153.html#msg375153
      1.PNG
      1.PNG_thumb
      2.PNG
      2.PNG_thumb
      3.PNG
      3.PNG_thumb

      1 Reply Last reply Reply Quote 0
      • C
        Coffeemaker
        last edited by

        Hi

        I also noticed that problem with DynDNS for Loopia a while ago, so I made this fix on my own pfSense box:

        
        case 'loopia':
        	$needsIP = TRUE;
        	if(isset($this->_dnsWildcard) && $this->_dnsWildcard == TRUE) {
        		$this->_dnsWildcard = "ON";
        	}
        	else {
        		$this->_dnsWildcard = "OFF";
        	}
        	curl_setopt($ch, CURLOPT_USERPWD, $this->_dnsUser.':'.$this->_dnsPass);
        	curl_setopt($ch, CURLOPT_URL, 'https://dyndns.loopia.se/?system=custom&hostname=' . $this->_dnsHost . '&myip=' . $this->_dnsIP . '&wildcard=' . $this->_dnsWildcard . '&mx=' . $this->_dnsMX . '&backmx=NO');
        	break;
        
        

        I agree that the issue with isset($this->_dnsWildcard) could affect other providers too.
        So maybe my fix needs to be adjusted, if the behaviour of isset($this->_dnsWildcard) changes.

        I've also changed the host to dyndns.loopia.se, since that's what their support page says (in Swedish):
        https://support.loopia.se/wiki/om-dyndns-stodet/

        Btw, it would be nice if this change can be included in future versions of pfSense? :)

        1 Reply Last reply Reply Quote 0
        • M
          magnust
          last edited by

          @Coffeemaker:

          I agree that the issue with isset($this->_dnsWildcard) could affect other providers too.

          Yes it quite sure does. The DynDNS code really needs a quick overhaul.

          @Coffeemaker:

          Btw, it would be nice if this change can be included in future versions of pfSense? :)

          YES! Since more DynDNS providers clearly are affected this really needs to be addressed since it's not only a verified bug, the fix is done too (although a bit of work needs to be done to copy the working code into the other providers too). How does one go about to make sure it's added to the main development thread? Sorry for my ignorance but where do you report proper pfsense bugs?

          1 Reply Last reply Reply Quote 0
          • C
            Coffeemaker
            last edited by

            I reported the bug here:
            https://redmine.pfsense.org/issues/8014

            1 Reply Last reply Reply Quote 0
            • M
              magnust
              last edited by

              @Coffeemaker:

              I reported the bug here:
              https://redmine.pfsense.org/issues/8014

              Kanon!

              :D

              1 Reply Last reply Reply Quote 0
              • V
                Videonisse
                last edited by

                @Coffeemaker:

                I reported the bug here:
                https://redmine.pfsense.org/issues/8014

                Based on recent info from Loopia Support, the recommended API to use is not https://dyndns.loopia.se but https://api.loopia.se/. One important advantage is that you then also can create a separate User for the DNS update and doesn't need to use your admin login for the Loopia Customer Zone.

                But are there any specific reason why you want to use the old API?

                https://translate.google.se/translate?hl=sv&sl=sv&tl=en&u=https%3A%2F%2Fsupport.loopia.se%2Fwiki%2Fuppdatera-dynamisk-ip-adress-med-loopiaapi%2F&sandbox=1

                1 Reply Last reply Reply Quote 0
                • M
                  magnust
                  last edited by

                  @Videonisse:

                  Based on recent info from Loopia Support, the recommended API to use is not https://dyndns.loopia.se but https://api.loopia.se/. One important advantage is that you then also can create a separate User for the DNS update and doesn't need to use your admin login for the Loopia Customer Zone.

                  But are there any specific reason why you want to use the old API?

                  https://translate.google.se/translate?hl=sv&sl=sv&tl=en&u=https%3A%2F%2Fsupport.loopia.se%2Fwiki%2Fuppdatera-dynamisk-ip-adress-med-loopiaapi%2F&sandbox=1

                  I'd much rather use the new API of course. But… how would I do that?

                  Anyhow, I've switched to OPNsense so it doesn't matter for me anymore.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post
                  Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.