Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

multiple domains. namecheap

Help
2004-11-23
2014-07-09
  • I have 2 domains with namecheap and ddclient only updates the last one in the ddclient.conf file.
    Can anybody point to me what I am doing wrong.here's my ddclient.conf

    daemon=300                              # check every 300 seconds
    syslog=yes                              # log update msgs to syslog
    mail=root                               # mail all msgs to root
    mail-failure=root                       # mail failed update msgs to root
    pid=/var/run/ddclient.pid               # record PID in file.
    use=web
    if=checkip.dyndns.org\

    server=dynamicdns.park-your-domain.com,
    protocol=namecheap,
    login=domain1.com
    password=password
    @

    server=dynamicdns.park-your-domain.com,
    protocol=namecheap,
    login=domain2.com
    password=password
    @

     
    • wimpunk
      wimpunk
      2004-11-23

      Have you tried your configuration for one host?  Your protocol doesn't need , and use & ip must be on the same line.

       
      • it works for 1 host.

         
        • As far as I tested it, this should work:
          <config>
          daemon=300 # check every 300 seconds
          syslog=yes # log update msgs to syslog
          mail=root # mail all msgs to root
          mail-failure=root # mail failed update msgs to root
          pid=/var/run/ddclient.pid # record PID in file.
          use=web,  if=checkip.dyndns.org

          server=dynamicdns.park-your-domain.com, \ protocol=namecheap, \
          login=domain1.com  \ password=password  \

          server=dynamicdns.park-your-domain.com,  \ protocol=namecheap, \ login=domain2.com \ password=password
          </config>
          If it doesn't work, check out the documentation on how you can produce more logging.

           
          • It acts as if it does not see the first domain.
            Here's the output of ddclient -daemon=0 -debug -verbose -noquiet:

            CONNECT:  checkip.dyndns.org
            CONNECTED:
            SENDING:  GET / HTTP/1.0
            SENDING:   Host: checkip.dyndns.org
            SENDING:   User-Agent: ddclient/3.6.4
            SENDING:   Connection: close
            SENDING:
            RECEIVE:  HTTP/1.0 200 OK
            RECEIVE:  Server: Cherokee/0.4.6
            RECEIVE:  Pragma: no-cache
            RECEIVE:  Cache-Control: no-cache
            RECEIVE:  Content-Type: text/html
            RECEIVE:  Connection: close
            RECEIVE:
            RECEIVE:  <html><head><title>Current IP Check</title></head><body>Current IP Address: <snipped ip></body></html>
            INFO:     forcing updating @ because no cached entry exists.
            INFO:     setting IP address to <snipped ip> for @
            UPDATE:   updating @
            CONNECT:  dynamicdns.park-your-domain.com
            CONNECTED:
            SENDING:  GET /update?domain=domain2.com&host=@&password=<snipped password>&ip=<snipped ip> HTTP/1.0
            SENDING:   Host: dynamicdns.park-your-domain.com
            SENDING:   User-Agent: ddclient/3.6.4
            SENDING:   Connection: close
            SENDING:
            RECEIVE:  HTTP/1.1 200 OK
            RECEIVE:  Date: Tue, 23 Nov 2004 20:34:14 GMT
            RECEIVE:  Server: Apache/1.3.33 (Unix) mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2634a mod_ssl/2.8.22 OpenSSL/0.9.7a PHP-CGI/0.1b
            RECEIVE:  X-Powered-By: PHP/4.3.9
            RECEIVE:  Connection: close
            RECEIVE:  Content-Type: text/html
            RECEIVE:
            RECEIVE:  <?xml version="1.0"?>
            RECEIVE:  <interface-response>
            RECEIVE:  <DomainRRP>E</DomainRRP>
            RECEIVE:  <RegistrarHold>False</RegistrarHold>
            RECEIVE:  <IP><snipped ip></IP>
            RECEIVE:  <Command>SETDNSHOST</Command>
            RECEIVE:  <Language>en</Language>
            RECEIVE:  <ErrCount>0</ErrCount>
            RECEIVE:  <ResponseCount>0</ResponseCount>
            RECEIVE:  <MinPeriod>1</MinPeriod>
            RECEIVE:  <MaxPeriod>10</MaxPeriod>
            RECEIVE:  <Server>Reseller4</Server>
            RECEIVE:  <Site>Namecheap</Site>
            RECEIVE:  <IsLockable>True</IsLockable>
            RECEIVE:  <IsRealTimeTLD>True</IsRealTimeTLD>
            RECEIVE:  <TimeDifference>+03.00</TimeDifference>
            RECEIVE:  <ExecTime>0.140625</ExecTime>
            RECEIVE:  <Done>true</Done>
            RECEIVE:  <debug><![CDATA[]]></debug>
            RECEIVE:  </interface-response>
            SUCCESS:  updating @: good: IP address set to <snipped ip>

             
            • wimpunk
              wimpunk
              2004-11-24

              Can you post the first part of the debugging information, I need the part where ddclient reads the configuration.

               
    • I think the issue was that I was trying to update 2 top-level domains, so names that I was updating were the same: "@". This is how I got around the issue.

      In the configuration screen for namecheap, I created a DNS CNAME Alias record for "@" to point to alias1.domain1.com for the first domain, and in the subdomain settings I created the "A-Record" for the alias1.domain1.com to point to the actual ip address. I did the same thing for domain2.

      So, now my ddclient.conf looks like this and it's working:

      server=dynamicdns.park-your-domain.com,
      protocol=namecheap
      login=domain1.com
      password=password1
      alias1

      server=dynamicdns.park-your-domain.com,
      protocol=namecheap
      login=domain2.com,
      password=password2
      alias2

      But here's the output that you requested.

      # ddclient -daemon=0 -debug -verbose -noquiet
      === opt ====
      opt{cache}                           : <undefined>
      opt{cmd}                             : <undefined>
      opt{cmd-skip}                        : <undefined>
      opt{daemon}                          : 0
      opt{debug}                           : 1
      opt{exec}                            : <undefined>
      opt{facility}                        : <undefined>
      opt{file}                            : <undefined>
      opt{force}                           : <undefined>
      opt{fw}                              : <undefined>
      opt{fw-login}                        : <undefined>
      opt{fw-password}                     : <undefined>
      opt{fw-skip}                         : <undefined>
      opt{geturl}                          : <undefined>
      opt{help}                            : <undefined>
      opt{host}                            : <undefined>
      opt{if}                              : <undefined>
      opt{if-skip}                         : <undefined>
      opt{ip}                              : <undefined>
      opt{login}                           : <undefined>
      opt{mail}                            : <undefined>
      opt{mail-failure}                    : <undefined>
      opt{max-interval}                    : 1296000
      opt{min-error-interval}              : 300
      opt{min-interval}                    : 30
      opt{options}                         : <undefined>
      opt{password}                        : <undefined>
      opt{pid}                             : <undefined>
      opt{priority}                        : <undefined>
      opt{protocol}                        : <undefined>
      opt{proxy}                           : <undefined>
      opt{query}                           : <undefined>
      opt{quiet}                           : 0
      opt{retry}                           : <undefined>
      opt{server}                          : <undefined>
      opt{syslog}                          : <undefined>
      opt{test}                            : <undefined>
      opt{timeout}                         : <undefined>
      opt{use}                             : <undefined>
      opt{verbose}                         : 1
      opt{web}                             : <undefined>
      opt{web-skip}                        : <undefined>
      === globals ====
      globals{daemon}                      : 60
      globals{debug}                       : 1
      globals{if}                          : <undefined>
      globals{login}                       : domain2.com
      globals{mail}                        : root
      globals{mail-failure}                : root
      globals{password}                    : password2
      globals{pid}                         : /var/run/ddclient.pid
      globals{protocol}                    : namecheap
      globals{quiet}                       : 0
      globals{server}                      : dynamicdns.park-your-domain.com
      globals{syslog}                      : 1
      globals{use}                         : web
      globals{verbose}                     : 1
      === config ====
      config{@}{atime}                     : 0
      config{@}{cacheable}                 : ARRAY(0x82b0110)
      config{@}{host}                      : @
      config{@}{ip}                        : <undefined>
      config{@}{login}                     : domain2.com
      config{@}{max-interval}              : 1296000
      config{@}{min-error-interval}        : 300
      config{@}{min-interval}              : 300
      config{@}{mtime}                     : 0
      config{@}{password}                  : password2
      config{@}{protocol}                  : namecheap
      config{@}{server}                    : dynamicdns.park-your-domain.com
      config{@}{status}                    :
      config{@}{warned-min-error-interval} : 0
      config{@}{warned-min-interval}       : 0
      config{@}{wtime}                     : 30
      === cache ====
      CONNECT:  checkip.dyndns.org
      CONNECTED:
      SENDING:  GET / HTTP/1.0
      SENDING:   Host: checkip.dyndns.org
      SENDING:   User-Agent: ddclient/3.6.4
      SENDING:   Connection: close
      SENDING:  
      RECEIVE:  HTTP/1.0 200 OK
      RECEIVE:  Server: Cherokee/0.4.6
      RECEIVE:  Pragma: no-cache
      RECEIVE:  Cache-Control: no-cache
      RECEIVE:  Content-Type: text/html
      RECEIVE:  Connection: close
      RECEIVE: 
      RECEIVE:  <html><head><title>Current IP Check</title></head><body>Current IP Address: ip_address</body></html>
      DEBUG:    get_ip: using web, http://checkip.dyndns.org/ reports ip_address
      INFO:     forcing updating @ because no cached entry exists.
      DEBUG:   
      DEBUG:     nic_namecheap1_update -------------------
      INFO:     setting IP address to ip_address for @
      UPDATE:   updating @
      CONNECT:  dynamicdns.park-your-domain.com
      CONNECTED:
      SENDING:  GET /update?domain=domain2.com&host=@&password=password2&ip=ip_address HTTP/1.0
      SENDING:   Host: dynamicdns.park-your-domain.com
      SENDING:   User-Agent: ddclient/3.6.4
      SENDING:   Connection: close
      SENDING:  
      RECEIVE:  HTTP/1.1 200 OK
      RECEIVE:  Date: Wed, 24 Nov 2004 16:28:11 GMT
      RECEIVE:  Server: Apache/1.3.33 (Unix) mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2634a mod_ssl/2.8.22 OpenSSL/0.9.7a PHP-CGI/0.1b
      RECEIVE:  X-Powered-By: PHP/4.3.9
      RECEIVE:  Connection: close
      RECEIVE:  Content-Type: text/html
      RECEIVE: 
      RECEIVE:  <?xml version="1.0"?>
      RECEIVE:  <interface-response>
      RECEIVE:  <DomainRRP>E</DomainRRP>
      RECEIVE:  <RegistrarHold>False</RegistrarHold>
      RECEIVE:  <IP>ip_address</IP>
      RECEIVE:  <Command>SETDNSHOST</Command>
      RECEIVE:  <Language>en</Language>
      RECEIVE:  <ErrCount>0</ErrCount>
      RECEIVE:  <ResponseCount>0</ResponseCount>
      RECEIVE:  <MinPeriod>1</MinPeriod>
      RECEIVE:  <MaxPeriod>10</MaxPeriod>
      RECEIVE:  <Server>Reseller2</Server>
      RECEIVE:  <Site>Namecheap</Site>
      RECEIVE:  <IsLockable>True</IsLockable>
      RECEIVE:  <IsRealTimeTLD>True</IsRealTimeTLD>
      RECEIVE:  <TimeDifference>+03.00</TimeDifference>
      RECEIVE:  <ExecTime>0.265625</ExecTime>
      RECEIVE:  <Done>true</Done>
      RECEIVE:  <debug><![CDATA[]]></debug>
      RECEIVE:  </interface-response>
      SUCCESS:  updating @: good: IP address set to ip_address

       
      • wimpunk
        wimpunk
        2004-11-26

        Thank you for posting your solution.  Maybe I should try to fix it in ddclient...

         
      • pbnlzen
        pbnlzen
        2007-01-31

        I am just getting into using ddclient for NAMECHEAP, and I am encountering the same "multiple domains" problem.  I think it is better described as a "multiple hosts" problem.

        The comments in sample-etc_ddclient.conf imply that more than one host can be updated during an execution of ddclient. The mechanism shown in the ddclient.conf comments is to add the extra hosts at the end of the host.and.domain string: 
             "Define local variables for one or more hosts with: var=value [, var=value]*   host.and.domain[,host2.and.domain...]".  

        In the examples it also looks like for the various servers (ZoneEdit, EasyDNS, etc.) the host.and.domain strings are intended to be fully qualified domain names, e.g., "www.mydomain.com".

        I AM GUESSING the source of the problem may be this:

        * The NAMECHEAP update URL format splits the name into two parts using two parameters: host=host_name and domain=domain.com
        * For protocol=namecheap, the ddclient app uses its "login=" parameter to supply the host_name value, therefore you end up not being able to use a fully qualified name for the host.and.domain variable in ddclient.
        * I'm guessing that ddclient is effectively saying "I am prepared to do one dynamic dns update for each unique host.and.domain. If I get more than one local variable (e.g., "login=zzz") for a given host.and.domain, I'm only going to use THE LAST ONE.
        * Because the protocol processing for NAMECHEAP forces the "host" part of host.and.domain to be split off to the login parameter, what's left to use as the host.and.domain (mydomain.com) is NOT UNIQUE between two different ddclient.conf host parameter sets.
        * Because the host.and.domain is not unique, ddclient is only using the values from the -last- occurrence, and only doing -one- URL update to dynamicdns.park-your-domain.com

        So for example, whereas the host parameters for another server (hammernode) may look like this:

        ## multiple host update
        protocol=hammernode1,                                 \ login=my-hn.org-login,                                \ password=my-hn.org-password                           \ myhost.hn.org,my2ndhost.hn.org

        ...for NAMECHEAP, because the host/sub-domain is split off to the login parameter, that style of multiple host update could not even be used, because the last line would end up looking like:
           mydomain.com,mydomain.com

        But if you try to set it up as two separate host parameter sets like this:

        protocol=namecheap,                             \ server=dynamicdns.park-your-domain.com,         \ login=ftp,                    \&nbsp;   <= FTP HOST
        password=99C0606B-D182-41EB-B41B-34DFE9DD294B   \ mydomain.com

        protocol=namecheap,                             \ server=dynamicdns.park-your-domain.com,         \ login=www,                    \&nbsp;   <= WWW HOST
        password=99C0606B-D182-41EB-B41B-34DFE9DD294B   \ mydomain.com

        ... then ddclient sees this as two redundant entries for THE SAME domain: "mydomain.com", and uses only the -last- entry for "login=", and the "www" host will get updated, but the "ftp" host will not.

        As a reminder, the update URL for NAMECHEAP looks like this:

        http://dynamicdns.park-your-domain.com/update?host=host_name&domain=domain.com&password=domain_password\[&ip=your_ip]

         
        • edmdude
          edmdude
          2007-05-17

          Here's a simple fix I did to get this working with Namecheap.

          In /usr/sbin/ddclient, change the following 2 lines in nic_namecheap_update from: 

          $url  .= "?host=$config{$h}{'login'}";
          $url  .= "&domain=$h";

          to:

          $url  .= "?host=$h";
          $url  .= "&domain=$config{$h}{'login'}";

          Now in your ddclient.conf set your Namecheap protocol to:

          ##
          ## NameCheap (namecheap.com)
          ##
          protocol=namecheap,                             \ server=dynamicdns.park-your-domain.com,         \ login=example.com,                                 \ password=XXXXXXXXXXX   \ @
          www
          *
          mail
          etc

           
          • electronox
            electronox
            2007-05-31

            thanks for the fix. works fine with my domains on debian etch.

             
    • Robert Citek
      Robert Citek
      2004-11-29

      A similar configuration worked for me for multiple names on DynDNS:

      # cat /etc/ddclient.conf
      daemon=300
      syslog=yes
      mail=root
      mail-failure=root
      pid=/var/run/ddclient.pid

      login=XXXXXX
      password=XXXXXX

      use=web
      web=checkip.dyndns.org/
      web-skip='IP Address'

      server=members.dyndns.org
      protocol=dyndns2
      host=just-a-test.homedns.org

      server=members.dyndns.org
      protocol=dyndns2
      host=just-a-test2.homedns.org

      This is on a machine running Fedora Core 2.  So, I restarted the service with 'service ddclient restart'  A quick check of the logs and a dig showed everything updated just fine.

       
      • I was doing the same on my DynDNS, but I found an easier way mentioned near the top of the ddclient.conf file:

        ## Define local variables for one or more hosts with:
        ##      var=value [, var=value]* host.and.domain[,host2.and.domain...]

        so I just put in

        login=XXXXXXXXXX                                # default login
        password=XXXXXXXX                               # default password
        #mx=mx.for.your.host                            # default MX
        backupmx=no                                     # host is primary MX?
        wildcard=yes                                    # add wildcard CNAME?

        server=members.dyndns.org,              \ protocol=dyndns2                        \ domain1.net,domain2.org

        It seems to be working beautifully for me so far.

         
        • Oh, but N.B.: This is only a solution for rwcitek's problem, not the original post's, since it looks like namecheap uses the domain name as the login, and skips using a separate domain field like the DynDNS does, and like my solution depends on.

           
    • tecol
      tecol
      2007-05-28

      I have been having the same problem with multiple hostname updates on namecheap dynamic DNS. 

      I just tried the fix that edmdude offered, and I wanted to confirm that it worked.  All my hostnames now update properly.  This is a much simpler solution than the alias workaround that nobody posted, so I would like to suggest that edmdude's fix be incorporated into the next ddclient release. 

       
      • wimpunk
        wimpunk
        2007-05-28

        Patch applied to the current svn version (3.7.1 - SVN version 52)

         
  • perpsectoff
    perpsectoff
    2014-04-12

    This is from (K)Ubuntuguide at
    http://ubuntuguide.org/wiki/Dynamic_dns#Other_DDNS_services :

    Using ddclient with Namecheap can be quirky. I needed ddclient
    v. 3.8.1 or later. Subhost names (in both the Namecheap
    settings and the ddclient subhost list) must be single words
    (e.g. "mysubhost"). The ddclient did not successfully update
    subhosts with the same name (e.g. "www" or "mail" or "@") in
    multiple domains in Namecheap.

    The easiest solution is to dynamically update (using ddclient) the "www" field for one domain only (e.g ''myhost1.me''). For all the other domains, use a "CNAME redirect" to point to the ''www.myhost1.me.'' address of the single domain whose "www" field updates dynamically. CNAME redirections change only the destination IP address; the URLs (of the referring subdomains) are kept the same.

    Another alternative is to use unique subdomain names and then forward the ''www'' entry (using a "URL forward") in the Namecheap settings for one host to a subdomain (e.g. the subhost ''main'' in the Namecheap settings, which would correspond of a "URL forward" to ''http://main.myhost1.me'' for the first host's ''www'' entry) and forward the ''www'' entry in the Namecheap settings for the second host to a different subdomain (e.g. the subhost ''home'' in the Namecheap settings, which would correspond of a "URL forward" to ''http://home.myhost2.me'' for the second host's ''www'' entry). This changes the "www" URL to the subdomain's URL, so your server must be able to handle the new URL (through virtual host files/redirects or .htaccess files). This entails a bit more effort than with the first solution.

    Note: It is tempting to try to forward the "www" field of a domain to a dynamically-updating subhost field, but Namecheap does not allow CNAME redirection to a subhost in the same domain.

    It is then easiest to redirect the @ field's setting (in Namecheap) to the www field setting (using a "URL redirect" to ''http://www.myhost1.me''). This changes the URL ''http://myhost1.me'' to ''http://www.myhost1.me'' while redirecting it, for example.

    An alternative is, in the @ field setting, to use a CNAME redirection, e.g. to ''www.myhost1.me.'', which will preserve the ''http://myhost1.me'' URL while redirecting to the IP address specified by the contents of the www field. This latter method must be accomodated by adjusting the appropriate virtual host file on your server to accept both ''http://myhost1.me'' and ''http://www.myhost1.me''.

    Other solutions found online are at:

    http://sourceforge.net/p/ddclient/discussion/399428/thread/187e6520

    http://robertianhawdon.me.uk/2010/09/03/making-ddclient-work-with-multiple-domains-on-namecheap/

     
    Last edit: perpsectoff 2014-04-12
  • MattS
    MattS
    2014-07-09

    I've recently moved my domains to namecheap. I'm also experiencing multiple domains issue.

    One thing that I haven't seen brought up is each domain has it's own dynamic DNS password. The easily solution here would be to allow ddclient to process multiple configurations for namecheap.

    ##
    ## NameCheap (namecheap.com)
    ##
    protocol=namecheap,                           \
    server=dynamicdns.park-your-domain.com,       \
    login=mydomain,                 \
    password=mydomain_password            \
    @,www,mail,etc
    
    ##
    ## NameCheap (namecheap.com)
    ##
    protocol=namecheap,                           \
    server=dynamicdns.park-your-domain.com,       \
    login=mydomain2,                 \
    password=mydomain2_password            \
    @,www,mail,etc
    

    It's also worth mentioning again that the documentation at namecheap and the example ddclient configs are incorrect in using the fully qualified host.mydomain.tld. What currently works is using ONLY the host as in the example config above.

    I would love to see this issue resolved. I'd really prefer not having to remember to modify ddclient on each time there is an update. Hope this helps. Thanks!

     
    Last edit: MattS 2014-07-09