General configuration hints
Usually, you should configure one system on your network to update the DNS.
This can be either your router or a host on your network and it will run some software
called the update client.
We have some specific configuration hints for some devices and update clients,
please see the tabs above. If you don't find yours there, use the generic hints below.
Important note about security and compatibility:
For update URLs, we always give the https (not: http) URL as that will use an encrypted connection
to transfer your data (including your update secret). Depending on your update client (router firmware or
PC software) and the specific nsupdate.info-based service, https might be not supported.
So, if it does not work, you have the choice of using a different update client and/or a different service,
or transmitting your data using an unencrypted connection (using http: instead of https:).
On {{ WWW_HOST }} https is {% if not WE_HAVE_SSL %}not {% endif %}supported.
Your update client needs to access the following URLs to update the DNS:
For IPv4 updates:
For IPv6 updates:
The IPs will be determined automatically using the remote address our service is seeing
(see below for more details).
Your update client has to do the following steps:
- Do HTTP Basic Auth with:
- Username: {{ host.get_fqdn|default:"<your fqdn>" }}
- Password: {{ update_secret|default:"<your secret>" }}
- Send a http GET request to:
- https://{{ WWW_IPV4_HOST }}/nic/update (to update IPv4 A record in DNS)
- https://{{ WWW_IPV6_HOST }}/nic/update (to update IPv6 AAAA record in DNS)
- Optionally, we support some URL arguments:
- myip=127.0.0.1 or myip=::1 (by default, we autodetect the IP. If the autodetected IP is not
the one you want to put into DNS, you need to give the wanted one explicitly using myip=...)
- hostname={{ host.get_fqdn|default:"<your fqdn>" }} (if not given: autodetect from http basic auth)
- The response status and content will be:
- Status 200 and "good <your ip>" new IP accepted
- Status 200 and "nochg <your ip>" IP accepted, but did not change since last update
- Status 401: Authorization Required Incorrect authentication or no http basic auth header received
Fritz!Box 6360, 7390 and maybe others:
Go to:
Internet
Permit Access
Dynamic DNS
Enter the following data:
Setting | Value |
Dynamic DNS provider | Custom |
Update-URL | https://{{ WWW_IPV4_HOST }}/nic/update |
Domain Name | {{ host.get_fqdn|default:"<your hostname>" }} |
User name | {{ host.get_fqdn|default:"<your hostname>" }} |
Password | {{ update_secret|default:"<your secret>" }} |
If you have IPv4 and IPv6
Set Update-URL to the following (two URLs, separated by one space)
https://{{ WWW_IPV4_HOST }}/nic/update https://{{ WWW_IPV6_HOST }}/nic/update
Forcing a dynamic DNS update
If you want to force a dynamic update for testing purposes, you can do it like this:
- disable dynamic DNS, apply
- enable dynamic DNS, apply
- (now the Fritz!Box sends an update, it might be "good" or "nochg" depending on whether we already have that IP in DNS)
DD-WRT
Go to:
Setup
DDNS
Enter the following data:
Setting | Value |
DDNS Service | Custom |
DYNDNS Server | {{ WWW_IPV4_HOST }} |
User name | {{ host.get_fqdn|default:"<your hostname>" }} |
Password | {{ update_secret|default:"<your secret>" }} |
Host Name | {{ host.get_fqdn|default:"<your hostname>" }} |
ddclient
ddclient is a popular dyndns update daemon on Linux.
# /etc/ddclient.conf
# this will update your ipv4 address to the address
# the web service sees requests coming from:
protocol=dyndns2
use=web, web=http://{{ WWW_IPV4_HOST }}/myip
ssl=yes # yes = use https for updates
server={{ WWW_IPV4_HOST }}
login={{ host.get_fqdn|default:"<your hostname>" }}
password='{{ update_secret|default:"<your secret>" }}'
{{ host.get_fqdn|default:"<your hostname>" }}
# ddclient releases <= 3.8.1 do not support ipv6,
# but there is a patch for ipv6 from Eduardo Trapani.
# using such a patched ddclient, the following should work:
#
# this will update your ipv6 address to the interface address:
#protocol=dyndns2
#usev6=if, if=eth0
#ssl=yes # yes = use https for updates
#server={{ WWW_IPV6_HOST }}
#login={{ host.get_fqdn|default:"<your hostname>" }}
#password='{{ update_secret|default:"<your secret>" }}'
#{{ host.get_fqdn|default:"<your hostname>" }}
Easy update URLs
Explanation of parameters:
{% if not host %}
- <your hostname>: your fully qualified hostname, something like example.{{ WWW_HOST }}
{% endif %}
{% if not update_secret %}
- <your secret>: the secret you have configured for this hostname
{% endif %}
- IP addresses: we use the v4 and v6 localhost addresses in the examples, but
of course you need to use your real public IP instead of that.
For browser / interactive use (will ask for username (give your hostname) and password (give yoursecret)):
- https://{{ WWW_HOST }}/nic/update (updates hostname to point to remote ipv4 or ipv6 address)
- https://{{ WWW_IPV4_HOST }}/nic/update (updates hostname to point to remote ipv4 address)
- https://{{ WWW_IPV6_HOST }}/nic/update (updates hostname to point to remote ipv6 address)
For browser / interactive use (give http basic auth username and password in URL):
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_HOST }}/nic/update (updates hostname to point to remote ipv4 or ipv6 address)
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_IPV4_HOST }}/nic/update (updates hostname to point to remote ipv4 address)
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_IPV6_HOST }}/nic/update (updates hostname to point to remote ipv6 address)
For browser / interactive use as above, but manually specifying the IP address:
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_HOST }}/nic/update?myip=127.0.0.1 (updates hostname to point to ipv4 127.0.0.1)
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_HOST }}/nic/update?myip=::1 (updates hostname to point to ipv6 ::1)