TechnitiumSoftware / DnsServer

Technitium DNS Server
https://technitium.com/dns/
GNU General Public License v3.0
3.86k stars 401 forks source link

Updating the SOA serial number to a lower number #746

Closed SivaKesava1 closed 9 months ago

SivaKesava1 commented 9 months ago

Hi @ShreyasZare,

As you requested earlier (https://github.com/dns-groot/Ferret/issues/2), I am testing Technitium. I have almost completed the setup, except for a minor issue with updating the SOA serial number. I am using the HTTP API to add each record individually after reading the Bind-style zone file. Technitium increments the serial number automatically with each record addition. So, I tried to update the SOA record at the end. However, the serial field does not change when I try to update the SOA record. This only happens when I try to set the serial number to a lower value than the existing one. I understand that this is not a common scenario, but is there a way to set the serial number to the value I want?

Thanks, Siva

ShreyasZare commented 9 months ago

Thanks for testing with Ferret, really appreciate your feedback.

Yes, the SOA serial number implementation is increment only. The reason for this is that the primary zone maintains zone history for incremental zone transfer (IXFR) and if the SOA serial resets then this history will become corrupt and would require to be deleted. Also, if there are secondary zones then they would have issues syncing the zone.

So, to prevent these operational issues which may be caused accidentally, this validation logic implemented.

SivaKesava1 commented 9 months ago

Got it. I found a workaround and got started with testing.

It seems Technitium is well protected from almost all the trouble-causing cases by not accepting the zone file itself by giving out errors like:

Good design:)

ShreyasZare commented 9 months ago

It seems Technitium is well protected from almost all the trouble-causing cases by not accepting the zone file itself by giving out errors like:

* CNAME domain name cannot be same as that of the record name.

* DNAME domain name cannot be a sub domain of the record name.

* DNAME domain name cannot be same as that of the record name.

* Domain name for a zone cannot contain wildcard character.

Good design:)

Thanks for the compliments. Yes, this was one of the design goals to discourage editing the config files directly. I am adding import/export option soon to allow directly importing records in BIND zone file format but that too will be accessible only via API so there will be validations on it too.