After upgrading from Debian 11 to 12 (moving from BIND 9.16 to 9.18), my public DNS servers is no longer able to pull zones from a remote djbdns (1.05) master. This setup worked flawlessly prior to the upgrade.
Error logs:
Plaintext
transfer of 'xxxx.xx/IN' from 92.xx.xx.xx#53: missing question section
transfer of 'xxxx.xx/IN' from 92.xx.xx.xx#53: failed while receiving responses: FORMERR
transfer of 'xxxx.xx/IN' from 92.xx.xx.xx#53: Transfer status: FORMERR
Technical Context: It appears the axfrdns module in djbdns omits the Question Section from the AXFR response packet. While BIND 9.16 was lenient enough to accept this, the stricter parser in BIND 9.18 treats this as a protocol violation and immediately drops the connection with a FORMERR.
Troubleshooting attempted (unsuccessful): I tried the following server block configurations to bypass the issue, but the error persists:
DNS Zone file
server 92.xx.xx.xx {
edns no;
request-ixfr no;
transfer-format one-answer;
};
It seems the BIND 9.18 parser rejects the packet’s structure before these compatibility flags can take effect.
Questions for the developers:
Is there any BIND-side configuration (perhaps a hidden or legacy option) to relax the parser’s strictness regarding the “Question Section” in AXFR responses?
For those still dealing with legacy infrastructure: When are you planning to phase out the unsupported djbdns in favor of modern alternatives (e.g., BIND )? Since modern software is clearly dropping support for djbdns-style behavior, I’d be interested to hear about your migration roadmaps or experiences.
We use several interworx CPs, and we also extract DNS records from other systems, which we serve with a common DNS cluster. Due to the above error, the cluster is now unable to update zones from interworx DJBDNS. In this form, Interworx/djbdns is unusable!
I dug into the BIND docs, and it looks like the newer versions (namely 9.18) are intentionally stricter. Unfortunately, there doesn’t seem to be a way around it. It’s a deliberate design choice on their end.
We’re currently in the middle of moving away from DJB. Qmail is the focus right now and BIND is the second phase of that. We have begun some work on BIND. That said, since many of our largest partners and, thus, a majority of our install base handle DNS outside of InterWorx, BIND support has ended up on the back burner while we rush the Qmail side of things.
I can’t give you a specific timeline just yet, but the plan is to have a completely DJB-free environment by EL10 (with similar improvements for previous OSs too).
; <<>> DiG 9.18.44-1~deb12u1-Debian <<>> AXFR xxxx.xx @92.xx.xx.xx
;; global options: +cmd
xxxx.xx. 2560 IN SOA ns.xxxx.xx. zzzz.xxxx.xx. 2023011100 7200 300 604800 10800
xxxx.xx. 3600 IN NS ns2.xxxx.xx.
xxxx.xx. 2560 IN SOA ns.xxxx.xx. zzzz.xxxx.xx. 2023011100 7200 300 604800 10800
;; Query time: 28 msec
;; SERVER: 92.61.113.217#53(92.61.113.217) (TCP)
;; WHEN: Wed Mar 25 20:48:07 CET 2026
;; XFR size: 32 records (messages 32, bytes 1694)
Problem is:
axfrdns program in djbdns-1.05 does not include the question section in its AXFR (zone transfer) response packets, which can cause compatibility issues with some strict DNS clients.
But, I found patch from this problem:
Patch Information: A patch designed for RFC-1034 section 4.3.3 compatibility (which requires including the question section) is available as part of the tinydnssec project. It is applied to axfrdns.c.
Google: “djbdns axfrdns-question-section patch”
Patch source:
if you add this to interworx djbdns package, it will probably solve the problem.
I don’t want to create a CentOS build environment for this.
can you make a patched package?
Unfortunately, we cannot use the dnssec patch. One of the patches it requires is from an author that refuses to name a license for their patch, meaning we are unable to distribute it without opening up potential legal issues for us. Even the author of this patch warns that they cannot even distribute the upstream patch due to the lack of a license.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 3 as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
Sorry for the confusion: this patch is licensed permissively, no issue there. However, this patch relies on other patches being installed first. One of those patches does not have a license. Since these patches are cumulative, trying to just install this patch without the other patch would fail. So there is no way to use this patch without the downstream patch, which we cannot use.
I am not a lawyer either, so you’re in good company.
This “patch” inserts the QUESTION section into the first AXFR response packet. One modified line and 4 new lines and the comments!
I don’t think this requires any license and has no previous dependencies!
unfortunately I can’t compile it because I don’t have the “djbdns.x86_64 1.05-166.rhe7x.iworx” package you modified.
and compiling the original djbdns-1.05.tar.gz is very cumbersome under modern CentOS!
I tried, there are a lot of things that need to be fixed.
I’ve made a ticket to look into this option more. Having said that, CentOS 7 support for external customers ended at the beginning of the year. This issue will still exist for EL8 and EL9 and I would expect any work done on it to be directed toward those platforms.
If we upgrade to EL8 or EL9, will the problem be solved?
I understand that DJBDNS is used in all interworx versions?
So the upgrade will leave DJBDNS, so the problem will remain!
As Brandon stated, the issue will still remain on an EL8 or EL9 server.
However, we no longer support CentOS 7 servers for external customers.
So, any progress that may be made on the issue will only be for EL8+.
While there is no ETA on a resolution, once it is resolved, whenever that may be, you will never receive that fix on your current server. Migrating to a supported environment will be required, no matter what.