Docker ssh honeypot and ddclient

Recently cleaned house and did a fresh os install, and when I was about to reinitialize my edge vm I realized that everything I had been using my virtual debain server for can now be done with docker.

And then some! Basically I was using a virtual server as a file share, an ssh gateway, a web server, and as a ddclient with google domains

I also wanted to create a honeypot because I’m always getting spammed. The honeypot is not super-advanced but for now, I get a steady stream of common usernames and passwords. Also, IPs to “investigate.” I’d love to go farther with this, but of course, who has the time?

my honeypot brings all the bots to the yard

ddclient image

I recently came across the linuxserver collection of docker images, including the one for ddclient. Super easy to set up (just point your image at the ddclient.conf), using something like

docker run -d --name=ddclient -e PUID=1000 -e PGID=1000 -e TZ=America/New_York -v ./docker/:/config --restart unless-stopped linuxserver/ddclient

Now, my IP stays fresh and the service runs all the time without eating into my resources.

the ssh-honey honeypot

I am using this image: txt3rob/docker-ssh-honey for starters. Now, I’ve nat’d my external port 22 to point to the machine where the image is running, and I’ve got it exposed on port 2022, so my command looks like this:

docker run -i -p 2022:22 --name=ssh-honey --restart unless-stopped txt3rob/docker-ssh-honey -e bin/ssh-honeypot -b -d

dynamic dns with google domains using ddclient on debian

After putting it off for ages due a perceived PITA process, I finally decided to check out how to set up dynamic dns to point at one of my servers that’s behind a changing IP. I was pleased at how surprisingly easy it is.

prereqs

I’m running debian 8 in a kvm vm, using bridged networking to give my web server it’s own identity.
The only package required is ddclient

configure google domains

Jump to the synthetic records section under your google domain dns settings and add the subdomain you want to forward to your dynamic host:

if you click on that blue “view credentials” link you’ll see the username and password google has randomly generated for you. you’ll need those details when you edit your ddclient.conf. note that until I’ve set up the config, the “data” section here shows 0.0.0.0 as my IP.

configure ddclient

for my setup, I’ve got several subdomains I want to forward to the same host. After checking out the ddclient manual, I’ve edited my ddclient.conf similar to the below:

protocol=dyndns2
use=web
server=domains.google.com
ssl=yes
protocol=dyndns2, login=host1login, password='host1password'
custom-subdomain.your-host1.com
protocol=dyndns2, login=host2login, password='host2password'
config{custom-subdomain.your-host1.com}{atime} : 0
config{custom-subdomain.your-host1.com}{backupmx} : 0
config{custom-subdomain.your-host1.com}{cacheable} : ARRAY(0x2a462e0)
config{custom-subdomain.your-host1.com}{cmd} :
config{custom-subdomain.your-host1.com}{cmd-skip} :
config{custom-subdomain.your-host1.com}{custom} : 0
config{custom-subdomain.your-host1.com}{fw} :
config{custom-subdomain.your-host1.com}{fw-login} :
config{custom-subdomain.your-host1.com}{fw-password} :
config{custom-subdomain.your-host1.com}{fw-skip} :
config{custom-subdomain.your-host1.com}{host} : custom-subdomain.your-host1.com
config{custom-subdomain.your-host1.com}{if} : ppp0
config{custom-subdomain.your-host1.com}{if-skip} :
config{custom-subdomain.your-host1.com}{ip} :
config{custom-subdomain.your-host1.com}{login} : host1login
config{custom-subdomain.your-host1.com}{max-interval} : 2592000
config{custom-subdomain.your-host1.com}{min-error-interval} : 300
config{custom-subdomain.your-host1.com}{min-interval} : 30
config{custom-subdomain.your-host1.com}{mtime} : 0
config{custom-subdomain.your-host1.com}{mx} :
config{custom-subdomain.your-host1.com}{password} : host1password
config{custom-subdomain.your-host1.com}{protocol} : dyndns2
config{custom-subdomain.your-host1.com}{script} : /nic/update
config{custom-subdomain.your-host1.com}{server} : domains.google.com
config{custom-subdomain.your-host1.com}{static} : 0
config{custom-subdomain.your-host1.com}{status} :
config{custom-subdomain.your-host1.com}{use} : web
config{custom-subdomain.your-host1.com}{warned-min-error-interval} : 0
config{custom-subdomain.your-host1.com}{warned-min-interval} : 0
config{custom-subdomain.your-host1.com}{web} : dyndns
config{custom-subdomain.your-host1.com}{web-skip} :
config{custom-subdomain.your-host1.com}{wildcard} : 0
config{custom-subdomain.your-host1.com}{wtime} : 30
config{custom-subdomain.your-host2.com}{atime} : 0
config{custom-subdomain.your-host2.com}{backupmx} : 0
config{custom-subdomain.your-host2.com}{cacheable} : ARRAY(0x2a6a6f0)
config{custom-subdomain.your-host2.com}{cmd} :
config{custom-subdomain.your-host2.com}{cmd-skip} :
config{custom-subdomain.your-host2.com}{custom} : 0
config{custom-subdomain.your-host2.com}{fw} :
config{custom-subdomain.your-host2.com}{fw-login} :
config{custom-subdomain.your-host2.com}{fw-password} :
config{custom-subdomain.your-host2.com}{fw-skip} :
config{custom-subdomain.your-host2.com}{host} : custom-subdomain.your-host2.com
config{custom-subdomain.your-host2.com}{if} : ppp0
config{custom-subdomain.your-host2.com}{if-skip} :
config{custom-subdomain.your-host2.com}{ip} :
config{custom-subdomain.your-host2.com}{login} : host2login
config{custom-subdomain.your-host2.com}{max-interval} : 2592000
config{custom-subdomain.your-host2.com}{min-error-interval} : 300
config{custom-subdomain.your-host2.com}{min-interval} : 30
config{custom-subdomain.your-host2.com}{mtime} : 0
config{custom-subdomain.your-host2.com}{mx} :
config{custom-subdomain.your-host2.com}{password} : host2password
config{custom-subdomain.your-host2.com}{protocol} : dyndns2
config{custom-subdomain.your-host2.com}{script} : /nic/update
config{custom-subdomain.your-host2.com}{server} : domains.google.com
config{custom-subdomain.your-host2.com}{static} : 0
config{custom-subdomain.your-host2.com}{status} :
config{custom-subdomain.your-host2.com}{use} : web
config{custom-subdomain.your-host2.com}{warned-min-error-interval} : 0
config{custom-subdomain.your-host2.com}{warned-min-interval} : 0
config{custom-subdomain.your-host2.com}{web} : dyndns
config{custom-subdomain.your-host2.com}{web-skip} :
config{custom-subdomain.your-host2.com}{wildcard} : 0
config{custom-subdomain.your-host2.com}{wtime} : 30
=== cache ====
cache{custom-subdomain.your-host1.com}{atime} : 1456077703
cache{custom-subdomain.your-host1.com}{backupmx} : 0
cache{custom-subdomain.your-host1.com}{custom} : 0
cache{custom-subdomain.your-host1.com}{host} : custom-subdomain.your-host1.com
cache{custom-subdomain.your-host1.com}{mtime} : 0
cache{custom-subdomain.your-host1.com}{mx} :
cache{custom-subdomain.your-host1.com}{script} : /nic/update
cache{custom-subdomain.your-host1.com}{static} : 0
cache{custom-subdomain.your-host1.com}{status} : nohost
cache{custom-subdomain.your-host1.com}{warned-min-error-interval} : 0
cache{custom-subdomain.your-host1.com}{warned-min-interval} : 0
cache{custom-subdomain.your-host1.com}{wildcard} : 0
cache{custom-subdomain.your-host1.com}{wtime} : 30
cache{custom-subdomain.your-host2.com}{atime} : 0
cache{custom-subdomain.your-host2.com}{backupmx} : 0
cache{custom-subdomain.your-host2.com}{custom} : 0
cache{custom-subdomain.your-host2.com}{host} : custom-subdomain.your-host2.com
cache{custom-subdomain.your-host2.com}{ip} : host-ip
cache{custom-subdomain.your-host2.com}{mtime} : 1456077746
cache{custom-subdomain.your-host2.com}{mx} :
cache{custom-subdomain.your-host2.com}{script} : /nic/update
cache{custom-subdomain.your-host2.com}{static} : 0
cache{custom-subdomain.your-host2.com}{status} :
cache{custom-subdomain.your-host2.com}{warned-min-error-interval} : 0
cache{custom-subdomain.your-host2.com}{warned-min-interval} : 0
cache{custom-subdomain.your-host2.com}{wildcard} : 0
cache{custom-subdomain.your-host2.com}{wtime} : 30
DEBUG: proxy =
DEBUG: url = http://checkip.dyndns.org/
DEBUG: server = checkip.dyndns.org
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
RECEIVE: Connection: close
RECEIVE: Cache-Control: no-cache
RECEIVE: Pragma: no-cache
RECEIVE: Content-Length: 104
RECEIVE:
RECEIVE:Current IP Address: host-ip
DEBUG: get_ip: using web, http://checkip.dyndns.org/ reports host-ip
SUCCESS: custom-subdomain.your-host2.com: skipped: IP address was already set to host-ip.
DEBUG:
DEBUG: nic_dyndns2_update -------------------
INFO: setting IP address to host-ip for custom-subdomain.your-host1.com
UPDATE: updating custom-subdomain.your-host1.com
DEBUG: proxy =
DEBUG: url = http://domains.google.com/nic/update?system=dyndns&hostname=custom-subdomain.your-host1.com&myip=host-ip
DEBUG: server = domains.google.com
CONNECT: domains.google.com
CONNECTED: using SSL
SENDING: GET /nic/update?system=dyndns&hostname=custom-subdomain.your-host1.com&myip=host-ip HTTP/1.0
SENDING: Host: domains.google.com
SENDING: Authorization: Basic smdhhsdfaBLSH
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.0 200 OK
RECEIVE: Strict-Transport-Security: max-age=31536000; includeSubDomains
RECEIVE: Content-Type: text/plain; charset=utf-8
RECEIVE: Date: Sun, 21 Feb 2016 18:27:33 GMT
RECEIVE: Expires: Sun, 21 Feb 2016 18:27:33 GMT
RECEIVE: Cache-Control: private, max-age=0
RECEIVE: X-Content-Type-Options: nosniff
RECEIVE: X-Frame-Options: SAMEORIGIN
RECEIVE: X-XSS-Protection: 1; mode=block
RECEIVE: Server: GSE
RECEIVE: Accept-Ranges: none
RECEIVE: Vary: Accept-Encoding
RECEIVE:
RECEIVE: good host-ip
SUCCESS: updating custom-subdomain.your-host1.com: good: IP address set to host-ip

In the above, my custom-subdomain.your-host1.com was a new host I added to the config, whereas custom-subdomain.your-host2.com is one which I’d already updated during a prior test.

ig{custom-subdomain.your-host1.com}{atime} : 0
config{custom-subdomain.your-host1.com}{backupmx} : 0
config{custom-subdomain.your-host1.com}{cacheable} : ARRAY(0x2a462e0)
config{custom-subdomain.your-host1.com}{cmd} :
config{custom-subdomain.your-host1.com}{cmd-skip} :
config{custom-subdomain.your-host1.com}{custom} : 0
config{custom-subdomain.your-host1.com}{fw} :
config{custom-subdomain.your-host1.com}{fw-login} :
config{custom-subdomain.your-host1.com}{fw-password} :
config{custom-subdomain.your-host1.com}{fw-skip} :
config{custom-subdomain.your-host1.com}{host} : custom-subdomain.your-host1.com
config{custom-subdomain.your-host1.com}{if} : ppp0
config{custom-subdomain.your-host1.com}{if-skip} :
config{custom-subdomain.your-host1.com}{ip} :
config{custom-subdomain.your-host1.com}{login} : host1login
config{custom-subdomain.your-host1.com}{max-interval} : 2592000
config{custom-subdomain.your-host1.com}{min-error-interval} : 300
config{custom-subdomain.your-host1.com}{min-interval} : 30
config{custom-subdomain.your-host1.com}{mtime} : 0
config{custom-subdomain.your-host1.com}{mx} :
config{custom-subdomain.your-host1.com}{password} : host1password
config{custom-subdomain.your-host1.com}{protocol} : dyndns2
config{custom-subdomain.your-host1.com}{script} : /nic/update
config{custom-subdomain.your-host1.com}{server} : domains.google.com
config{custom-subdomain.your-host1.com}{static} : 0
config{custom-subdomain.your-host1.com}{status} :
config{custom-subdomain.your-host1.com}{use} : web
config{custom-subdomain.your-host1.com}{warned-min-error-interval} : 0
config{custom-subdomain.your-host1.com}{warned-min-interval} : 0
config{custom-subdomain.your-host1.com}{web} : dyndns
config{custom-subdomain.your-host1.com}{web-skip} :
config{custom-subdomain.your-host1.com}{wildcard} : 0
config{custom-subdomain.your-host1.com}{wtime} : 30
config{custom-subdomain.your-host2.com}{atime} : 0
config{custom-subdomain.your-host2.com}{backupmx} : 0
config{custom-subdomain.your-host2.com}{cacheable} : ARRAY(0x2a6a6f0)
config{custom-subdomain.your-host2.com}{cmd} :
config{custom-subdomain.your-host2.com}{cmd-skip} :
config{custom-subdomain.your-host2.com}{custom} : 0
config{custom-subdomain.your-host2.com}{fw} :
config{custom-subdomain.your-host2.com}{fw-login} :
config{custom-subdomain.your-host2.com}{fw-password} :
config{custom-subdomain.your-host2.com}{fw-skip} :
config{custom-subdomain.your-host2.com}{host} : custom-subdomain.your-host2.com
config{custom-subdomain.your-host2.com}{if} : ppp0
config{custom-subdomain.your-host2.com}{if-skip} :
config{custom-subdomain.your-host2.com}{ip} :
config{custom-subdomain.your-host2.com}{login} : host2login
config{custom-subdomain.your-host2.com}{max-interval} : 2592000
config{custom-subdomain.your-host2.com}{min-error-interval} : 300
config{custom-subdomain.your-host2.com}{min-interval} : 30
config{custom-subdomain.your-host2.com}{mtime} : 0
config{custom-subdomain.your-host2.com}{mx} :
config{custom-subdomain.your-host2.com}{password} : host2password
config{custom-subdomain.your-host2.com}{protocol} : dyndns2
config{custom-subdomain.your-host2.com}{script} : /nic/update
config{custom-subdomain.your-host2.com}{server} : domains.google.com
config{custom-subdomain.your-host2.com}{static} : 0
config{custom-subdomain.your-host2.com}{status} :
config{custom-subdomain.your-host2.com}{use} : web
config{custom-subdomain.your-host2.com}{warned-min-error-interval} : 0
config{custom-subdomain.your-host2.com}{warned-min-interval} : 0
config{custom-subdomain.your-host2.com}{web} : dyndns
config{custom-subdomain.your-host2.com}{web-skip} :
config{custom-subdomain.your-host2.com}{wildcard} : 0
config{custom-subdomain.your-host2.com}{wtime} : 30
=== cache ====
cache{custom-subdomain.your-host1.com}{atime} : 1456077703
cache{custom-subdomain.your-host1.com}{backupmx} : 0
cache{custom-subdomain.your-host1.com}{custom} : 0
cache{custom-subdomain.your-host1.com}{host} : custom-subdomain.your-host1.com
cache{custom-subdomain.your-host1.com}{mtime} : 0
cache{custom-subdomain.your-host1.com}{mx} :
cache{custom-subdomain.your-host1.com}{script} : /nic/update
cache{custom-subdomain.your-host1.com}{static} : 0
cache{custom-subdomain.your-host1.com}{status} : nohost
cache{custom-subdomain.your-host1.com}{warned-min-error-interval} : 0
cache{custom-subdomain.your-host1.com}{warned-min-interval} : 0
cache{custom-subdomain.your-host1.com}{wildcard} : 0
cache{custom-subdomain.your-host1.com}{wtime} : 30
cache{custom-subdomain.your-host2.com}{atime} : 0
cache{custom-subdomain.your-host2.com}{backupmx} : 0
cache{custom-subdomain.your-host2.com}{custom} : 0
cache{custom-subdomain.your-host2.com}{host} : custom-subdomain.your-host2.com
cache{custom-subdomain.your-host2.com}{ip} : host-ip
cache{custom-subdomain.your-host2.com}{mtime} : 1456077746
cache{custom-subdomain.your-host2.com}{mx} :
cache{custom-subdomain.your-host2.com}{script} : /nic/update
cache{custom-subdomain.your-host2.com}{static} : 0
cache{custom-subdomain.your-host2.com}{status} :
cache{custom-subdomain.your-host2.com}{warned-min-error-interval} : 0
cache{custom-subdomain.your-host2.com}{warned-min-interval} : 0
cache{custom-subdomain.your-host2.com}{wildcard} : 0
cache{custom-subdomain.your-host2.com}{wtime} : 30om-subdomain.your-host2.com

test the ddclient configuration

the best way to test your configuration is by running the following command:
ddclient -daemon=0 -noquiet -verbose -debug
this will iterate all of your configured values and then give you pretty detailed debug output that should look something like:

=== opt ====
opt{cache} :
opt{cmd} :
opt{cmd-skip} :
opt{daemon} : 0
opt{debug} : 1
opt{exec} :
opt{facility} :
opt{file} :
opt{force} :
opt{foreground} :
opt{fw} :
opt{fw-login} :
opt{fw-password} :
opt{fw-skip} :
opt{geturl} :
opt{help} :
opt{host} :
opt{if} :
opt{if-skip} :
opt{ip} :
opt{login} :
opt{mail} :
opt{mail-failure} :
opt{max-interval} : 2592000
opt{min-error-interval} : 300
opt{min-interval} : 30
opt{options} :
opt{password} :
opt{pid} :
opt{postscript} :
opt{priority} :
opt{protocol} :
opt{proxy} :
opt{query} :
opt{quiet} : 0
opt{retry} :
opt{server} :
opt{ssl} :
opt{syslog} :
opt{test} :
opt{timeout} :
opt{use} :
opt{verbose} : 1
opt{web} :
opt{web-skip} :
=== globals ====
globals{daemon} : 60
globals{debug} : 1
globals{login} : a global login
globals{password} : a global password
globals{protocol} : dyndns2
globals{quiet} : 0
globals{server} : domains.google.com
globals{ssl} : 1
globals{use} : web
globals{verbose} : 1
=== config ====
config{subd.your-host1.com}{atime} : 0
config{subd.your-host1.com}{backupmx} : 0
config{subd.your-host1.com}{cacheable} : ARRAY(0x2a462e0)
config{subd.your-host1.com}{cmd} :
config{subd.your-host1.com}{cmd-skip} :
config{subd.your-host1.com}{custom} : 0
config{subd.your-host1.com}{fw} :
config{subd.your-host1.com}{fw-login} :
config{subd.your-host1.com}{fw-password} :
config{subd.your-host1.com}{fw-skip} :
config{subd.your-host1.com}{host} : subd.your-host1.com
config{subd.your-host1.com}{if} : ppp0
config{subd.your-host1.com}{if-skip} :
config{subd.your-host1.com}{ip} :
config{subd.your-host1.com}{login} : host1login
config{subd.your-host1.com}{max-interval} : 2592000
config{subd.your-host1.com}{min-error-interval} : 300
config{subd.your-host1.com}{min-interval} : 30
config{subd.your-host1.com}{mtime} : 0
config{subd.your-host1.com}{mx} :
config{subd.your-host1.com}{password} : host1password
config{subd.your-host1.com}{protocol} : dyndns2
config{subd.your-host1.com}{script} : /nic/update
config{subd.your-host1.com}{server} : domains.google.com
config{subd.your-host1.com}{static} : 0
config{subd.your-host1.com}{status} :
config{subd.your-host1.com}{use} : web
config{subd.your-host1.com}{warned-min-error-interval} : 0
config{subd.your-host1.com}{warned-min-interval} : 0
config{subd.your-host1.com}{web} : dyndns
config{subd.your-host1.com}{web-skip} :
config{subd.your-host1.com}{wildcard} : 0
config{subd.your-host1.com}{wtime} : 30
config{subd.your-host2.com}{atime} : 0
config{subd.your-host2.com}{backupmx} : 0
config{subd.your-host2.com}{cacheable} : ARRAY(0x2a6a6f0)
config{subd.your-host2.com}{cmd} :
config{subd.your-host2.com}{cmd-skip} :
config{subd.your-host2.com}{custom} : 0
config{subd.your-host2.com}{fw} :
config{subd.your-host2.com}{fw-login} :
config{subd.your-host2.com}{fw-password} :
config{subd.your-host2.com}{fw-skip} :
config{subd.your-host2.com}{host} : subd.your-host2.com
config{subd.your-host2.com}{if} : ppp0
config{subd.your-host2.com}{if-skip} :
config{subd.your-host2.com}{ip} :
config{subd.your-host2.com}{login} : host2login
config{subd.your-host2.com}{max-interval} : 2592000
config{subd.your-host2.com}{min-error-interval} : 300
config{subd.your-host2.com}{min-interval} : 30
config{subd.your-host2.com}{mtime} : 0
config{subd.your-host2.com}{mx} :
config{subd.your-host2.com}{password} : host2password
config{subd.your-host2.com}{protocol} : dyndns2
config{subd.your-host2.com}{script} : /nic/update
config{subd.your-host2.com}{server} : domains.google.com
config{subd.your-host2.com}{static} : 0
config{subd.your-host2.com}{status} :
config{subd.your-host2.com}{use} : web
config{subd.your-host2.com}{warned-min-error-interval} : 0
config{subd.your-host2.com}{warned-min-interval} : 0
config{subd.your-host2.com}{web} : dyndns
config{subd.your-host2.com}{web-skip} :
config{subd.your-host2.com}{wildcard} : 0
config{subd.your-host2.com}{wtime} : 30
=== cache ====
cache{subd.your-host1.com}{atime} : 1456077703
cache{subd.your-host1.com}{backupmx} : 0
cache{subd.your-host1.com}{custom} : 0
cache{subd.your-host1.com}{host} : subd.your-host1.com
cache{subd.your-host1.com}{mtime} : 0
cache{subd.your-host1.com}{mx} :
cache{subd.your-host1.com}{script} : /nic/update
cache{subd.your-host1.com}{static} : 0
cache{subd.your-host1.com}{status} : nohost
cache{subd.your-host1.com}{warned-min-error-interval} : 0
cache{subd.your-host1.com}{warned-min-interval} : 0
cache{subd.your-host1.com}{wildcard} : 0
cache{subd.your-host1.com}{wtime} : 30
cache{subd.your-host2.com}{atime} : 0
cache{subd.your-host2.com}{backupmx} : 0
cache{subd.your-host2.com}{custom} : 0
cache{subd.your-host2.com}{host} : subd.your-host2.com
cache{subd.your-host2.com}{ip} : host-ip
cache{subd.your-host2.com}{mtime} : 1456077746
cache{subd.your-host2.com}{mx} :
cache{subd.your-host2.com}{script} : /nic/update
cache{subd.your-host2.com}{static} : 0
cache{subd.your-host2.com}{status} :
cache{subd.your-host2.com}{warned-min-error-interval} : 0
cache{subd.your-host2.com}{warned-min-interval} : 0
cache{subd.your-host2.com}{wildcard} : 0
cache{subd.your-host2.com}{wtime} : 30
DEBUG: proxy =
DEBUG: url = http://checkip.dyndns.org/
DEBUG: server = checkip.dyndns.org
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
RECEIVE: Connection: close
RECEIVE: Cache-Control: no-cache
RECEIVE: Pragma: no-cache
RECEIVE: Content-Length: 104
RECEIVE:
RECEIVE:Current IP Address: host-ip
DEBUG: get_ip: using web, http://checkip.dyndns.org/ reports host-ip
SUCCESS: subd.your-host2.com: skipped: IP address was already set to host-ip.
DEBUG:
DEBUG: nic_dyndns2_update -------------------
INFO: setting IP address to host-ip for subd.your-host1.com
UPDATE: updating subd.your-host1.com
DEBUG: proxy =
DEBUG: url = http://domains.google.com/nic/update?system=dyndns&hostname=subd.your-host1.com&myip=host-ip
DEBUG: server = domains.google.com
CONNECT: domains.google.com
CONNECTED: using SSL
SENDING: GET /nic/update?system=dyndns&hostname=subd.your-host1.com&myip=host-ip HTTP/1.0
SENDING: Host: domains.google.com
SENDING: Authorization: Basic dmshhjsdfsndlNLBL:AH
SENDING: User-Agent: ddclient/3.8.2
SENDING: Connection: close
SENDING:
RECEIVE: HTTP/1.0 200 OK
RECEIVE: Strict-Transport-Security: max-age=31536000; includeSubDomains
RECEIVE: Content-Type: text/plain; charset=utf-8
RECEIVE: Date: Sun, 21 Feb 2016 18:27:33 GMT
RECEIVE: Expires: Sun, 21 Feb 2016 18:27:33 GMT
RECEIVE: Cache-Control: private, max-age=0
RECEIVE: X-Content-Type-Options: nosniff
RECEIVE: X-Frame-Options: SAMEORIGIN
RECEIVE: X-XSS-Protection: 1; mode=block
RECEIVE: Server: GSE
RECEIVE: Accept-Ranges: none
RECEIVE: Vary: Accept-Encoding
RECEIVE:
RECEIVE: good host-ip
SUCCESS: updating subd.your-host1.com: good: IP address set to host-ip

In the above, my subd.your-host1.com was a new host I added to the config, whereas subd.your-host2.com is one which I’d already updated during a prior test.

verify google has your ip

The final step to make sure everything looks good here is to refresh your google domains dns settings page. what you should see, as I do, is the data section now reflecting the ip for your dynamic host.

I also verified my /etc/default/ddclient config to make sure it’s got run_daemon set to true. When I installed ddclient via aptitude this was done automatically but you may want to double check yours if you find your client doesn’t update regularly. my default config looks like this:

# Configuration for ddclient scripts
# generated from debconf on Sun Feb 21 12:51:42 EST 2016
#
# /etc/default/ddclient

Set to “true” if ddclient should be run every time DHCP client (‘dhclient’

from package isc-dhcp-client) updates the systems IP address.

run_dhclient=”false”

Set to “true” if ddclient should be run every time a new ppp connection is

established. This might be useful, if you are using dial-on-demand.

run_ipup=”false”

Set to “true” if ddclient should run in daemon mode

If this is changed to true, run_ipup and run_dhclient must be set to false.

run_daemon=”true”


# Set the time interval between the updates of the dynamic DNS name in seconds.

This option only takes effect if the ddclient runs in daemon mode.

daemon_interval="300"