I’m having some issues in my Fedora 41 Workstation installation trying to resolve some local DNS records in my local DNS server.
I have two local DNS servers, both getting handed out by DHCP and apparently getting correctly picked up by resolved. However, anytime I try to resolve any internal record I get no reply. It seems like resolved is ignoring the local DNS server, since it returns no replies and these records are not in any public DNS server.
I notice that you have a IPv6 link local address in the resolver, but you did not test that it works and it’s the current DNS server.
I’ve just got into running a full IPv4/Ipv6 home network and some apps did not work correctly until I debugged by IPv6 configuration. Are you sure you have a working IPv6 network?
I noticed that as well when reviewing the info when posting.
To be honest, I’m not sure. I know the ISP Router has IPv6 enabled and I’m pretty sure my local computers have both a link local IPv6 and an addressable IPv6. I haven’t really touched the IPv6 settings in the router, I’ll have to dig a little further and report back
The way I setup my IPv6 was to use “prefix deligation” from the router to give each of my systems it’s own /64. Your ISP should have provisioned a /48 or /56 so you can do this.
I was unable to query the link-local address directly, possibly just due to user error as I think I couldn’t quite nail the syntax dig and nslookup wanted.
But looking into my router settings, I noticed that it had DHCPv6 enabled by default.
The settings are pretty sparse, but I believe disabling DHCPv6 enables SLAAC, as my computers continue to receive a /64. resolvectl status now doesn’t show any link-local adresses, only the DNS servers I configured in my network and as such everything seems to be working, although I didn’t explicitly tried to test IPv6 connectivity
I’m not sure if this the the most correct configuration, but since it seems to be working for now I’ll leave it and get back to it later.
I am not sure link-local IPv6 addresses are fully supported by all tools. At least bind-utils dig and host tools did not support proper form of fe80::861e:a3ff:feb1:f8e7%eth0 in resolv.conf, at least few years back. But local /etc/resolv.conf should point to localhost systemd-resolved and that should be able to handle even interface specific addresses, even if it does not print it together with %interface at current DNS server. I think any address starting with fe80: should end with explicit interface specification. Because if the system has more than one interface, as it quite common on laptops or machines running libvirt or docker interfaces. resolvectl status prints the address for the link explicitly, but when used in dig, you would have to use dig @fe80::861e:a3ff:feb1:f8e7%enp34s0 arsenal.pve.example.net or host arsenal.pve.example.net fe80::861e:a3ff:feb1:f8e7%enp34s0. Link-local addresses have the same prefix for multiple interfaces and there is no heuristic to choose the correct interface, it always have to be specified when that address is used. That makes these address not suitable for local DNS responses, because DNS packets can contain just bare address, without interface specification.
Could you please show which exact name you are trying in dig and how the response looks in it? What exactly you mean by “returns no replies”? DNS should always return response, even if it is NXDOMAIN or empty answer NOERROR status.
Following command would try router.lan name on all resolvers on your system. Note that link-local has interface too and tries both UDP and TCP. Can you ensure all servers return the same responses?
H=router.lan;
SERVERS="192.168.1.12 192.168.1.13 fe80::861e:a3ff:feb1:f8e7%enp34s0";
for DNS in $SERVERS; do
echo "# $DNS"; dig +short @$DNS $H; dig +tcp +short @$DNS $H;
done
That syntax applies only when used in URI like https://[fe80::861e:a3ff:feb1:f8e7]. But again, for non-local link local address also interface id or name needs to be specified. Either as https://[fe80::861e:a3ff:feb1:f8e7%2] or https://[fe80::861e:a3ff:feb1:f8e7%enp34s0].
Systemd-resolved has special handling of interfaces bundled with link-local addresses. I think it should work and send queries correctly even to link-local addresses received, but it does not print it in a simple to reuse way. I think it should work anyway, just the diagnostic what exactly is wrong is more difficult.
Can you please share what router model and vendor is sending such link-local IPv6 address? Is this default behaviour of that device or it is required to configure it to offer DNS via link-local address only?
I assume address fe80::861e:a3ff:feb1:f8e7 is of local router. Are addresses 192.168.1.12 and 192.168.1.13 leading to the router device or something different? Is it possible only DHCP were reconfigured to serve different than default DNS servers (which know special names), but IPv6 servers were left to vendor defaults?