<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dns on Backend Engineering Strategy Tools</title><link>https://backend-engineering-strategy-tools.github.io/site/tags/dns/</link><description>Recent content in Dns on Backend Engineering Strategy Tools</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Fri, 22 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://backend-engineering-strategy-tools.github.io/site/tags/dns/index.xml" rel="self" type="application/rss+xml"/><item><title>Dynamic DNS (DDNS)</title><link>https://backend-engineering-strategy-tools.github.io/site/public-notes/networking/ddns/</link><pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate><guid>https://backend-engineering-strategy-tools.github.io/site/public-notes/networking/ddns/</guid><description>&lt;p&gt;Most home internet connections have a dynamic IP — the ISP can reassign it at any time. Dynamic DNS (DDNS) keeps a DNS hostname pointed at whatever IP you currently have, by running a small client that detects changes and updates the DNS record automatically.&lt;/p&gt;
&lt;p&gt;Relevant when using &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/networking/tunnels/" &gt;port forwarding or WireGuard&lt;/a&gt; to reach a private network from outside — you need a stable hostname to connect to.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-it-works"&gt;How it works
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;You register a hostname with a DDNS provider (e.g. &lt;code&gt;myhome.duckdns.org&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;An update client runs on your router or a machine on your network&lt;/li&gt;
&lt;li&gt;The client periodically checks your public IP (or watches for changes) and calls the provider&amp;rsquo;s API to update the DNS record&lt;/li&gt;
&lt;li&gt;DNS TTL is kept short (60–300s) so changes propagate quickly&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="providers"&gt;Providers
&lt;/h2&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Provider&lt;/th&gt;
 &lt;th&gt;Cost&lt;/th&gt;
 &lt;th&gt;Domain&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a class="link" href="https://www.duckdns.org" target="_blank" rel="noopener"
 &gt;DuckDNS&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Free&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;*.duckdns.org&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Simple, no account required beyond OAuth login&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cloudflare&lt;/td&gt;
 &lt;td&gt;Free (if you own a domain)&lt;/td&gt;
 &lt;td&gt;Your own domain&lt;/td&gt;
 &lt;td&gt;Best option if you already use Cloudflare for DNS&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;No-IP&lt;/td&gt;
 &lt;td&gt;Free (limited)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;*.ddns.net&lt;/code&gt; etc.&lt;/td&gt;
 &lt;td&gt;Requires manual renewal every 30 days on free tier&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dynu&lt;/td&gt;
 &lt;td&gt;Free&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;*.dynu.net&lt;/code&gt; etc.&lt;/td&gt;
 &lt;td&gt;More generous free tier than No-IP&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Afraid.org&lt;/td&gt;
 &lt;td&gt;Free&lt;/td&gt;
 &lt;td&gt;Shared subdomains&lt;/td&gt;
 &lt;td&gt;Long-running community service&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare&lt;/strong&gt; is the best option if you own a domain — you get a real subdomain (&lt;code&gt;home.yourdomain.com&lt;/code&gt;), the API is reliable, and the client support is universal.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DuckDNS&lt;/strong&gt; is the easiest if you don&amp;rsquo;t own a domain — no configuration beyond a token.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="opnsense"&gt;OPNsense
&lt;/h2&gt;&lt;p&gt;OPNsense has a built-in DDNS client under &lt;strong&gt;Services → Dynamic DNS&lt;/strong&gt;. Supports Cloudflare, DuckDNS, No-IP, Route53, and others out of the box.&lt;/p&gt;
&lt;p&gt;Configuration for Cloudflare:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Service: &lt;code&gt;Cloudflare&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Hostname: &lt;code&gt;home&lt;/code&gt; (the subdomain to update)&lt;/li&gt;
&lt;li&gt;Domain: &lt;code&gt;yourdomain.com&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Username: your Cloudflare account email&lt;/li&gt;
&lt;li&gt;Password: Cloudflare API token with &lt;code&gt;Zone:DNS:Edit&lt;/code&gt; permission for the domain&lt;/li&gt;
&lt;li&gt;Check IP: leave default (uses OPNsense&amp;rsquo;s WAN interface)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OPNsense updates the record whenever the WAN IP changes, detected via interface monitoring.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="linux-update-clients"&gt;Linux update clients
&lt;/h2&gt;&lt;p&gt;If the router doesn&amp;rsquo;t have a built-in client (or you want updates from a specific host):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ddclient&lt;/strong&gt; — the standard, supports most providers:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install ddclient
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# /etc/ddclient.conf (Cloudflare example)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;protocol&lt;span style="color:#f92672"&gt;=&lt;/span&gt;cloudflare
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;zone&lt;span style="color:#f92672"&gt;=&lt;/span&gt;yourdomain.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;login&lt;span style="color:#f92672"&gt;=&lt;/span&gt;your@email.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;password&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&amp;lt;api-token&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ttl&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;home.yourdomain.com
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;inadyn&lt;/strong&gt; — lighter alternative, similar provider support:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install inadyn
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# /etc/inadyn.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;provider cloudflare.com &lt;span style="color:#f92672"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; username &lt;span style="color:#f92672"&gt;=&lt;/span&gt; your@email.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; password &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &amp;lt;api-token&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hostname &lt;span style="color:#f92672"&gt;=&lt;/span&gt; home.yourdomain.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ttl &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; proxied &lt;span style="color:#f92672"&gt;=&lt;/span&gt; false
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="limitations"&gt;Limitations
&lt;/h2&gt;&lt;p&gt;DDNS does not help if your ISP uses CGNAT — if your router&amp;rsquo;s WAN IP is a private address (10.x, 100.64.x, 192.168.x), port forwarding and DDNS will not work. See &lt;a class="link" href="https://backend-engineering-strategy-tools.github.io/site/public-notes/networking/tunnels/" &gt;Tunnels&lt;/a&gt; for options that work without a public IP.&lt;/p&gt;
&lt;p&gt;DNS propagation delay means there&amp;rsquo;s a brief window after an IP change where connections will fail. Keep TTL at 60–300s to minimise this.&lt;/p&gt;</description></item></channel></rss>