gandi-dynamic-dns/usr/local/bin/live-dns-update.sh

96 lines
2.8 KiB
Bash
Executable File

#!/bin/bash
#
# Updates DNS zone records using Gandi's LiveDNS API.
# Before you use this script you need to configure record details and API key in
# the file `/etc/live-dns/live-dns.conf`
#
# This script is meant to be run by cron.
# through a crontab placed in /etc/cron.d/live-dns-update
#
# This script is based on the sample provided here :
# https://github.com/Gandi/api-examples/blob/master/bash/livedns/mywanip.sh
#
# Include configuration file
source /etc/live-dns/live-dns.conf
#echo Domain : $DOMAIN
#echo Record : $RECORD
#echo APIKey : $APIKEY
API="https://dns.api.gandi.net/api/v5/"
IP_SERVICE="http://me.gandi.net"
# Get WAN IP as seend from outside
WAN_IP4=$(curl -s4 $IP_SERVICE)
WAN_IP6=$(curl -s6 $IP_SERVICE)
echo WAN IPv4 : $WAN_IP4 | logger
echo WAN IPv6 : $WAN_IP6 | logger
if [[ -z "$WAN_IP4" && -z "$WAN_IP6" ]]; then
echo "Something went wrong. Can not get your IP from $IP_SERVICE " | logger
exit 1
fi
# Get IP from DNS
if [[ ! -z "$RECORD" ]]
then
DNS_IP4=$(dig +short @ns1.gandi.net -t A $RECORD.$DOMAIN)
DNS_IP6=$(dig +short @ns1.gandi.net -t AAAA $RECORD.$DOMAIN)
else
DNS_IP4=$(dig +short @ns1.gandi.net -t A $DOMAIN)
DNS_IP6=$(dig +short @ns1.gandi.net -t AAAA $DOMAIN)
fi
echo DNS IPv4 : $DNS_IP4 | logger
echo DNS IPv6 : $DNS_IP6 | logger
# Update IPV4 DNS record if IP adresses mismatch
if [[ ! -z "$WAN_IP4" ]]; then
if [[ "$WAN_IP4" != "$DNS_IP4" ]]
then
echo Updating IPv4 DNS records for $RECORD.$DOMAIN | logger
DATA='{"rrset_values": ["'$WAN_IP4'"]}'
if [[ ! -z "$RECORD" ]]
then
IP4_RES=$(curl -s -XPUT -d "$DATA" \
-H"X-Api-Key: $APIKEY" \
-H"Content-Type: application/json" \
"$API/domains/$DOMAIN/records/$RECORD/A" 2>&1)
else
IP4_RES=$(curl -s -XPUT -d "$DATA" \
-H"X-Api-Key: $APIKEY" \
-H"Content-Type: application/json" \
"$API/domains/$DOMAIN/records/@/A" 2>&1)
fi
echo Update of IPv4 DNS record : $IP4_RES | logger
else
echo No need to update IPv4 DNS record for $RECORD.$DOMAIN | logger
fi
fi
# Update IPV6 DNS record if IP adresses mismatch
if [[ ! -z "$WAN_IP6" ]]; then
if [[ "$WAN_IP6" != "$DNS_IP6" ]]
then
echo Updating IPv6 DNS records for $RECORD.$DOMAIN | logger
DATA='{"rrset_values": ["'$WAN_IP6'"]}'
if [[ ! -z "$RECORD" ]]
then
IP6_RES=$(curl -s -XPUT -d "$DATA" \
-H"X-Api-Key: $APIKEY" \
-H"Content-Type: application/json" \
"$API/domains/$DOMAIN/records/$RECORD/AAAA" 2>&1)
else
IP6_RES=$(curl -s -XPUT -d "$DATA" \
-H"X-Api-Key: $APIKEY" \
-H"Content-Type: application/json" \
"$API/domains/$DOMAIN/records/@/AAAA" 2>&1)
fi
echo Update of IPv6 DNS record : $IP6_RES | logger
else
echo No need to update IPv6 DNS record for $RECORD.$DOMAIN | logger
fi
fi