EdgeRouter Dynamic DNS Update for DNSMadeEasy
17 Jun 2018Ubiquiti EdgeRouters still don’t have built-in dynamic DNS (DDNS) support for DNSMadeEasy1 so I use the python client that they recommend2.
There’s limited space on most EdgeRouters, so don’t go installing pip; just grab the small number of libraries necessary and install them semi-manually.
-
Open ssh to the EdgeRouter.
- Add Debian sources.
configure set system package repository wheezy components 'main contrib non-free' set system package repository wheezy distribution wheezy set system package repository wheezy url http://http.us.debian.org/debian commit save
- Install python-setuptools.
sudo apt-get update && sudo apt-get install python-setuptools
- Grab the python code from https://github.com/wyrmiyu/ddns-tools/tree/master/dnsmadeeasy using
cd /config/user-data mkdir ddns cd ddns curl https://raw.githubusercontent.com/wyrmiyu/ddns-tools/master/dnsmadeeasy/update_ddns_dnsmadeeasy.py -o ddns.py curl https://raw.githubusercontent.com/wyrmiyu/ddns-tools/master/dnsmadeeasy/settings.json.sample -o settings.json
- Grab our dependencies. For each of these, download the source .tar.gz file, untar it and install.
- https://pypi.org/project/certifi/#files
- https://pypi.org/project/urllib3/#files
- https://pypi.org/project/idna/#files
- https://pypi.org/project/chardet/#files
- https://pypi.org/project/requests/#files
curl (blah.tar.gz) -o blah.tar.gz tar zxvf blah.tar.gz cd (somefolder) sudo python setup.py install cd .. sudo rm -rf (somefolder)
For example:
curl https://files.pythonhosted.org/packages/4d/9c/46e950a6f4d6b4be571ddcae21e7bc846fcbb88f1de3eff0f6dd0a6be55d/certifi-2018.4.16.tar.gz -o certifi.tar.gz curl https://files.pythonhosted.org/packages/3c/d2/dc5471622bd200db1cd9319e02e71bc655e9ea27b8e0ce65fc69de0dac15/urllib3-1.23.tar.gz -o urllib3.tar.gz curl https://files.pythonhosted.org/packages/65/c4/80f97e9c9628f3cac9b98bfca0402ede54e0563b56482e3e6e45c43c4935/idna-2.7.tar.gz -o idna.tar.gz curl https://files.pythonhosted.org/packages/fc/bb/a5768c230f9ddb03acc9ef3f0d4a3cf93462473795d18e9535498c8f929d/chardet-3.0.4.tar.gz -o chardet.tar.gz curl https://files.pythonhosted.org/packages/54/1f/782a5734931ddf2e1494e4cd615a51ff98e1879cbe9eecbdfeaf09aa75e9/requests-2.19.1.tar.gz -o requests.tar.gz
- One more dependency, which is a zip file.
- https://pypi.org/project/dnspython/#files
curl https://files.pythonhosted.org/packages/e4/96/a598fa35f8a625bc39fed50cdbe3fd8a52ef215ef8475c17cabade6656cb/dnspython-1.15.0.zip -o dnspython.zip sudo apt-get install unzip unzip dnspython.zip cd (somefolder) sudo python setup.py install sudo apt-get remove unzip
- https://pypi.org/project/dnspython/#files
- Using your favourite editor, modify settings.json and complete all fields.
cd /config/user-data/ddns vi settings.json
- Test run and confirm it updates without error.
/usr/bin/python /config/user-data/ddns/ddns.py
- Cleanup python-setuptools
sudo apt-get remove python-setuptools
- Add it to your crontab. I’m assuming a TTL of 600 (10 minutes) for your DNS entry, so set this script to run every 10 minutes.
crontab -e */10 * * * * /usr/bin/python /config/user-data/ddns/ddns.py