Hacker News new | past | comments | ask | show | jobs | submit

DynIP – Dynamic DNS with RFC 2136, IPv6, DNSSEC, and BYOD

https://dynip.dev/
I'm Daniel, network engineer in Sweden. Built DynIP because every DDNS service I tried was designed around 2010-era networks: proprietary HTTP-only update protocols, poor IPv6, no DNSSEC, little support for actuallymodern devices.

What's in it:

- RFC 2136 / TSIG updates as a first-class path. FortiGate genericDDNS and MikroTik's /tool dns-update work natively — no custom client needed. HTTP API is also available for everything else.

- IPv6 end-to-end. Authoritative nameservers reachable over IPv6 (with AAAA glue published at the parent .dev zone), customer zones publish A and AAAA, and the platform works for IPv6-only clients.

- DNSSEC available on selected zones. With a single toggle.

- Bring your own domain via subdomain delegation. Point subdomain.yourcompany.com at our nameservers, manage normally.

- Hidden primary architecture: two geographically distributed secondaries (Sweden + Switzerland) verify TSIG locally and forward updates to a primary that doesn't take public traffic.

- Private-APN-friendly: we accept RFC 1918 and CGNAT addresses in records, which means cellular fleets on private APNs can use public DNS for stable hostnames pointing at internal IPs. Described in the fleet ops guide.

- A small Docker container (ghcr.io/33k-org/dynip-updater) for any docker-compose / Kubernetes / Coolify / Dokploy setup.

Background: 25 years of managed networking. DDNS was the part that broke or required tricks. Wanted one that didn't.

Stack: PowerDNS 4.8 authoritative, FastAPI backend, Postgres, Postfix for transactional mail, Cloudflare for the external surface and as a tunnel for the API. Live on dynip.dev. Paddle for billing. Free tier exists.

Happy to dig into architecture, the TSIG sync mechanism, per-zone DNSSEC handling, the hidden primary approach, or anything else.

FYI: Site does not work in firefox focus (android) unless i turn off tracking protection (which is default on).

Which was a bit confusing when I clicked the confirm-your-email link. No confirmation or status or anything.

Thanks, I will put it on my issues list to look into.
How do the geo distributed secondaries work? How do they sync?

Also, is there anycasting?

The geo sync updates are handled with distributed keys over internal api, here is the documentation for powerdns around it: https://doc.powerdns.com/authoritative/dnsupdate.html#dnsupd... so the updates are pushed and updated to primaries if the update is done over DNS and if done via API there is a normal replication function.

right now there is no anycast available, possible in the future

Thanks for the answer. I use DB replicas (so all dns servers have a common backend), but only one accepts writes.

I still can not figure out any economical way to roll out anycast.

> we accept RFC 1918 and CGNAT addresses in records

Doesn't that cause security issues by making it possible to put other people's private servers (that you want to do XSS-type attacks against) into your domains or something? I have a vague memory of it being a security no-no somehow.

There are a few things to think about yes, I actually post in the fleet guide parts of it that it should be considered before posting. the dns rebind issue but that should be controlled by host header validation, CSRF, same-site cookies etc. Internal topology disclosure — real. but we dont post it. You can do the same in Cloudflare for example.
Basically any DNS provider allows this (plus anybody can buy a domain and run their own DNS server).

The defense against this has to happen either on the resource you want to protect or in the browser.

Thanks for sharing!

How did you set up PowerDNS? Single/multiple instances? One DB shared by many or multiple authoritative with one hidden primary?

There are multiple multiples :) both (hidden) primary and secondaries are multiple, snapshots every 20 minutes and forward-update functionality from the secondaries with replicated tsig over powerdns api every 120 seconds. since they are static they only need to replicate once.

if you register a zone and open the snippets quickly, there is a green notification saying tsig replication underway for x amount of seconds and until that happens RFC 2136 updates are not possible but the ones that use api are available right off the bat.

Really cool stuff. Out of curiosity what made you select PowerDNS (and in general a commodity DNS server) vs. developing a custom DNS server integrating your logic (using https://github.com/miekg/dns for instance).
Cool! How did you scale-out the hidden primary? Multiple instances communicating with a single postgres?
The hidden primary has a passive node, so saying multiple multiple maybe is an overstatement :) and yes, using a single postgres container
Even if you've otherwise put in a lot of effort, presenting it with slop on the home page really sends a bad signal. My eye caught "No proprietary clients. No vendor lock-in." as an AI pattern and I'm immediately drawn to wonder whether the service will still be around even just a few weeks from now.
Thanks for that, My intentions are to stick around for sure. It is genuinely difficult to get a point across in a very short amount of time that people that people will actually recognize. its like doom scrolling where you just get boored of it. Happy to take suggestions.

< is there anything else you would like me to answer or is that good enough - GenericAI answer>

But jokes aside, words are difficult and also not my first language

I don't think any value would be lost in that case by simply deleting the text and not replacing it with anything. AI is particularly bad at inserting this kind of filler, it can sometimes be really hard to spot even though it's right in front of your eyes.

Just more hidden cost of AI.. it's sufficiently hard to avoid these kinds of structural smells that I've gone back to just writing my own copy everywhere.

loading story #48278305
Skål! Looks like a huge effort-reliever, excited to try it out.
Well done. Would be nice to remove a bit more five eyes tracking from your stack, e.g. remove includes from 3rd party domains such as unpkg / tailwindcss.com and of course get rid of cloudflare.
Yes, I have been thinking about that as well and have unpkg / tailwindcss.com in the backlog. good point, appreciated. Cloudflare is a bigger backlog item because of the current infrastructure build.
Its unfortunate you didn't go for a EU-native stack right away. Bunny.net offers similar compute/serverless on the edge, close to Cloudflares offerings.
Something to look into for sure. thnks
My first impression was "oh no, not another generic, vibe-coded service clone". But this is actually really good stuff under hood, and it's clearly coming from someone who has a deep understanding of networking.

Nice work, good luck.

loading story #48279385
Thanks, appreciate it!
loading story #48279947
Bonus points for rfc 2136, works easily with [external-dns](https://github.com/kubernetes-sigs/external-dns). I've been using k8s+external-dns on-prem with a selfhosted minimal BIND server on a public host for years now.
Thanks — external-dns + RFC 2136 is a great call. Honestly that's a guide we should write; we already have one for fleet operations and the k8s pattern is the natural extension.
Refreshing to see competition entering this space.

However, if you want to self-host, not caring for reliability or ease of use: bind9 supports RFC 2136 DNS UPDATE and DNSSEC, too (haven't figured that out yet, though). For my setup I also wrote a small Go executable that translates HTTP requests, because my home router does not talk DNS UPDATE.

Thanks! Hope there is room for something fresh and flexible!

And yes, BIND allows for a lot of different things, RFC 2136 being one of them and I have been looking at multiple options before settling down on the current structure. I built a few test cases from my Fortigate (dynip came to be initially fortigate only with simple copy paste over dns internally)

And there are a few code examples that can be used internally on various hosts, windows or linux, there is even an arduino example if you have any iOT devcices lying around in your home lab. and Writing a Go executable is a good idea, look out under /docs for updates :)

I used to set up my own OpenWrt DDNS scripts that update AWS Route 53 or Cloudflare DNS which solved enough of that problem for me.

Then Tailscale came out and I stopped caring about DDNS or CGNAT ever since.

Tailscale is awesome, and Netbird is awesome, and Wireguard is awesome. It is a great time to be alive for sure. I have a guide that I wrote https://dynip.dev/guides/tailscale where I explain how and why they can exist

Agree that the OpenWrt DDNS scripts are a bit of a pain with keys secrets but the snippets function actually take the guess / how-does-it-work work out of the equation so I am pretty happy with that

> I have a guide that I wrote https://dynip.dev/guides/tailscale where I explain how and why they can exist

Your guide sounds obviously written by an LLM. I think that's okay, and you might have directed the LLM's work, but don't say you wrote it; this misrepresents the guide as more carefully crafted and authoritative than it really is.

I would have been all over this a few months ago but I've recently been an enthusiastic convert to netbird recently. I had a look at your guide. I am using netbird reverse proxy to expose a few services and it's been pretty much flawless. It saves me from needing to set up port forwards or worry about a firewall.

Do you see an advantage or alternative benefits to also having a public dynamic DNS, because for me I am struggling to see any?

Okay well I guess we are still dealing with someone else's proxy in the way (also providing TLS termination which was a big thing I was after). So you share fates with that service. It's not just a case of hole punching via a relay.

It would be nice to get something like that also with easy TLS setup.

Okay you've convinced me. This is how I self host my own netbird instance and get a stable relay DNS and use the reverse proxy via that.

Procrasticus...

So many self replies :) happy to dive in a bit more at a later time to get your take on how the services work together. hope you found the /guide helpful
I now use both. DynIP for public-facing services (yeah I still have a few), and Tailscale for what only I need to access. Drastically reduced my attack surface.

Luckily I don't have to deal with CGNAT.

This makes me really happy, like really really. It is the exact part of the /guide where things work together and not agaist or replace, synergy and happiness.
loading story #48279629
loading story #48280497
Thanks for all the excellent comments and questions, I will be bringing my daughter for swimming lessons for a few hours and will continue looking at the threads when I return.

Again, this guy <- happy

Is it right that the free-tier auth tokens expire in 24 hours (saw the JWT exp claim)? I would like to know this before investing too much time in migrating, even just to try it out. Trying to answer: is the free tier sustainable?
"Long-lived token" means API tokens for the management API (creating/ deleting zones, listing them, automating via Terraform-style flows), not the TSIG keys for actual DNS updates. Every zone on every tier gets its TSIG key — that's what powers the updates themselves. Free tier manages zones via the dashboard; paid tiers add API tokens for programmatic management.

So no. the auth token is just for the API and can be used as a bearer for the api, the TSIG are always valid unless the domain is deleted

the free tier allows for 5 zones and all get individual tsig keys and they are always active. no need to pay unless you start handling 100s of new zones, updates, delete etc. so there is a split between the two types of tokens. hope it is clear

I would maybe amend that to the pricing page, I also thought "long-lived API tokens" referred to the DNS updater functionality, not the management API.
Thanks for looking out and letting me know!
loading story #48282253
I like the 2000 era HTTP(S) only updates. All you need is curl/wget/fetch and it works. Add a token if you like. I think duckdns can still do this. No client needed, works almost anywhere. --
Yep, this is also true for dyndns curl/wget/fetch, have a look at the /docs on other special things that we can do except those. there is a larger functionality base here that I try to cover and not only (but including) curl/wget/fetch.
You are dynip yes? Did you mean the old guard dyndns has it or dynip?
I run dynip.dev, there are like dynip . com that is retired, then there is dyndns and 100 different players i am sure, I am looking out to see if this is good, can be better or useless to the general public.
This will be great for my homelab. Currently I have some hacky scripts to update he.net records whenever my ISP sends me a new ipv6 prefix but I'd prefer to reuse existing tooling.

Looking into switching today :D

Best use case!

Check the snippets after you create a zone, hopefully less hacky scripts :D

{"deleted":true,"id":48279086,"parent":48276363,"time":1779799759,"type":"comment"}
My domain registrar also hosts DNS, and supports dynamic DNS entries. Ticking a box gives me an update URL and a username, which I can then enter into my UniFi router. How is this different?
It is not, the functionality is the same. I am trying to expand on the functionality to not only support a single setup. we support multiple update paths, validation, DNSSEC, Letsencrypt, byod domain etc. fleet management. It could be a battery powered esp node that you send to another country. there are multiple ways of doing the same thing and what I hope I am doing is making it accessible, easy and good looking.

Fortinet for example have a similar thing, you can within their web interface register a something.fortiddns.com or float-zone.com or others. but if you upgrade the fortigate with a newer model you need to get in touch with their support because the domain is locked to the old hardware.

syncology has their own, I mean there has never been more options, what I am doing is trying to bundle, connect and provide a platform for your own domains, that can support letsencrypt out of the box, that you can use multiple update paths with ipv6 if needed.

long reply, I am genuinely happy for the "why" questions as it allows me to speak about the platform :)

loading story #48278282
loading story #48278747
This is great! and and amazing idea.

Just as a warning however the vibe coded website doesn't inspire confidence this isn't low quality auto generated AI slop and/or AI managed infra.

Looking into it of course this seems to not be the case, but just wanted to say, don't use generic looking theming that is default of all LLM-generating websites :)

One of my things are that I am an engineer and I build functionality for engineers, this has always been the case. I am bad with visualizing this so the vue framework has helped tremendously with that.

With that said, I hope as well that it is a amazing idea, I am really happy with how it works and performs.

Even though I agree with other commenters that calling out websites as AI slop based on the copywriting and "generic LLM-generated look" is getting tiring, I can't deny that this was my immediate reaction to it as well.

On the other hand, you being on this comment thread and answering questions competently is a huge boost to the project's credibility in my eyes! But once the link disappears from the front page, only one of these things will remain. :-)

It looks alright, I have no issue with it. People just like to hate on things that have zero relevance to the actual product.

It's not like pre-LLM you wouldnt go to Themeforest and see hundreds of designs that were all the same. Now they just call it AI slop, before it was just slop.

I know right, and you would try different themes, go into the code, try to delete footer information that pointed back to the theme maker only to break the structure of everything.
Free tier says without long lived token - how would you use dyndns without one?
"Long-lived token" means API tokens for the management API (creating/ deleting zones, listing them, automating via Terraform-style flows), not the TSIG keys for actual DNS updates. Every zone on every tier gets its TSIG key — that's what powers the updates themselves. Free tier manages zones via the dashboard; paid tiers add API tokens for programmatic management.
That really needs clarification, llms do get that wrong.
Would love to know what it is and what it is doing that others are doing wrong. I don't touch dns for anything other then pointing a domain to a server.
But you do touch DNS :) and the idea here is to create as little friction or easy setup as possible with either fixed, dynamic or unknown ips.

One example I used it for just a few days ago was to set up dual ipsec tunnels for redundancy in fortigate in a remote warehouse. with the snippets I can just add a byod domain and paste the config into the cli and ship the devices. when they connect it it dials up, updates the ip in the dashboard (with notification that it has changed) and the vpn tunnels comes up automatically. it is available as road warriors as well, or dialup ipsec tunnels but I want dual initiator functionality.

Maybe this reply isnt really what the site is for but rather a subset of what can be done.

have a look at https://dynip.dev/guides/ I tried to add substantial information on what can be done

I usually set up a wireguard tunnel from my home box serving content on nginx to my linux server hosted on a virtual cloud server and have that virtual cloud server pass traffic via the wireguard tunnel back to my home box when people view my content.
yep sounds valid, keeps the internet traffic nice and secure
If only OVH supported RFC 2136 / TSIG updates...
lol, we can probably figure something out :)
loading story #48280508
I have fond memories of playing with dyndns and having cool domains like <mynick>.homeunix.net … and having downtime because my home dns connection went down and came back up with a different ip address.

Fun times :)

I did the same! back when DNS was new and exciting and not a full on requirement for everyhing you touch nowadays. I have been thinking about that since then really and finally thought I would bring some of that back!

Thanks for being awwesome!

What’s the use case of DDNS in 2026 when you can have vpn+reverse proxy? Or just vpn really and never expose anything
loading story #48278758
I like to believe that there are different use cases that play with different needs, I don't know your exact needs on the topic but it sounds like you have figured out what needs you have on a technical basis.

The idea is not really to never expose anything, almost the opposite or at least understand where on the internet different things live and be able to address them globally

loading story #48279031
But you still need a registrar which are all gated with whatng cartel web engines (aka they broke noscript/basic HTML browser support)
Looks interesting.
Thanks, I am very happy with it. Reading the /guides or /docs myself actually feels good. inside the dashboard I have built a "snippets" javascript that creates the config for you. I mostly live in the cli myself so most is based on that.