Hello! I need some assistance as I cannot tell that ddclient is updating OpenDNS or DNS-O-Matic when left to run as a service… I have the output pasted below and all I ever see is the connections established to obtain the current external IP. I never see connectivity to actually update any of the services. From what I can tell, if I leverage DNS-O-Matic, it never sees an update when run just from the script and config file. If I manually run ddclient from the command line with all of the options, it works fine.
I have pasted all of my config infos and debug below. Any assistance would be fantastic! I am running this on a raspberry pi -> Raspbian GNU/Linux 8 (Jessie). I installed ddclient via apt-get and then enabled the daemon to run within init.d.
My primary configuration file. I have tried with the service variables on one line and on multiple lines. And noting that the daemon variable is not used as it is overridden by /etc/default/ddclient.
It should be noted in the reference docs that this [default] file exists too and overrides the config file as well as the init.d config. But I found it and this is the current config.
# Configuration for ddclient scripts
# generated from debconf on Sat Mar 17 16:50:20 CDT 2018
#
# /etc/default/ddclient
run_dhclient="false"
run_ipup="false"
run_daemon="true"
daemon_interval="3600"
As reference, this is the header from /usr/sbin/ddclient to validate current version.
######################################################################
# $Id: ddclient 157 2013-12-26 09:02:05Z wimpunk $
#
# DDCLIENT - a Perl client for updating DynDNS information
#
# Author: Paul Burry (paul+ddclient@burry.ca)
# ddclient-developers: see https://sourceforge.net/project/memberlist.php?group_id=116817
#
# website: http://ddclient.sf.net
#
# Support for multiple IP numbers added by
# Astaro AG, Ingo Schwarze <ischwarze-OOs/4mkCeqbQT0dZR+AlfA@public.gmane.org> September 16, 2008
#
######################################################################
Here I have pasted selected portions of the etc/init.d/ddclient file for reference. And noting that the daemon_interval variable is not used as it is overridden by /etc/default/ddclient.
#! /bin/sh
#
# init script for the dynamic DNS service update utility: ddclient
<snip>
# Author: Torsten Landschoff <torsten@debian.org>
PATH=/sbin:/bin:/usr/sbin:/usr/bin
NAME="ddclient"
DAEMON=/usr/sbin/$NAME
PERL=/usr/bin/perl
DESC="Dynamic DNS service update utility"
<snip>
# Evaluate the config for the Debian scripts
run_daemon=true
daemon_interval=3600
<snip>
I have tried to run this command with and without the “-file” setting, but the results are the same. In an attempt to validate it was reading the right config. Verbose output below.
Other than the issue noted above in that I never see it connecting to update the services, the other questions I have are:
- I clearly defined the config to use “web” and to use “myip.dnsomatic.com”. But the output immediately starts with showing my local interface information. Why?
- I configured it to use myip.dnsomatic.com, but the script starts with also connecting to ipdetect.dnspark.com, checkip.dyndns.org, and dns.loopia.se before going to what I told it to do. Why?
- Is there a different issue in that these checks seem to be parsing and pulling down javascript? Which I assume the ddclient app is not parsing or doing anything with?
Verbose output:
use=if, if=eth0 address is 192.168.x.yyy
use=if, if=lo address is 127.0.0.1
CONNECT: ipdetect.dnspark.com
CONNECTED: using HTTP
SENDING: GET / HTTP/1.0
SENDING: Host: ipdetect.dnspark.com
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.1 200 OK
RECEIVE: Server: nginx
RECEIVE: Date: Sun, 18 Mar 2018 15:18:49 GMT
RECEIVE: Content-Type: text/html; charset=UTF-8
RECEIVE: Connection: close
RECEIVE: Vary: Accept-Encoding
RECEIVE: X-Powered-By: PHP/5.5.30-1+deb.sury.org~precise+1
RECEIVE:
RECEIVE: <html>
RECEIVE: <head><script type="text/javascript">window.NREUM||(NREUM={}),__nr_require=function(e,t,n){function r(n){if(!t[n]){var o=t[n]={exports:{}};e[n][0].call(o.exports,function(t){var o=e[n][1][t];return r(o||t)},o,o.exports)}return t[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(e,t,n){function r(){}function o(e,t,n){return function(){return i(e,[f.now()].concat(u(arguments)),t?null:this,n),t?void 0:this}}var i=e("handle"),a=e(2),u=e(3),c=e("ee").get("tracer"),f=e("loader"),s=NREUM;"undefined"==typeof window.newrelic&&(newrelic=s);var p=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],d="api-",l=d+"ixn-";a(p,function(e,t){s[t]=o(d+t,!0,"api")}),s.addPageAction=o(d+"addPageAction",!0),s.setCurrentRouteName=o(d+"routeName",!0),t.exports=newrelic,s.interaction=function(){return(new r).get()};var m=r.prototype={createTracer:function(e,t){var n={},r=this,o="function"==typeof t;return i(l+"tracer",[f.now(),e,n],r),function(){if(c.emit((o?"":"no-")+"fn-start",[f.now(),r,o],n),o)try{return t.apply(this,arguments)}catch(e){throw c.emit("fn-err",[arguments,this,e],n),e}finally{c.emit("fn-end",[f.now()],n)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,t){m[t]=o(l+t)}),newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),i("err",[e,f.now()])}},{}],2:[function(e,t,n){function r(e,t){var n=[],r="",i=0;for(r in e)o.call(e,r)&&(n[i]=t(r,e[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],3:[function(e,t,n){function r(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length:0);for(var r=-1,o=n-t||0,i=Array(o<0?0:o);++r<o;)i[r]=e[t+r];return i}t.exports=r},{}],4:[function(e,t,n){t.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(e,t,n){function r(){}function o(e){function t(e){return e&&e instanceof r?e:e?c(e,u,i):i()}function n(n,r,o,i){if(!d.aborted||i){e&&e(n,r,o);for(var a=t(o),u=m(n),c=u.length,f=0;f<c;f++)u[f].apply(a,r);var p=s[y[n]];return p&&p.push([b,n,r,a]),a}}function l(e,t){v[e]=m(e).concat(t)}function m(e){return v[e]||[]}function w(e){return p[e]=p[e]||o(n)}function g(e,t){f(e,function(e,n){t=t||"feature",y[n]=t,t in s||(s[t]=[])})}var v={},y={},b={on:l,emit:n,get:w,listeners:m,context:t,buffer:g,abort:a,aborted:!1};return b}function i(){return new r}function a(){(s.api||s.feature)&&(d.aborted=!0,s=d.backlog={})}var u="nr@context",c=e("gos"),f=e(2),s={},p={},d=t.exports=o();d.backlog=s},{}],gos:[function(e,t,n){function r(e,t,n){if(o.call(e,t))return e[t];var r=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[t]=r,r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],handle:[function(e,t,n){function r(e,t,n,r){o.buffer([e],r),o.emit(e,t,n)}var o=e("ee").get("handle");t.exports=r,r.ee=o},{}],id:[function(e,t,n){function r(e){var t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===window?0:a(e,i,function(){return o++})}var o=1,i="nr@id",a=e("gos");t.exports=r},{}],loader:[function(e,t,n){function r(){if(!x++){var e=h.info=NREUM.info,t=d.getElementsByTagName("script")[0];if(setTimeout(s.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&t))return s.abort();f(y,function(t,n){e[t]||(e[t]=n)}),c("mark",["onload",a()+h.offset],null,"api");var n=d.createElement("script");n.src="https://"+e.agent,t.parentNode.insertBefore(n,t)}}function o(){"complete"===d.readyState&&i()}function i(){c("mark",["domContent",a()+h.offset],null,"api")}function a(){return E.exists&&performance.now?Math.round(performance.now()):(u=Math.max((new Date).getTime(),u))-h.offset}var u=(new Date).getTime(),c=e("handle"),f=e(2),s=e("ee"),p=window,d=p.document,l="addEventListener",m="attachEvent",w=p.XMLHttpRequest,g=w&&w.prototype;NREUM.o={ST:setTimeout,SI:p.setImmediate,CT:clearTimeout,XHR:w,REQ:p.Request,EV:p.Event,PR:p.Promise,MO:p.MutationObserver};var v=""+location,y={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1071.min.js"},b=w&&g&&g[l]&&!/CriOS/.test(navigator.userAgent),h=t.exports={offset:u,now:a,origin:v,features:{},xhrWrappable:b};e(1),d[l]?(d[l]("DOMContentLoaded",i,!1),p[l]("load",r,!1)):(d[m]("onreadystatechange",o),p[m]("onload",r)),c("mark",["firstbyte",u],null,"api");var x=0,E=e(4)},{}]},{},["loader"]);</script>
RECEIVE: <meta http-equiv="Expires" content="Tues, 04 Dec 1996 21:00:00 GMT">
RECEIVE: <meta http-equiv="pragma" content="no cache">
RECEIVE: </head>
RECEIVE: <body>
RECEIVE:
RECEIVE:
RECEIVE: Current Address: <MY EXTERNAL IP>
RECEIVE: <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"<LICENSE KEY REMOVED AS I AM NOT SURE WHAT IT IS","applicationID":"4148543,4148544","transactionName":"ZwdaZEQEV0RUURJZDl5NbUJfSlBZUVceHhFYEg==","queueTime":0,"applicationTime":0,"atts":"S0BZEgweREo=","errorBeacon":"bam.nr-data.net","agent":""}</script></body>
RECEIVE: </html>
use=web, web=dnspark address is <MY EXTERNAL IP>
CONNECT: checkip.dyndns.org
CONNECTED: using HTTP
SENDING: GET / HTTP/1.0
SENDING: Host: checkip.dyndns.org
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.1 200 OK
RECEIVE: Content-Type: text/html
RECEIVE: Server: DynDNS-CheckIP/1.0.1
RECEIVE: Connection: close
RECEIVE: Cache-Control: no-cache
RECEIVE: Pragma: no-cache
RECEIVE: Content-Length: 105
RECEIVE:
RECEIVE: <html><head><title>Current IP Check</title></head><body>Current IP Address: <MY EXTERNAL IP></body></html>
use=web, web=dyndns address is <MY EXTERNAL IP>
CONNECT: dns.loopia.se
CONNECTED: using HTTP
SENDING: GET /checkip/checkip.php HTTP/1.0
SENDING: Host: dns.loopia.se
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.1 200 OK
RECEIVE: Server: nginx/1.12.2
RECEIVE: Date: Sun, 18 Mar 2018 15:18:51 GMT
RECEIVE: Content-Type: text/html; charset=UTF-8
RECEIVE: Connection: close
RECEIVE: X-Powered-By: PHP/5.6.32
RECEIVE:
RECEIVE: <html><head><title>Current IP Check</title></head><body>Current IP Address: <MY EXTERNAL IP></body></html>
use=web, web=loopia address is <MY EXTERNAL IP>
CONNECT: myip.dnsomatic.com
CONNECTED: using HTTP
SENDING: GET / HTTP/1.0
SENDING: Host: myip.dnsomatic.com
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.1 200 OK
RECEIVE: Server: Varnish
RECEIVE: Retry-After: 5
RECEIVE: Content-Type: text/html
RECEIVE: Content-Length: 13
RECEIVE: Accept-Ranges: bytes
RECEIVE: Date: Sun, 18 Mar 2018 15:18:51 GMT
RECEIVE: X-Varnish: 1184590421
RECEIVE: Age: 0
RECEIVE: Via: 1.1 varnish
RECEIVE: Connection: close
RECEIVE:
RECEIVE: 24.107.127.41
use=web, web=myip.dnsomatic.com address is <MY EXTERNAL IP>
Thanks in advance for taking the time to review and help me with this!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello! I need some assistance as I cannot tell that ddclient is updating OpenDNS or DNS-O-Matic when left to run as a service… I have the output pasted below and all I ever see is the connections established to obtain the current external IP. I never see connectivity to actually update any of the services. From what I can tell, if I leverage DNS-O-Matic, it never sees an update when run just from the script and config file. If I manually run ddclient from the command line with all of the options, it works fine.
I have pasted all of my config infos and debug below. Any assistance would be fantastic! I am running this on a raspberry pi -> Raspbian GNU/Linux 8 (Jessie). I installed ddclient via apt-get and then enabled the daemon to run within init.d.
For configuration of DNS-O-Matic, I referenced this site: https://dnsomatic.com/wiki/ddclient
For multiple services, I referenced (all of which seem confusing on if, when, or where a comma may be needed, or use of the protocol variable as a global or within the specific service line).
https://github.com/ddclient/ddclient/blob/master/sample-etc_ddclient.conf
https://sourceforge.net/p/ddclient/wiki/usage/
This is the command I used to run it manually and which worked.
sudo /usr/sbin/ddclient -verbose -query -noquiet -web myip.dnsomatic.com -server updates.dnsomatic.com -login dnsomatic_email -password 'dnsomatic_password' -host all.dnsomatic.com
My primary configuration file. I have tried with the service variables on one line and on multiple lines. And noting that the daemon variable is not used as it is overridden by /etc/default/ddclient.
It should be noted in the reference docs that this [default] file exists too and overrides the config file as well as the init.d config. But I found it and this is the current config.
As reference, this is the header from /usr/sbin/ddclient to validate current version.
Here I have pasted selected portions of the etc/init.d/ddclient file for reference. And noting that the daemon_interval variable is not used as it is overridden by /etc/default/ddclient.
I have tried to run this command with and without the “-file” setting, but the results are the same. In an attempt to validate it was reading the right config. Verbose output below.
pi@raspberrypi:~ $
sudo /usr/sbin/ddclient -verbose -query -noquiet -file /etc/ddclient.conf
Other than the issue noted above in that I never see it connecting to update the services, the other questions I have are:
- I clearly defined the config to use “web” and to use “myip.dnsomatic.com”. But the output immediately starts with showing my local interface information. Why?
- I configured it to use myip.dnsomatic.com, but the script starts with also connecting to ipdetect.dnspark.com, checkip.dyndns.org, and dns.loopia.se before going to what I told it to do. Why?
- Is there a different issue in that these checks seem to be parsing and pulling down javascript? Which I assume the ddclient app is not parsing or doing anything with?
Verbose output:
Thanks in advance for taking the time to review and help me with this!