<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Throttling issue (Error 429) with DynDNS auto update and desec.io - Avoidable?]]></title><description><![CDATA[<p dir="auto">One of my Cloudron servers using a ISP with no fix public IP (The public IP provided by the ISP rotates fairly regularly.)<br />
The Cloudron server is set to use dynamic DNS and the domain name is configured with <a href="http://desec.io" target="_blank" rel="noopener noreferrer nofollow ugc">desec.io</a>.</p>
<p dir="auto">The issue comes from the fact that the overnight DNS update attempt by cloudron @ <a href="http://desec.io" target="_blank" rel="noopener noreferrer nofollow ugc">desec.io</a> is partially throttled Returned error 429), resulting in some apps being accessible, some other not, including sometime the cloudron dashboard (my.).</p>
<p dir="auto">Here is the anonymized log entry from the server:</p>
<pre><code>Task 1061
Aug 21 04:03:01 taskworker: Starting task 1061. Logs are at /home/yellowtent/platformdata/logs/tasks/1061.log
Aug 21 04:03:01 taskworker: Running task of type syncDyndns
Aug 21 04:03:01 tasks: updating task 1061 with: {"percent":5,"message":"Updating dashboard location my.url-of-cloudron-server.here"}
Aug 21 04:03:01 dns: upsertDnsRecords: subdomain:my domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:05 tasks: updating task 1061 with: {"percent":15,"message":"Updating mail location my.url-of-cloudron-server.here"}
Aug 21 04:03:05 tasks: updating task 1061 with: {"percent":22,"message":"Updating app app01.url-of-cloudron-server.here"}
Aug 21 04:03:05 dns: upsertDnsRecords: subdomain:media domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:07 tasks: updating task 1061 with: {"percent":29,"message":"Updating app app02.url-of-cloudron-server.here"}
Aug 21 04:03:07 dns: upsertDnsRecords: subdomain:cron domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:09 tasks: updating task 1061 with: {"percent":36,"message":"Updating app app03.url-of-cloudron-server.here"}
Aug 21 04:03:09 dns: upsertDnsRecords: subdomain:change domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:11 tasks: updating task 1061 with: {"percent":43,"message":"Updating app app04.url-of-cloudron-server.here"}
Aug 21 04:03:11 dns: upsertDnsRecords: subdomain:timeline domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:13 tasks: updating task 1061 with: {"percent":50,"message":"Updating app app05.url-of-cloudron-server.here"}
Aug 21 04:03:13 dns: upsertDnsRecords: subdomain:bookmarks domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:16 tasks: updating task 1061 with: {"percent":57,"message":"Updating app app06.url-of-cloudron-server.here"}
Aug 21 04:03:16 dns: upsertDnsRecords: subdomain:vpn domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:18 tasks: updating task 1061 with: {"percent":64,"message":"Updating app app07.url-of-cloudron-server.here"}
Aug 21 04:03:18 dns: upsertDnsRecords: subdomain:paperless domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:20 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 44 seconds."}
    at Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:108:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:20 tasks: updating task 1061 with: {"percent":71,"message":"Updating app app08.url-of-cloudron-server.here"}
Aug 21 04:03:20 dns: upsertDnsRecords: subdomain:app08 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:21 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 43 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:21 dns: upsertDnsRecords: subdomain:app08alias01 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:22 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 42 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:22 tasks: updating task 1061 with: {"percent":78,"message":"Updating app app09.url-of-cloudron-server.here"}
Aug 21 04:03:22 dns: upsertDnsRecords: subdomain:app09 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:23 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 41 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:23 dns: upsertDnsRecords: subdomain:app09alias01 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:24 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 40 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:24 dns: upsertDnsRecords: subdomain:app09alias02 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:25 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 39 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:25 tasks: updating task 1061 with: {"percent":85,"message":"Updating app app10.url-of-cloudron-server.here"}
Aug 21 04:03:25 dns: upsertDnsRecords: subdomain:app10 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:26 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 38 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:26 dns: upsertDnsRecords: subdomain:app10alias01 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:27 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 37 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:27 tasks: updating task 1061 with: {"percent":92,"message":"Updating app app11.url-of-cloudron-server.here"}
Aug 21 04:03:27 dns: upsertDnsRecords: subdomain:app11 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:28 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 36 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:28 dns: upsertDnsRecords: subdomain:app11alias01 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:29 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 35 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:29 tasks: updating task 1061 with: {"percent":99,"message":"Updating app app12.url-of-cloudron-server.here"}
Aug 21 04:03:29 dns: upsertDnsRecords: subdomain:app12 domain:url-of-cloudron-server.here type:A values:["AAA.BBB.CCC.DDD"]
Aug 21 04:03:30 dyndns: BoxError: deSEC DNS error [429] {"detail":"Request was throttled. Expected available in 34 seconds."}
    at del (file:///home/yellowtent/box/src/dns/desec.js:76:40)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.upsert (file:///home/yellowtent/box/src/dns/desec.js:89:5)
    at async Object.upsertDnsRecords (file:///home/yellowtent/box/src/dns.js:146:5) {
  reason: 'External Error',
  details: {}
}
Aug 21 04:03:30 tasks: updating task 1061 with: {"percent":100,"message":"Done"}
Aug 21 04:03:30 tasks: updating task 1061 with: {"completed":true,"result":null,"error":null,"percent":100}
Aug 21 04:03:30 tasks: setCompleted - 1061: {"result":null,"error":null,"percent":100}
Aug 21 04:03:30 taskworker: Task took 29.632 seconds
Aug 21 04:03:30 Exiting with code 0
</code></pre>
<p dir="auto">This is not a massive number of domain name records to update, yet it is still throttled.</p>
<p dir="auto">Could this be due to Cloudron treating each subdomain as an independent DNS record and calling deSEC once per record, thus going over deSEC's <a href="https://desec.readthedocs.io/en/latest/rate-limits.html" target="_blank" rel="noopener noreferrer nofollow ugc">rate limit</a> ?</p>
<p dir="auto">Could the DNS update from cloudron by pool into one API request? this would counts the whole batch as one rate-limited HTTP call, which would solve the issue of throttling.</p>
<p dir="auto">To note:</p>
<ul>
<li>the same also happens when syncing DNS manually (pressing the sync DNS button from the domain page)</li>
</ul>
<p dir="auto">Additionally:</p>
<ul>
<li>according to the log, a returned error 429 does not count as an error for cloudron attempt (<code>error":null,"percent":100</code>)</li>
<li>it would be great if, when a throttling answer is sent back, Cloudron could attempt another try after the throttling delay.</li>
<li>when using DynDNS, It seems as cloudron only check for change of public IP once a day and does not take into account whether the update of records is successful or not and thus does not attempt further attempt to update in case of failure. It would be great if this wasn't the case and Cloudron would persist (a bit, more than once) in updating the records.</li>
</ul>
<p dir="auto">At the moment, this leaves the server regularly in an half limbo state with some apps reachable and some other not. So I am just trying to find a way around this while continuing supporting and using deSEC initiative</p>
]]></description><link>https://forum.cloudron.io/topic/15848/throttling-issue-error-429-with-dyndns-auto-update-and-desec.io-avoidable</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 05:19:09 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/15848.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 21 Aug 2026 15:15:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Throttling issue (Error 429) with DynDNS auto update and desec.io - Avoidable? on Mon, 31 Aug 2026 09:29:10 GMT]]></title><description><![CDATA[<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> <a href="/post/128438">said</a>:</p>
<p dir="auto">I have added a 429 check and waiting for "retry-after" in e532401510dc64570f5c0d3d9972429da6268e0f . I guess that's the best we can do on our side .</p>
</blockquote>
<p dir="auto">Hi <a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a><br />
Thanks for this - I appreciate your attempt in trying to help with this.<br />
The related server experiencing the issue has been updated to v10.0.2 recently and it seems that this change was part of the update.</p>
<p dir="auto"><strong>However, the patch has made the situation worse actually.</strong></p>
<p dir="auto">Since the update, I have been locked out of the related server because the "my." record did not successfully update (or only sporadically, before being scrapped from the DeSEC domain name record table entries shortly after)<br />
Attempts to manually add the record to DeSEC entry were also impossible because the DeSEC account was also locked out behind never-ending permanently-resetting with growing threshold waiting times.</p>
<p dir="auto">Not too sure how the Cloudron side is handling this though:</p>
<ul>
<li>It seems like the Cloudron DNS update requests are still batched. e.g. when one record needs updating, all records are updated, no matter if they actually need to.</li>
<li>Still seem like Cloudron does not take into account whether or not a record was successfully update. e.g. do DNS record udpate -&gt; if it works great; if it does not, carry on with the next record (thus leaving previous record in limbo)</li>
<li>Update task starts at H=x and the next relevant entry is at approx H=x+8 (I suppose this could be due to the threshold retry waiting time)</li>
</ul>
<p dir="auto">At the moment, the errors on the Cloudron server log oscillate between:</p>
<ul>
<li>reason: 'External Error'</li>
<li>reason: 'Database Error' (-&gt; sqlMessage: 'Too many connections',)</li>
<li>HTML: 429 too many request</li>
<li>HTML: 502 Bad gateway</li>
</ul>
<p dir="auto">So currently, I feel this is a bit of a mess and I am sorry that this has come down to this.<br />
Any idea how this could/should be dealt with?</p>
<p dir="auto">I remain convinced that a more individual approach to DNS record update as well as switching DNS update method to batch HTTP API call would alleviate part of this/the whole issue i.e. only update records that needs updating, prioritze record update ("my." top prio)<br />
But I also acknowledge that this seems very specific to DeSEC and might not fit in Cloudron's development plan</p>
<p dir="auto">I hope that this makes sense.</p>
<p dir="auto">Otherwise we will be obliged to move on from DeSEC.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="/user/milian.hackradt" aria-label="Profile: milian.hackradt">@<bdi>milian.hackradt</bdi></a> May I ask what DN server are you using instead of deSEC?</p>
]]></description><link>https://forum.cloudron.io/post/128738</link><guid isPermaLink="true">https://forum.cloudron.io/post/128738</guid><dc:creator><![CDATA[Teiluj]]></dc:creator><pubDate>Mon, 31 Aug 2026 09:29:10 GMT</pubDate></item><item><title><![CDATA[Reply to Throttling issue (Error 429) with DynDNS auto update and desec.io - Avoidable? on Sun, 23 Aug 2026 09:17:37 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/girish" aria-label="Profile: girish">@<bdi>girish</bdi></a> - thanks for this. I am looking forward to try these changes.</p>
<p dir="auto">Can I ask: has polling/batching DNS updates been considered or is this simply not possible in this situation?</p>
<p dir="auto">Thanks again,</p>
]]></description><link>https://forum.cloudron.io/post/128439</link><guid isPermaLink="true">https://forum.cloudron.io/post/128439</guid><dc:creator><![CDATA[Teiluj]]></dc:creator><pubDate>Sun, 23 Aug 2026 09:17:37 GMT</pubDate></item><item><title><![CDATA[Reply to Throttling issue (Error 429) with DynDNS auto update and desec.io - Avoidable? on Sun, 23 Aug 2026 07:57:10 GMT]]></title><description><![CDATA[<p dir="auto">I have added a 429 check and waiting for "retry-after" in e532401510dc64570f5c0d3d9972429da6268e0f . I guess that's the best we can do on our side .</p>
]]></description><link>https://forum.cloudron.io/post/128438</link><guid isPermaLink="true">https://forum.cloudron.io/post/128438</guid><dc:creator><![CDATA[girish]]></dc:creator><pubDate>Sun, 23 Aug 2026 07:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Throttling issue (Error 429) with DynDNS auto update and desec.io - Avoidable? on Sat, 22 Aug 2026 12:39:42 GMT]]></title><description><![CDATA[<p dir="auto">Thanks <a class="plugin-mentions-user plugin-mentions-a" href="/user/milian.hackradt" aria-label="Profile: milian.hackradt">@<bdi>milian.hackradt</bdi></a></p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/milian.hackradt" aria-label="Profile: milian.hackradt">@<bdi>milian.hackradt</bdi></a> <a href="/post/128400">said</a>:</p>
<p dir="auto">They are a non-profit registered association and are fully dependent on donations, so their limits are pretty low-ish. They won't adapt them for specific users (which is why we stopped using deSEC for SLA-critical domains), but you can ask them nicely and they can reset your limits - that helped us back then but that obviously isn't a feasible solution in your case.</p>
</blockquote>
<p dir="auto">Yes - I was in touch with them too with regards to other situations, and Cloudron was also able to <a href="https://forum.cloudron.io/topic/15481/server-behind-dynamic-public-ip-cloudron-dashboard-dns-record-entry-not-updated/13">improve things</a> to make deSEC record update more reliable.<br />
I am hoping that this is the case also here.</p>
<blockquote>
<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/milian.hackradt" aria-label="Profile: milian.hackradt">@<bdi>milian.hackradt</bdi></a> <a href="/post/128400">said</a>:</p>
<p dir="auto">I'm afraid it's unavoidable.</p>
</blockquote>
<p dir="auto">I am not so sure of this - or at least in this case/scenario. There are a couple of things here which could be improved:</p>
<ul>
<li>Cloudron treat Error 429 as the error that it is (or at least not report is has a successful update) and make limited number of subsequent attempt(s) accordingly</li>
<li>Cloudron could poll all DNS update to deSec in one HTTP API call (one per root domain) since deSEC's DynDNS update API accepts a comma-separated list of hostnames in a single request, and the whole batch counts as one rate-limited call. This will directly limit the number of necessary update request against deSEC servers making it a win-win situation.</li>
</ul>
<p dir="auto">So for now, I remain hopeful and I am looking forward to hearing from Cloudron staff on this.</p>
]]></description><link>https://forum.cloudron.io/post/128416</link><guid isPermaLink="true">https://forum.cloudron.io/post/128416</guid><dc:creator><![CDATA[Teiluj]]></dc:creator><pubDate>Sat, 22 Aug 2026 12:39:42 GMT</pubDate></item><item><title><![CDATA[Reply to Throttling issue (Error 429) with DynDNS auto update and desec.io - Avoidable? on Fri, 21 Aug 2026 17:58:21 GMT]]></title><description><![CDATA[<p dir="auto">I'm afraid it's unavoidable. I remember that we wanted to use deSEC as our primary DNS provider, but ran into their rate limits fairly quickly a while ago when we were restoring a whole Cloudron instance. They are a non-profit registered association and are fully dependent on donations, so their limits are pretty low-ish. They won't adapt them for specific users (which is why we stopped using deSEC for SLA-critical domains), but you can ask them nicely and they can reset your limits - that helped us back then but that obviously isn't a feasible solution in your case.</p>
]]></description><link>https://forum.cloudron.io/post/128400</link><guid isPermaLink="true">https://forum.cloudron.io/post/128400</guid><dc:creator><![CDATA[milian.hackradt]]></dc:creator><pubDate>Fri, 21 Aug 2026 17:58:21 GMT</pubDate></item></channel></rss>