45 lines
1.5 KiB
Bash
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 |