0.0
No commit activity in last 3 years
No release in over 3 years
Daemon to update an Amazon Route53 A record with a computer's dynamic IPv4 address.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

>= 2.10.9, ~> 2.10
 Project Readme

DynamicDNS

DynamicDNS is tool that queries your public IPv4 address periodically, and updates a specific A record in Amazon Route53 if this IP address changes.

This gem is useful as a command-line executable, and as a library.

Usage

The following usage examples will configure the daemon to run every 10 minutes, updating the hosted zone for foo.com in Route53 to have an A record that points ssh.foo.com to the computer's public IPv4 address. See the Configuration section below for more information on the environment variables used to configure the daemon.

Ensure you have installed this gem to use the command-line tool. You must have Ruby 2.4, or greater, installed.

$ gem install dynamic_dns

Command-line

# use environment variables to configure the daemon
# exit with Ctrl+c
$ DYNAMIC_DNS_DOMAIN=foo.com DYNAMIC_DNS_SUBDOMAIN=ssh DYNAMIC_DNS_INTERVAL=600 dynamic-dns

systemd Start-up Script

If you are using rvm with systemd, ensure that rvm was installed using sudo, then install this gem.

[Unit]
Description=DynamicDNS daemon

[Service]
Type=simple
Environment="GEM_HOME=/usr/local/rvm/gems/ruby-2.4.1"
Environment="GEM_PATH=/usr/local/rvm/gems/ruby-2.4.1:/usr/local/rvm/gems/ruby-2.4.1@global"
Environment="PATH=/usr/local/rvm/gems/ruby-2.4.1/bin:/usr/local/rvm/gems/ruby-2.4.1@global/bin:/usr/local/rvm/rubies/ruby-2.4.1/bin:$PATH"
Environment="AWS_ACCESS_KEY_ID=[REDACTED]"
Environment="AWS_SECRET_ACCESS_KEY=[REDACTED]"
Environment="DYNAMIC_DNS_DOMAIN=foo.com"
Environment="DYNAMIC_DNS_SUBDOMAIN=ssh"
Environment="DYNAMIC_DNS_INTERVAL=600"
ExecStart=/usr/local/rvm/gems/ruby-2.4.1/bin/dynamic-dns

[Install]
WantedBy=multi-user.target

Ruby

require 'dynamic-dns'

daemon = DynamicDns::Daemon.new "foo.com", "ssh", 600
daemon.start # runs the daemon and blocks the thread

Confirguation

It is possible to configure this daemon using environment variables.

Variable Required? Default Example Description
DYNAMIC_DNS_DOMAIN Y N/A foo.com This domain's hosted zone will be updated. It must already have an existing hosted zone in Route53 prior to running the daemon.
DYNAMIC_DNS_SUBDOMAIN Y N/A ssh The name of the A record that will point to the public IP address discovered by the daemon.
DYNAMIC_DNS_INTERVAL N 60 60 The interval in seconds that the daemon should query for the public IPv4 address.
AWS_ACCESS_KEY_ID Y N/A abc123 Your AWS access key ID. It must have permissions to manage Route53. This requirement is defined by the aws-sdk gem (link). An alternative method to providnig your AWS credentials is to create an ~/.aws/credentials file.
AWS_SECRET_ACCESS_KEY Y N/A abc123 Your AWS secret access key. See above for notes on AWS credentials.

Author

Dhruv Dang
hi@dhruv.io
dhruv.io