UDDNS - Universal (or Ultimate) Dynamic DNS updater
You can either:
go install github.com/we11adam/uddns@latest
or download the binary for you platform directly from the releases page
Ceate a uddns.yaml file as one the following: ./uddns.yaml, ~/.config/uddns.yaml,
/etc/uddns.yaml. UDDNS will try to read them in order. Additionally, you can specify the configuration file path with the UDDNS_CONFIG environment variable.
The file should look like this:
providers:
routeros:
endpoint: https://192.168.88.1 # RouterOS API endpoint
username: admin # RouterOS user with API access
password: "" # RouterOS user password
ip_service:
- ifconfig.me # External service to get IP address
# If you use IP routing rules for specific traffic, ensure the domain used by ip_service is excluded.
updaters:
cloudflare:
email: "user@exmaple.com" # Cloudflare account email
apikey: fd25bdc03a4c17450aa4327aa37de4573270f # Cloudflare API key
domain: ddns.yourdomain.com # Domain to update
proxy: http://127.0.0.1:2080 # Optional
# lightdns: # Use LightDNS as the updater
# key: bgw99xiio5ewbphb
# domain: uddns.dyn.la
notifiers:
telegram:
chat_id: -1001234567890 # Telegram chat ID
token: 1234567890:E2AvwaQsEvkACAF9pVPZAICmbXuzzHFTyyv # Telegram bot token
proxy: http://127.0.0.1:2080Where:
providersis a list of providers that UDDNS can use to obtain the current public IP address. Currently supported providers are:routeros: Get IP address from a Mikrotik RouterOS deviceendpoint: The RouterOS API endpointusername: The RouterOS user with API accesspassword: The RouterOS user password
ip_service: Get IP address from an external serviceip.fmifconfig.meip.sb3322.org
netif: Get IP address from a network interface (not implemented for Windows yet)name: The network interface name to get the IP address from
updatersis a list of updaters that UDDNS can use to update the DNS records. Currently supported updaters are:cloudflare:email: Cloudflare account emailapikey: Cloudflare API keydomain: Domain to update, e.g.ddns.yourdomain.com
aliyun:accesskeyid: Aliyun access key IDaccesskeysecret: Aliyun access key secretdomain: Domain to update, e.g.ddns.yourdomain.comregionid: cn-hangzhou # Optional
duckdns:token: DuckDNS tokendomain: Domain to update, excluding theduckdns.orgpart.
ligthdns:key: LightDNS DDNS keydomain: Domain to update.
notifiersis a list of notifiers that UDDNS can use to notify the user of the IP address change. Currently supported notifiers are:telegram:token: Telegram bot tokenchat_id: Telegram chat IDproxy: Proxy URL to use for Telegram API requests if you are behind a (great) firewall. Optional.
Run the binary as the following. It will update the DNS record with the current public IP address with a default interval of 30 seconds, which can be overriden with the UDDNS_INTERVAL environment variable. The format for specifying the interval is flexible, allowing values such as 60s, 5m, 1h, etc.
nohup ./uddns > uddns.log 2>&1 &- Add more providers
- Add more updaters
- Add granular configuration options
- Add sensible logging
- Add tests
- Add CI/CD
- Add Dockerfile
- Add Daemon mode
- Add systemd service file
Pull requests are very welcome! For major changes, please open an issue first to discuss what you would like to change.
MIT