This article is born because Bunny.net does not support Dynamic DNS (for the moment?), I contacted the support but I received a negative result:
I wanted to migrate all my domain from OVH/Cloudflare to Bunny, because their DNS performances are on the top chart (they are the best?), it's free, the UI/UX of the admin panel is clean, and MOST OF ALL: They got rabbits EVERYWHERE.
However there is a big problem: to access my Synology NAS through a custom domain name, DDNS is required because:
- My internet provider changes IP everytime the Internet Box restarts, so I have to notify my DNS provider of the new IP!
- My internet provider doesn't give fixed IPV4 for free (to be honest I won't pay).
After experimenting, I created a Node script executed regularly on my NAS that:
- Save the current IP of the NAS in a cache.
- 5 Minute later, fetch the current IP and compared it with the cached IP: if the IP is different, I call the Bunny DNS API to update the DNS records value with the new IP! Finally save the new IP on the cache.
- Repeat this process 5 Minute later: compare the current IP and cache IP again, etc...
Bunny Setup
First, make sure you have loaded your domain on your Bunny admin interface, if not, here is the setup link:
https://dash.bunny.net/dns/zones/add
Create a A
Record and set the public IP of your Synology NAS. If the IP is not correct, it will be corrected with the Node Script on the next section:
In my case, I have a subdomain photos.domain.com
pointing to my Synology NAS. The Value
column shows the IP you entered (in my case I prefer to keep it private :D).
Finally on your Bunny account, get you API key, it will be use to update the IP of your A
Record:
https://dash.bunny.net/account/settings
Synology Setup
Synology NAS has Node already installed, so I decided to create a Node Script instead of a Bash script, copy the following file to the directory of your choice. Personnally, I copied to /volume1/home/admin/ddns-bunny.js
:
https://github.com/steevepay/ddns-bunny-synology/blob/v1.0.0/ddns-bunny.js
Let's create a new Task executing the Script regularly, like every minutes.
- Open the
Control Panel
application > Click onTask Scheduler
- On the bar, click on
Create
>Schedule Task
>User Defined Script
- Name the new Task like
DDNS Bunny
and select a User, like the admin. - Now select the second tab Schedule: Ensure the
Run on the following day
is selected, and set atDaily
. - On the second tab Schedule: Set the start time at midnight, and check
Continue running the same day
. Set the Repeat into to1 minutes
andLast Run Time
to23h55
. - Now select the third tab Task Settings, and add to the
"User Defined Script"
the following command. BUNNY_ACCESS_KEY="" NAS_URL="photos.domain.com" node /volume1/homes/admin/ddns-bunny.js. The command must written in one single line, otherwise the API KEY and the URL won't be retrieved by the script. Write your Bunny API key under the first double quotes for the environment variableBUNNY_ACCESS_KEY
. Then write the domain of your NAS between the second double quotes for the envNAS_URL
, without https://. Finally the command execute the Script with Node. - To verify if the script is working, enable the option "Send Run details by emails" and provide your email.
- Save the new task, then wait one minute, to verify if everything went fine:
-
Check the email you received: it should print
OK {YOUR PUBLIC IP}
. If something went wrong, it should print an error message detailing the issue. -
A configuration file has been created: Open the directory
/volume1/homes/admin/
, and you see a JSON file named DDNS_BUNNY_CONFIG.json. It is used to save: your current public IP, and metadata to requests the Bunny API. - Visit your custom domain: Your Synology panel should load
- Verify the IP: open your Bunny DNS panel, you should see the public IP of your NAS
- If you didn't received email: You probably didn't configure right your NAS to send emails.
-
Check the email you received: it should print
Known limitations
- The script can update only one domain at the moment, I'm working on supporting multiple domains.
- The script lacks of Unit Tests
Conclusion
Now Bunny.net supports DDNS by simply requesting their DNS API, and I can migrate all my domains to Bunny, youhouuu 🐰🎉