using gandi livedns as a Dynamic DNS server
Published:
That’s still working in 2021
To experiment with widely distributed systems, I administrate some rasberry pi zeros W scattered in France in residential homes. These systems are attached to residential gateways through Wifi with dynamic IP addresses and I needed a way to reliably connect to them to launch experiments.
In the nineties, I used a service called Dyndns, which offered a free service for updating subdomains with dynamic IPs. This free service no longer exists, so I started looking for an alternatives. Most of them were costly and required the installation of closed-sources update clients. Opensource alternatives such as hopper.pw required complicated installations and also a dedicated domain name.
Hopefully, I’ve been a loyal customer of Gandi for some years now, and thanks to the introduction their livedns API, it can be used to update my main dns zone through a REST API.
prerequisites: curl jq (apt-get install curl jq
)
# retreive current external IP address from Akamai server
MY_IP=$(curl -s http://whatismyip.akamai.com/)
# Gandi livedn API KEY
APIKEY="................."
# Static Domain hosted at Gandi
DOMAIN="nextnet.top"
# Dynamic Subdomain
SUBDOMAIN="pi3gre"
#Get the current Zone for the provided domain
CURRENT_ZONE_HREF=$(curl -s -H "X-Api-Key: $APIKEY" https://dns.api.gandi.net/api/v5/domains/$DOMAIN | jq -r '.zone_records_href')
# Update the A reccord of the Dynamic Subdomain by PUTing on the current zone
curl -D- -X PUT -H "Content-Type: application/json" \
-H "X-Api-Key: $APIKEY" \
-d "{\"rrset_name\": \"$SUBDOMAIN\",
\"rrset_type\": \"A\",
\"rrset_ttl\": 1200,
\"rrset_values\": [\"$MY_IP\"]}" \
$CURRENT_ZONE_HREF/$SUBDOMAIN/A