Nomadns

Documentation

Set up a client

Each subdomain has its own tokens, created from its page in your account. Replace the subdomain, identifier and secret in the examples with those of the token; the subdomain page shows the same blocks already filled in.

API addresses

AddressUse
api.nomadns.netDynDNS2 updates and ACME API, over IPv4 and IPv6
api4.nomadns.netsame routes, reachable over IPv4 only
api6.nomadns.netsame routes, reachable over IPv6 only
/ipon these three addresses: returns the connection’s IP address as plain text, without authentication

DynDNS2 update

One request per subdomain, authenticated with HTTP Basic using the token’s identifier and secret:

GET https://api.nomadns.net/nic/update?hostname=subdomain.nomadns.net&myip=203.0.113.7,2001:db8::7
Authorization: Basic base64(identifier:secret)

myip accepts an IPv4 address, an IPv6 address or both separated by a comma. Without myip, the connection’s address is used for its family and the other family is left unchanged. Only public addresses are accepted.

ReplyMeaning
goodaddress changed and published by the primary server
nochgsame address, nothing is changed
badauthidentifier or secret refused (HTTP 401)
notfqdnhostname missing or outside nomadns.net
nohostunknown subdomain, or not the token’s subdomain
numhostseveral names in hostname
abusesubdomain or account suspended, or limit exceeded
badagentmethod other than GET or POST
911service error or slower publication than expected (HTTP 503); an address change stays recorded and the retry gets nochg

Limits: 120 requests per hour per subdomain, 60 address changes per day per subdomain (including web changes, which always remain available), 10 authentication failures per 10 minutes per IP address.

Settings by client

ddclient and acme.sh were checked against the API; the OpenWrt and Fritz!⁠Box settings follow their documentation.

ddclient

protocol=dyndns2
server=api.nomadns.net
ssl=yes
usev4=webv4, webv4=https://api4.nomadns.net/ip
usev6=webv6, webv6=https://api6.nomadns.net/ip
login=identifier
password='secret'
subdomain.nomadns.net

OpenWrt (ddns-scripts)

config service 'nomadns_v4'
    option enabled '1'
    option lookup_host 'subdomain.nomadns.net'
    option domain 'subdomain.nomadns.net'
    option username 'identifier'
    option password 'secret'
    option update_url 'https://[USERNAME]:[PASSWORD]@api.nomadns.net/nic/update?hostname=[DOMAIN]&myip=[IP]'
    option use_https '1'
    option cacert '/etc/ssl/certs'
    option ip_source 'network'
    option ip_network 'wan'

Fritz!Box

IPv4 only: the IPv6 address a Fritz!⁠Box provides is its own, not the served machine’s.

URL : https://api.nomadns.net/nic/update?hostname=<domain>&myip=<ipaddr>
Domaine / Domain : subdomain.nomadns.net
Utilisateur / User : identifier
Mot de passe / Password : secret

acme.sh (DNS-01)

ACMEDNS_BASE_URL is required: without it, acme.sh sends the identifier and secret to the public auth.acme-dns.io service.

export ACMEDNS_BASE_URL=https://api.nomadns.net
export ACMEDNS_USERNAME=acme-identifier
export ACMEDNS_PASSWORD='secret'
export ACMEDNS_SUBDOMAIN=subdomain
acme.sh --issue --dns dns_acmedns -d subdomain.nomadns.net

Check the result

The subdomain page shows the “Served” state when all three name servers publish the address. From a terminal:

dig +short A subdomain.nomadns.net @ns1.nomadns.net
dig +short AAAA subdomain.nomadns.net @ns1.nomadns.net