Files
BashDDNS/ipupdater
2026-03-11 18:09:56 +00:00

45 lines
1.5 KiB
Bash

#!/bin/bash
homeip=/home/jaileduser/nginx/homeip
recordip=/home/jaileduser/nginx/recordip
#define where you want the bashddns log to live
bashddnslog=/var/log/bashddns.log
changetime() {
local newip=$(cat "$homeip")
#here i use @ because i want to update the root of my domain and a TTL of 3600 (standard for A records)
pdnsutil replace-rrset yourdomain.name @ A 3600 "$newip"
#increasing the serial number in the SOA so the slave nameserver is notified of changes to the domain
pdnsutil increase-serial yourdomain.name
#updating the record ip file with the new ip
cat "$homeip" > "$recordip"
#the following last line is optional
#it uses ssmtp to send an email notification when changes to the A record are made
#ssmtp or any other command line compatible mail sending utility will work
echo -e "Subject: domain.name updated A record\nYour home ip has changed!" | ssmtp mail@site.name
}
#though we made sure on the nginx server not to send the file if it was empty
#we will implement a double check here for redundancy
#only run the following *if* homeip is not empty
if ! [ -z "$(cat "$homeip")" ] ; then
#if homeip/recordip files are the same do nothing, else run changetime
#log all actions to a centralized file for auditing
diff "$homeip" "$recordip" && \
echo "A record matches homeip at $(date -u) no action taken" >> "$bashddnslog" \
&& exit 0 \
|| changetime && echo "changed A record at $(date -u) to "$(cat "$recordip")"" >> "$bashddnslog"
else
echo "no action taken due to homeip file being empty at $(date -u)" >> "$bashddnslog"
fi