AWS Route53 DDNS client for multiple/wildcard domains (rev. proxy), docker secrets & health webhooks
2.3K
Please see:
Currently supports AMD64 (developed on windows and the Synology DS918+ NAS), ARM32 V7 (armhf) (suitable for running on docker under Raspberry PI 32-bit OS) & ARM64 (ARM64V8) (suitable for running on docker under Raspberry PI with a 64-bit OS such as Raspberry PI OS 64-bit and Ubuntu 64-bit)
| Architecture | Tag |
|---|---|
| AMD64 | latest-amd64 For PC and Synology DSM |
| ARM32V7 (armhf 32-bit) | latest-arm32v7 For Raspberry PI with a 32-bit OS |
| ARM64V8 (ARM64) | arm64v8-latest. For Raspberry PI with a 64-bit OS (RaspberryPI OS 64-bit or Ubuntu 64-bit |
| Date | Version | Notes |
|---|---|---|
| 27/06/2023 | 2.2.1.0 |
|
| 15/10/2022 | 2.1.0.0 |
|
| 03/06/2022 | 2.0.0.3 |
|
| 8/7/21 | 2.0.0.2 |
|
Please see this note: https://docs.linuxserver.io/faq#libseccomp
If you wish to use the ARM32V7 image on a 32-bit Raspberry PI OS you have 2 options:
This should instantly fix this, and any other "funnies" you are having with docker containers.
The following steps should be taken when setting up this container:
A text file named AWS_Route53_DDNS.ini should be created in the /config mapped directory. This sets all the options for the program.
The log file is created in the same directory with the name AWS_Route53_DDNS.log and this file will rotate when it reaches 100KB with up to 5 logs named AWS_Route53_DDNS.log.1, AWS_Route53_DDNS.log.2 etc.
[Domains]
yourdomain.com = home.yourdomain.com
yourdomain.eu = yourdomain.eu
yourdomain.click = yourdomain.click
[Credentials]
; See notes below on the four methods of providing credentials
;AWS_Access_Key_ID = AAAAAAAAAAAAAAAAAAAAAA
;AWS_Secret_Access_Key = BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
;AWS_Credential_Profile = route53_user
;
[Defaults]
Update_Interval = 3600
Exception_Interval = 300
; Log_Level options are: Debug Info Warning Error Critical
Log_Level_Logfile = Info
Log_Level_Console = Warning
TTL = 3211
Sleep_Time_Initial_Authorisation = 1
Sleep_Time_Inter_Domain = 1
WebHook_Alive = 'HTTP://x.x.x.x/aaaaaaaaa'
WebHook_Alive1 = 'HTTP://x.x.x.x/aaaaaaaaa'
WebHook_Alive2 = 'HTTP://x.x.x.x/aaaaaaaaa'
WebHook_Alert = 'HTTP://x.x.x.x/aaaaaaaaa'
WebHook_Alert1 = 'HTTP://x.x.x.x/aaaaaaaaa'
Please note, a configuration issue resulting in any domain record having an issue updating will cause the docker container to be be marked as unhealthy. Be mindful of this if your system is set to restart a container that marks itself as unhealthy since the solution may be to check the log and find any logical issues in the AWS configuration which might have caused this state rather than just restarting the container.
The parameters for the configuration file are as follows.
| Parameter | Status | Default | Function |
|---|---|---|---|
| [Domains] Section | Required | Any (resonable) number of lines can be included here. | |
| Hosted zone name | The text name of the hosted zone (also called the domain name) without the trailing dot '.' that is often used to demark them. | ||
| Record name | This is the value for the corrosponding hosted zone (domain) name. See below for options on this. | ||
| [Defaults] Section | Optional | ||
| Update_Interval | Optional | 3600 | The interval between checking the external IP to see if the address has changed. |
| Exception_Interval | Optional | Update_Interval value | The checking interval after an error in obtaining the external IP or in obtailing the AWS hosted domain connection. You may wish to set this value lower than the usual update interval to resume correct mapping after a disruption to the IP address. |
| Log_Level_Logfile | Optional | Warning | Sets the detail and level for the file stored in the /config mapping |
| Log_Level_Console | Optional | Error | Sets the detail and level for the console (docker log) |
| Logging levels options are :- Critical Error Warning Info Debug | |||
| TTL | Optional | 3600 | The time-to-live value for your entries in seconds. 1-2 hours is usual, less than 5 minutes is not recomended. Values below 60 are ignored and set to 60 seconds. |
| Sleep_Time_Initial_Authorisation | Optional | 1 | The time to pause before first domain changes after start up. Not normally required |
| Sleep_Time_Inter_Domain | Optional | 1 | The time to pause between consecutive domain interrogations. Not normally required |
| WebHook_Alive WebHook_Alive1 WebHook_Alive2 . WebHook_Alive9 | Optional | - | Each given entry is called when the update of all records was successful. There can be up to 10 entries, starting with WebHook_Alive, then WebHook_Alive1 and so on until WebHook_Alive9. Entries need not be contiguous and so can be commented out as required. |
| WebHook_Alert WebHook_Alert1 WebHook_Alert2 . WebHook_Alert9 | Optional | - | Each given entry is called when the update of any record was unsuccessful. There can be up to 10 entries, starting with WebHook_Alert, then WebHook_Alert1 and so on until WebHook_Alert9. Entries need not be contiguous and so can be commented out as required. |
| [Credentials] | Optional | - | Only required as below. |
| AWS_Access_Key_ID AWS_Secret_Access_Key | Optional | - | The second option for providing AWS credentials. (See below) |
| AWS_Credential_Profile | Optional | - | Use only when using the AWS credentials file option for providing AWS credentials. |
The example file above shows two main options for configuring an address. The first updates a specific A record in the hosted domain so that home.yourdomain.com is given the external IP address. This is the most simple case and you must create an A-Record with the name home.yourdomain.com in AWS before it can be updated.
The second and third lines show a more flexible option that would allow you to create multiple sub-domain mappings to resources within your network using reverse proxy. To make this work you must create an A-Record within you hosted zone (domain) called yourdomain.click and then a second A-Record called *.yourdomain.click that has a value of yourdomain.click. This will cause any DNS request for sub-domains of this address such as voip.yourdomain.click or sonarr.yourdomain.click to be mapped through to the IP address set up in the yourdomain.click A-Record.
The AWS authorisation credentials can be provided in one of 4 methods.
This method is the easiest to get started. It does mean the credentials could be exposed through backups or to users who have access to change the setup however.
This is also quick and easy but has the draw back that anyone with access to the docker system via a management tool such as Portainer can access the credentials.
This is the most secure method of providing credentials.
This method is ideal if you want to have a single file with multiple credentials that is shared between multiple applications such as S3 or SES services. Use the AWS_Credential_Profile to target the correct profile.
Note In line with the principles of docker secrets the contents of the files should be just the string that forms the key or secret. The app will perform minor cleaning of the contents to remove white space and superfluous returns/line feeds however.
Create you container locally by either:
docker run -d \
--name AWS_Route53_DDNS \
-v /path/to/config:/config \
-e AWS_ACCESS_KEY_ID=your-access-ID \
-e AWS_SECRET_ACCESS_KEY=your-key-secret \
-e TZ=Europe/London \
--restart unless-stopped
kronos443/aws-route53-ddns
docker run -d \
--name AWS_Route53_DDNS \
-v /path/to/config:/config \
-e AWS_ACCESS_KEY_ID_FILE=/run/secrets/aws-access-key-id \
-e AWS_SECRET_ACCESS_KEY_FILE=/run/secrets/aws-secret-access-key \
-e TZ=Europe/London \
--restart unless-stopped
kronos443/aws-route53-ddns
---
version: "2.1"
services:
aws-route53-ddns:
image: kronos443/aws-route53-ddns:amd64-latest
container_name: AWS_Route53_DDNS
environment:
- TZ=Europe/London
volumes:
- /path/to/config:/config
restart: unless-stopped
---
version: "2.1"
services:
aws-route53-ddns:
image: kronos443/aws-route53-ddns:amd64-latest
container_name: AWS_Route53_DDNS
environment:
- TZ=Europe/London
- AWS_ACCESS_KEY_ID=your-access-ID
- AWS_SECRET_ACCESS_KEY=your-key-secret
volumes:
- /path/to/config:/config
restart: unless-stopped
---
version: "2.1"
services:
aws-route53-ddns:
image: kronos443/aws-route53-ddns:amd64-latest
container_name: AWS_Route53_DDNS
environment:
- TZ=Europe/London
- AWS_ACCESS_KEY_ID_FILE=/run/secrets/your-access-id-file
- AWS_SECRET_ACCESS_KEY_FILE=/run/secrets/your-key-secret-file
volumes:
- /path/to/config:/config
restart: unless-stopped
To run the container on a Synology NAS:
The parameters are described below.
| Parameter | Function |
|---|---|
| -v /path/to/config:/config | The directory on your host that is shared with the container. Place your AWS_Route53_DDNS.ini file here. Log files will also be written here. |
| -e AWS_ACCESS_KEY_ID=your-access-ID | The access key string generated by you on AWS IAM |
| -e AWS_SECRET_ACCESS_KEY=your-key-secret | The secret code for the ID, generated by you on AWS IAM |
| -e AWS_ACCESS_KEY_ID_FILE=/run/secrets/your-access-id-file | The docker secrets file containing access key string generated by you on AWS IAM |
| -e AWS_SECRET_ACCESS_KEY_FILE=/run/secrets/your-key-secret-file | The docker secrets file containing the secret code for the ID, generated by you on AWS IAM |
| TZ=Europe/London | Time zone, e.g. Europe/London optional but means the log times will be in the local timezone rather than UT |
If you find this container useful then please consider buying me a coffee by following this link or scanning the QR below. :)
Content type
Image
Digest
sha256:32f3848a2…
Size
34.6 MB
Last updated
about 3 years ago
docker pull kronos443/aws-route53-ddns