{"id":25181795,"url":"https://github.com/glocktober/setmy53dns","last_synced_at":"2026-02-25T18:04:41.421Z","repository":{"id":57465947,"uuid":"461350884","full_name":"Glocktober/setmy53dns","owner":"Glocktober","description":"Automatically updates a Route53 A or AAA record for use on reboot or waken from hibernation","archived":false,"fork":false,"pushed_at":"2024-12-26T03:40:02.000Z","size":9,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-13T22:09:01.519Z","etag":null,"topics":["aws","aws-route53","command-line-tool","dns","python3","route53","spf"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Glocktober.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-20T00:54:00.000Z","updated_at":"2024-12-28T18:46:16.000Z","dependencies_parsed_at":"2025-02-09T17:40:29.259Z","dependency_job_id":null,"html_url":"https://github.com/Glocktober/setmy53dns","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glocktober%2Fsetmy53dns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glocktober%2Fsetmy53dns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glocktober%2Fsetmy53dns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Glocktober%2Fsetmy53dns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Glocktober","download_url":"https://codeload.github.com/Glocktober/setmy53dns/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252846418,"owners_count":21813424,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-route53","command-line-tool","dns","python3","route53","spf"],"created_at":"2025-02-09T17:28:10.787Z","updated_at":"2025-10-29T21:49:59.899Z","avatar_url":"https://github.com/Glocktober.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n## setmy53dns - DNS updates for Route53\n\nThe scenerio exists where a servers public (external) IP address can change over time.  This is especially true with cloud computing.  \n\nThis program can be used to update Route53 public zone records automatically when a server reboots or returns from hibernation, and can be used both in the cloud and on-prem if needed.\n\n### Limitations\n`setmy53dns` will update ***existing*** DNS records - the records must ***already exist*** in your Route53 zone. \n\n`setmy53dns` doesn't create or remove records.  \n\nThis is by design to prevent things from going wrong.\n\n`setmy53dns` updates **A** and **AAAA** DNS records; other records are not supported.\n\n## setmy53dns Command Usage and Options\nAfter configuring `setmy53dns` is simple to use and in most instances does not require any special switchs.\n```bash\n % setmy53dns \n```\nThis will **automatically** find your public IP address and update the dns zone record based on the *fully qualifed domain name* (fqdn) of your computer.\n\nIn a more complex configuration you can use a different name or multiple ip address.\n```bash\n % setmy53dns --fqdn first.example.com\n % setmy53dns --fqdn second.example.com -ip 100.100.22.23\n```\nA list of all availabe options:\n```\n% setmy53dns --help\nusage: setmy53dns [-h] [-v] [-ip IP] [-fqdn FQDN] [-q] [-z ZONE] [-6]\n\nUpdate Route53 IP record\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -v, --version         show program's version number and exit\n  -ip IP, --ip IP       set specific IP address to use\n  -fqdn FQDN, --fqdn FQDN\n                        Fully Qualified Domain Name (rkmbp.sunyocc.edu)\n  -q, --query           Query only - no updates are made\n  -z ZONE, --zone ZONE  Route53 Zone to update (optional)\n  -6                    Update AAAA record (default is A record)\n\nsetmy53dns gunville 2025 v2\n```\n#### Automatic IP detection:\n\nBy default `setmyip` automatically detects the public IP address by sending an HTTP request to [ipv4.icanhazip.com](http://ipv4.icanhazip.com). This site returns the IPv4 address of the sender.\n\nYou can optionally use a different site to autodetect the public ip by setting the environment variable `IPAPIURL` to that URL:\n```bash\n% IPAPIURL='http://api.ipify.org'\n% setmy53dns\n```\nWhen ipv6 is selected with the `-6` switch automatic detection uses the ipv6 stack.  [ipv6.icanhazip.com](http://ipv6.icanhazip.com). This can be overriden with the environment variable `IPV6APIURL`.\n\nIf your host has multiple ip addresses or uses a proxy for web requests you will need to provide the ip address to use with the `--ip IP` command line switch.\n\n```bash\n% setmy53dns --ip 100.123.4.56\n% setmy53dns -6 --ip 2600:1f16:a44:1701:1be3:f8b7:aa51:410b \n```\n\n#### Automatic Hostname Determination:\n\nThe fqdn of the host is acquired with the Python `socket.gethostname()` function. (Several solutions were tried, none worked perfect, but this one seems to work best.)\n\nThere are some limitations to hostname determination:\n* Some systems are not configured to provide the fqdn (*web01.example.com*) and provide only the short hostname (*web01*). There is no elegant and simple solution that works on all platforms and configurations. \n\n* In some environments the hostname on the private side (e.g. web01.local) is not the same one used on the public side (web01.example.com).\n\n* Likewise, cloud VPCs by default provide hostnames in a similar fashion (e.g. *ip-172-31-84-22.ec2.internal*)\n\nIn these cases you will be required to provide the full fqdn with the `--fqdn FQDN` switch.\n```bash\n% setmy53dns --fqdn web01.example.com \n```\n\n#### Route53 Zone selection:\n\nThe Route53 zone is selected from the FQDN, but can also explicity provided with the `--zone ZONE` switch.\n\nIf the `--zone` switch is used the the zone does not match the hostname determined above, the fqdn is constructed by appending the zone.\n```bash\n% hostname\nserver1\n% setmy53dns --fqdn server1.example.com        # server1.example.com\n% setmy53dns --fqdn server1 --zone example.com # server1.example.com\n% setmy53dns --zone eample.com                 # server1.example.com\n```\n\nThe above are identical. Note that the `fqdn` does not have to be 'fully qualified' when the `--zone` switch is used.\n\n#### IPv6 Support\n\nBoth ipv4 **A** and ipv6 **AAAA** DNS records are supported by `setmy53dns`.  To update ipv6 records the `-6` switch is used - and required.\n\n```bash\n% setmy53dns -6\n```\n\n# Installation and Configuration\n`setmy53dns` is easily installed using `pip`\n```bash\n% pip install setmy53dns\n```\n\n#### AWS Credentials\n\n* The AWS user or role used for `setmy53dns` must have these permissions to make updates:\n    * `route53:ListHostedZones` to Route53\n    * `route:53ChangeResourceRecordSets` and `route53:ListResourceRecordSets` to the zones that will be updated.\n    * with IAM the smallest resource scope to assign privileges is a zone.\n* For EC2 instances privileges can be granted with a role attached to an EC2 instance.\n* Otherwise they are provided with an AWS credentials file containing API keys to an account that has these privileges granted. (though environment variables can be used.)\n\n#### Configuring `setmy53dns` to Run On Reboots (optional)\n\nThe following `crontab` entry will run `setmy53dns` each time the server reboots. \n```\n@reboot /usr/local/bin/setmy53dns\n```\nThe actual path depends on where you install `setmy53dns`\n\n#### Configuring `setmy53dns` To Run Post Hibernation (optional)\nThis may differ some depending on the operating system. This example here works with RedHat flavors.\n* Create the following file in `/lib/systemd/system-sleep/`\n* Add these contents of the file \n* Set the file to be excutable\n\n```bash\n% sudo touch /lib/systemd/system-sleep/20_cfdns\n% sudo chomd +x /lib/systemd/system-sleep/20_cfdns\n% cat \u003e /lib/systemd/system-sleep/20_cfdns \u003c\u003cEOF\n#!/usr/bin/env bash\naction=\"$1/$2\"\ncase \"$action\" in\n   pre/hibernate)\n   ;;\n   post/hibernate)\n\t/usr/local/bin/setmy53dns\n   ;;\nesac\nEOF\n```\nThe actual path depends on where you install `setmy53dns`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglocktober%2Fsetmy53dns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglocktober%2Fsetmy53dns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglocktober%2Fsetmy53dns/lists"}