mirror of
https://github.com/fernwerker/ownDynDNS.git
synced 2025-07-10 22:25:13 +02:00
118 lines
6.1 KiB
Markdown
118 lines
6.1 KiB
Markdown
# ownDynDNS
|
|
Self-hosted dynamic DNS php script to update netcup DNS API from Router like AVM FRITZ!Box
|
|
|
|
## Authors
|
|
* Felix Kretschmer [@fernwerker](https://github.com/fernwerker)
|
|
* Philipp Tempel [@philipptempel](https://github.com/philipptempel)
|
|
* Branko Wilhelm [@b2un0](https://github.com/b2un0)
|
|
* Nils Blume [@niiwiicamo](https://github.com/niiwiicamo)
|
|
|
|
## Usage
|
|
### Installation
|
|
* Copy all files to your webspace
|
|
* create a copy of `.env.dist` as `.env` and configure:
|
|
* `username` -> The username for your Router to authenticate (so not everyone can update your DNS)
|
|
* `password` -> password for your Router
|
|
* `apiKey` -> API key which is generated in netcup CCP
|
|
* `apiPassword` -> API password which is generated in netcup CCP
|
|
* `customerId` -> your netcup Customer ID
|
|
* `log` -> true|false enables logging
|
|
* `logFile` -> configures logfile location if enabled
|
|
* `debug` -> true|false enables debug mode and generates more output from update.php (normal operation has no output). Needed to receive stack traces from errors.
|
|
* `returnIp` -> true|false enables return of result if a record was changed
|
|
|
|
* alternatively you can use .configure.sh to create your .env file for you (if you are on a *NIX system)
|
|
|
|
* Create each host record in your netcup CCP (DNS settings) before using the script. The script does not create any missing records.
|
|
|
|
|
|
## URL possible uses:
|
|
### Required parameters in URL:
|
|
|
|
<b>user, password and domain</b> are <i> always needed</i>, as well as at least one of the following: <br>
|
|
<b>ipv4, ipv6, txt</b>
|
|
|
|
|
|
Parameter | Example | Explanation
|
|
---: | :--- | :---
|
|
user | dnsupdater | username to authenticate against this script as defined in .env file
|
|
password | secretpleasechange |password for that user as defined in .env file
|
|
domain | home.example.com | `case A)` If `host` is not specified: the FQDN for your host
|
|
domain | example.com | `case B)` If you want to update the @ or * record
|
|
domain | example.com | `case C)` If `host`is specified: only the domain part as registered at netcup "nas.home.example.com"
|
|
host | nas.home | `case C)` If your domain contains more than 3 levels "nas.home.example.com"
|
|
ipv4 | 1.2.3.4 | the ipv4 address to update an existing A record
|
|
ipv6 | fe80::12:34:56 | the ipv6 address to update an existing AAAA record
|
|
txt | acme-challenge-text | the content to update an existing TXT record
|
|
force | true | ignore checking if the record needs to be updated, just do it anyways. Default: `false`
|
|
mode | * | `case B)` If domain is your registered domain "example.com". Possible values: `*` or `both`. Default: `@`
|
|
|
|
|
|
|
|
#### Example URL to update A record (IPv4) of home.example.com:
|
|
https://`dyndns.example.com`/update.php?user=`username`&password=`password`&domain=`home.example.com`&ipv4=`IPv4`
|
|
|
|
#### Example URL to force update AAAA record (IPv6) of example.com:
|
|
https://`dyndns.example.com`/update.php?user=`username`&password=`password`&domain=`example.com`&ipv6=`IPv6`&force=`true`
|
|
|
|
#### Example URL to update A and AAAA records of home.example.com:
|
|
https://`dyndns.example.com`/update.php?user=`username`&password=`password`&domain=`home.example.com`&ipv4=`IPv4`&ipv6=`IPv6`
|
|
|
|
#### Example URL to update TXT record _acme-challenge of home.example.com:
|
|
https://`dyndns.example.com`/update.php?user=`username`&password=`password`&domain=`_acme-challenge.example.com`&txt=`textcontent`
|
|
|
|
#### Example URL to update A record of nas.home.example.com:
|
|
https://`dyndns.example.com`/update.php?user=`username`&password=`password`&domain=`example.com`&host=`nas.home`&ipv4=`IPv4`
|
|
|
|
#### Example URL to update AAAA wildcard record of example.com:
|
|
https://`dyndns.example.com`/update.php?user=`username`&password=`password`&domain=`example.com`&mode=`*`
|
|
|
|
|
|
### AVM FRITZ!Box Settings
|
|
* Go to "Internet" -> "Freigaben" -> "DynDNS"
|
|
* Choose "Benutzerdefiniert"
|
|
* Update-URL: `https://<url of your webspace>/update.php?user=<username>&password=<pass>&ipv4=<ipaddr>&ipv6=<ip6addr>&domain=<domain>`
|
|
* only the url needs to be adjusted, the rest is automatically filled by your AVM FRITZ!Box
|
|
* http or https is possible if valid SSL certificate (e.g. Let's Encrypt)
|
|
* Single Domain:
|
|
* Domainname: `<host record that is supposed to be updated>`
|
|
* Multiple Domains:
|
|
* Domainname: `<first host record that is supposed to be updated>,<second host record that is supposed to be updated>,....`
|
|
* Username: `<username as defined in .env file>`
|
|
* Password: `<password as definied in .env file>`
|
|
|
|
### Synology DSM Settings
|
|
* Go to "Control Panel" -> "External Access" -> "DDNS"
|
|
* Click on "Customize Provider" to create a profile for your own DDNS server
|
|
* Service Provider: This is the display name of your custom provider
|
|
* Update-URL: `https://<url of your webspace>/update.php?user=__USERNAME__&password=__PASSWORD__&ipv4=__MYIP__&domain=__HOSTNAME__`
|
|
* Attention: The variables are delimited by two underscores
|
|
* Currently Synology custom DDNS does not support IPv6, for whatever reason.
|
|
* Save your custom provider
|
|
* Click on "Add" to create a DDNS job
|
|
* Select your custom provider. Notice that an asterisk [*] has appeared in front of the name to signify that this is a custom provider.
|
|
* Hostname: `<host record that is supposed to be updated>`
|
|
* Username/Email: `<username as defined in .env file>`
|
|
* Password/Key: `<password as defined in .env file>`
|
|
* External Address (IPv4): probably "Auto", uses Synology service to find own external IP
|
|
* External Address (IPv6): doesn't matter, currently not supported by Synology
|
|
|
|
### pfSense Settings
|
|
* Go to "Services" -> "Dynamic DNS"
|
|
* Click on "Add" to create a DDNS profile
|
|
* Service Type: "Custom"
|
|
* Interface to monitor: `<select you WAN interface>`
|
|
* Interface to send update from: `<select your WAN interface>`
|
|
* Update URL: `https://<url of your webspace>/update.php?user=<user from .env>&password=<password from .env>&ipv4=%IP%&domain=<host record to update>`
|
|
* Leave all other fields empty / default
|
|
|
|
# run as cronjob on a **nix based device
|
|
* see [examples](./examples)
|
|
|
|
## References
|
|
* DNS API Documentation: https://ccp.netcup.net/run/webservice/servers/endpoint.php
|
|
* Source of dnsapi.php: https://ccp.netcup.net/run/webservice/servers/endpoint.php?PHPSOAPCLIENT
|
|
|
|
## License
|
|
Published under GNU General Public License v3.0
|
|
© Felix Kretschmer, 2021
|