mythic-dns-sync v3.2 [09 Nov 2023] by Dominic
Description
Compare local machine's current external ip address with the DNS records pointing to it on the specified domain's Mythic Beasts nameservers, then use curl to fix latter if different. Also compare local machine's external reverse DNS with its internal FQDN (in /etc/hosts) and update latter if different. Also if (but only if) the previous internal FQDN is hard-coded as myhostname in Postfix's main.cf, update it there too.
Requires ability to login at mythic-beasts.com with the DNS password set up there. Makes use of their DNS APIv1 (which must be enabled per domain) - see https://www.mythic-beasts.com/support/api/primary.
Intended for running as regular cron job on a machine with dynamic external ip whose DNS records - held on the Mythic Beast nameservers - and local FQDN need to be kept accurate - such as a (Postfix) mail server.
For a DNS subdomain which resolves to more than one ip address (one of which is the local machine's ip), ensure that it is preceded on the SUBDOMAINS= line by a subdomain which *is* unique to this ip address. mythic-dns-sync.sh will attempt to identify the correct entry to alter based on a modified IP found in the preceding entry.
Note that, unless run with quiet option, conf file settings (see below) are shown on stdout, except the password (PASS=).
Exit Codes
0 - no changes needed, all is ok
1 - there was a problem and/or failed to make all required changes
2 - made some changes successfully
Conffile
mythic-dns-sync.sh requires a conf file (see options) which must contain 3 or 4 definitions:
DOMAIN="[put your DNS domain here]"
SUBDOMAINS="[put one or more subdomain names here, space-separated]"
PASS="[put your DNS password here]"
TTL="[put your TTL value here]" (this entry is optional - default value is 3600)
For example -
SUBDOMAINS="vps32 mail1"
PASS="ajfdfjsdk"
Options
-c [conffile] - use the named conffile instead of the default (which is mythic-dns-sync-[hostname].conf in the same directory as mythic-dns-sync.sh)
-f - force mode, update records even if no changes seem to be required
-h - show this help and exit
-l - show changelog and exit
-q - be quiet unless ip mismatch is found or there is a problem
-r - actually make changes (not just testing)
Dependency
curl
License
Copyright © 2024 Dominic Raferd. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at https://www.apache.org/licenses/LICENSE-2.0. Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Changelog
3.2 [09 Nov 2023]: use mythic APIv1 for all original lookup, not dig, more shellcheck compliance
3.1 [27 Oct 2023]: small changes to the Description text
3.0 [09 Oct 2023]: added output of start date/time
2.9 [23 Jun 2022]: do not abort if unable to obtain reverse DNS of external ip
2.8 [18 Jun 2022]: minor bugfix
2.7 [14 Oct 2020]: also look up nameservers
2.6 [09 Aug 2020]: exit silently if there is no internet connection
2.5 [05 Jun 2020]: minor text layout update
2.4 [17 Feb 2020]: abort if unable to obtain reverse DNS of external ip
2.3 [28 Nov 2019]: very small bugfix to text output
2.2 [25 Sep 2019]: small bugfix to text output
2.1 [05 Sep 2019]: add -r option, runs in test mode by default, improved text output
2.0 [28 Jun 2019]: small change to error report
1.9 [02 Jun 2019]: show conf file info (unless quiet), text output layout improvements
1.8 [03 Apr 2018]: bugfix - exit code 2 was being given if unable to obtain external ip - changed to 1
1.7 [29 Jan 2018]: text (to stderr) in quiet mode if an ip is changed on $NAMESERVER
1.6 [18 Jan 2018]: minor exit code fix
1.5 [14 Jan 2018]: added exit code 2, also update main.cf myhostname
1.4 [12 Jan 2018]: text updates
1.3 [07 Jan 2018]: wait for Mythic Beasts DNS to update
1.2 [01 Jan 2018]: minor text changes
1.1 [29 Dec 2017]: minor changes, trying to bugfix
1.0 [19 Sep 2017]: allow checking/modification where a DNS name resolves to more than one ip (including this one)
0.9 [18 Aug 2017]: adapted from 123-dns-sync.sh to work for Mythic Beasts, allow @ as subdomain
0.8 [06 Jan 2017]: minor tweak to text output if there is a problem
0.7 [04 Dec 2016]: make generic, rename from r...-c......-ip-updated.sh to 123-dns-sync.sh
0.6 [28 Nov 2016]: add test for internal fqdn vs reversedns, rename from r...-c......ip-notify.sh to r...-c......-ip-updated.sh
0.5 [31 Oct 2016]: add test for valid ip
0.4 [16 Oct 2016]: retrieve current ip from opendns.com by default, fall back to log entry by noip2 script
0.3 [24 May 2016]: retrieve ips from authoritative nameservers not cache
0.2 [20 May 2016]: add use of $FIXERPROG and option -t
0.1 [14 Apr 2016]: first version
Download mythic-dns-sync.sh
Donation
I have provided this software free gratis and for nothing. If you would like to thank me with a contribution, please let me know and I will send you a link. Thank you!
My Other Sites
- TimeDicer - Onsite/offsite data backup for Windows (uses rdiff-backup)
- Finding a 4D Backup Solution
- Web Scraping How To - extracting data from web sites
My Programs
Here is a selection of some (other) programs I have written, most of which run under GNU/Linux from the command line (CLI), are freely available and can be obtained by clicking on the links. Dependencies are shown and while in most cases written and tested on an x86-based Linux server, they should run on a Raspberry Pi, and many can run under Windows using Windows Subsystem for Linux (WSL) or Cygwin. Email me if you have problems or questions, or if you think I could help with a programming requirement.
Backup Utilities
- TimeDicer - Onsite/offsite data backup for Windows (uses rdiff-backup) [ GNU/Linux & MS Windows©: 2008-20 ]
- rdiff-backup-regress - GNU/Linux script to regress an rdiff-backup archive. [ GNU/Linux: 2012-24 ]
Debian/Ubuntu kernel and LVM Utilities
- kernel-remove - GNU/Linux script to list the installed GNU/Linux kernels in a Debian-based distro (e.g. Ubuntu), and can be used to remove an unwanted kernel and related packages, updating grub appropriately. [ GNU/Linux-Debian/Ubuntu: 2010-24 ]
- lvm-usage - GNU/Linux script to show available disk space and how it is used; run as cron job to warn if usage is above a set percentage. Provides additional information if LVM is in use. [ GNU/Linux: 2012-24 ]
- lvm-delete-snapshot - GNU/Linux script to remove LVM snapshot that has been left over by another process. [ GNU/Linux: 2012-21 ]
- netnames - GNU/Linux script shows current name, biosdevname and 'predictable name' of network device - helps with network device name scheme migration. [ GNU/Linux-Debian/Ubuntu: 2020-20 ]
- lv-convert2cache - GNU/Linux script to convert an existing LV into a cache LV using a smaller faster device as a cache. [ GNU/Linux: 2022-24 ]
Miscellaneous Programs
- sleepwalker - Windows© program which can be run from a remote machine to 'wake up' a Windows© machine behind a router, wait for it to start and then initiate Remote Desktop session. [MS Windows©: 2008-22]
- numliststat - GNU/Linux program giving statistical value(s) for a piped-in list of numbers. [ GNU/Linux: 2022-24 ]
- relay-enforcer - GNU/Linux program enabling a postfix-based mail server relaying to Gmail to act on reports from Gmail about blocked emails. [ GNU/Linux: 2016-24 ]
- pdf-compress - GNU/Linux program to create smaller b/w pdf file from an original large pdf file, especially when original resulted from scanning. [ GNU/Linux: 2016-24 ]
- tiny-device-monitor - GNU/Linux program to test webpages (including password-protected) or machines to check they are live; use as a cron job for your own websites, for hardware presenting a webpage, or for any machines with a presence on your local LAN or on the internet. [ GNU/Linux: 2009-24 ]
- form-extractor - GNU/Linux program to extract form tags from a web page or downloaded file. [ GNU/Linux: 2012-24 ]
- saynoto0870 - For UK, a GNU/Linux script which performs automated lookup of the www.saynoto0870.com database, finding cheap or free geographic number replacements for expensive non-geographic (087* or 084*) numbers. [ GNU/Linux: 2012-12 ]
- bind9-resolved-switch - GNU/Linux program for switching permanently between using bind9 or systemd-resolved as the system DNS resolver. [ GNU/Linux: 2016-24 ]
- unlock - GNU/Linux remote program for easy entering of decrypt passphrase on a remote machine which has root dm-crypt+LUKS. [ GNU/Linux: 2017-18 ]
- wifi-updown - GNU/Linux program to take down wifi interface if there is a working wired interface (or restore wifi if not). [ GNU/Linux: 2018-23 ]
- routefix - GNU/Linux program to restore a default ip traffic route if there is none such (e.g. after running wifi-updown). [ GNU/Linux: 2018-23 ]
- dutree - GNU/Linux program to show a tree-style list of files and directories at the specified location which are greater than the specified size (default 1GB). [ GNU/Linux: 2012-24 ]
- Accounts - Multi-business multi-currency accounting software, uses Access [MS Windows©: 1996-2024]
- Rents Program - Residential lettings/landlord front office program, with many special features for UK market [MS Windows©: 1991-2024]
This section is closed. If you have a question, please submit it by email, thank you.