TechnitiumSoftware/DnsServer · error · DnsServerException
{protocolName} requires IPv6 support on the system to work.
Error message
{protocolName} requires IPv6 support on the system to work. What it means
Thrown by ValidateQuicSupport (used by DoQ and DoH3) when QuicConnection.IsSupported is false AND Socket.OSSupportsIPv6 is false. QUIC on this stack is built atop IPv6-capable sockets; without OS IPv6 support, QUIC protocols cannot start.
Source
Thrown at DnsServerCore/Dns/DnsServer.cs:6621
case PlatformID.Win32NT:
return Environment.OSVersion.Version.Major >= 10; //unix sockets are supported on Windows Server 2019 (oct update 1809), Windows 10 (Insider Build 17063), or later
default:
return false;
}
}
#endregion
#region quic
internal static void ValidateQuicSupport(string protocolName = "DNS-over-QUIC")
{
if (!QuicConnection.IsSupported)
{
if (!Socket.OSSupportsIPv6)
throw new DnsServerException(protocolName + " requires IPv6 support on the system to work.");
throw new DnsServerException(protocolName + " is supported only on Windows 11 (build 22000 and later), Windows Server 2022 (and later), and Linux. On Linux, you must install 'libmsquic' manually.");
}
}
#endregion
#region public
public async Task StartAsync(bool throwIfBindFails = false)
{
if (_disposed)
ObjectDisposedException.ThrowIf(_disposed, this);
if (_state != ServiceState.Stopped)
throw new InvalidOperationException("DNS Server is already running.");
_state = ServiceState.Starting;View on GitHub (pinned to d0484b6c1e)
Solutions
- Re-enable IPv6 on the host: Linux sysctl -w net.ipv6.conf.all.disable_ipv6=0; Windows re-enable IPv6 on the adapter.
- Disable DoQ/DoH3 listener if IPv6 cannot be enabled in your environment.
- In Docker, run with --sysctl net.ipv6.conf.all.disable_ipv6=0 and a dual-stack network.
- Verify with Socket.OSSupportsIPv6 (or `ping -6 ::1`) before enabling QUIC-based protocols.
Example fix
# before: container launched with IPv6 disabled docker run --sysctl net.ipv6.conf.all.disable_ipv6=1 ... # after docker run --sysctl net.ipv6.conf.all.disable_ipv6=0 -p 853:853/udp ...
Defensive patterns
Strategy: validation
Validate before calling
bool QuicCapable => System.Net.Sockets.Socket.OSSupportsIPv6 && System.Net.Quic.QuicConnection.IsSupported; // only enable DoQ/DoH3 when QuicCapable is true
Type guard
static bool CanEnableQuic() => System.Net.Sockets.Socket.OSSupportsIPv6 && System.Net.Quic.QuicConnection.IsSupported;
Try / catch
try { server.ValidateQuicSupport("DNS-over-QUIC"); server.EnableDoQ = true; }
catch (DnsServerException ex) when (ex.Message.Contains("IPv6 support")) { log.Warn("Cannot enable QUIC: enable IPv6 on the host"); server.EnableDoQ = false; } Prevention
- Verify Socket.OSSupportsIPv6 before enabling QUIC protocols.
- Enable IPv6 in containers with the right sysctls.
- Disable DoQ/DoH3 where IPv6 is not available.
When it happens
Trigger: Enabling DNS-over-QUIC or DNS-over-HTTP/3 on a host with IPv6 disabled at the OS/kernel level (e.g. ipv6.disabled=1 on Linux, or IPv6 unchecked in Windows adapter properties).
Common situations: Hardened/containerized Linux images with IPv6 disabled; cloud instances without IPv6 addresses; system-level sysctl net.ipv6.conf.all.disable_ipv6=1; Windows Server with IPv6 binding restrictions.
Related errors
- {protocolName} is supported only on Windows 11 (build 22000
- Network group map contains an invalid network address: {netw
- DNS64 prefix can have only the following prefixes: 32, 40, 4
- An IPv6 network address is expected for 'excludedIpv6' array
- EDNS Client Subnet IPv6 prefix length cannot be greater than
AI-assisted analysis of TechnitiumSoftware/DnsServer@d0484b6c1e (2026-08-13).
Data as JSON: /api/errors/4596dade551dc6ae.
Report an issue: GitHub.