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>" }}
Browser-based update client
These URLs invoke the built-in update client, which is intended for temporary and adhoc scenarios only.
It periodically checks your IP and updates DNS if it changes.
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_HOST }}/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 }}/update (similar, but ipv4 only)
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_IPV6_HOST }}/update (similar, but ipv6 only)
Update URLs for browser / http user agent use
Interactive - will ask for username (give your hostname) and password (give your secret):
- https://{{ WWW_HOST }}/nic/update (updates hostname to point to remote ipv4 or ipv6 address)
- https://{{ WWW_IPV4_HOST }}/nic/update (similar, but ipv4 only)
- https://{{ WWW_IPV6_HOST }}/nic/update (similar, but ipv6 only)
Giving the http basic auth username and password in the 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 (similar, but ipv4 only)
- https://{{ host.get_fqdn|default:"<your hostname>" }}:{{ update_secret|default:"<your secret>" }}@{{ WWW_IPV6_HOST }}/nic/update (similar, but ipv6 only)
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)
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.