TechnitiumSoftware/DnsServer · error · DnsServerException
{protocolName} is supported only on Windows 11 (build 22000
Error message
{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. What it means
Thrown by ValidateQuicSupport when QuicConnection.IsSupported is false and IPv6 IS supported. QuicConnection.IsSupported requires a runtime/OS combination that ships System.Net.Quic: Windows 11 build 22000+, Windows Server 2022+, or Linux with libmsquic installed.
Source
Thrown at DnsServerCore/Dns/DnsServer.cs:6623
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;
//bind on all local end pointsView on GitHub (pinned to d0484b6c1e)
Solutions
- On Linux, install libmsquic matching your distro/arch (apt install libmsquic or the Microsoft package).
- Upgrade the .NET runtime to 7.0+ (preferably the LTS the server targets).
- On Windows, run Windows 11 (22000+) or Windows Server 2022+.
- If you cannot satisfy the requirement, disable DoQ and DoH3 listeners.
Example fix
# before: libmsquic missing on Ubuntu # (server throws on StartAsync with DoQ enabled) # after wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg # add repo, then: sudo apt-get update && sudo apt-get install -y libmsquic
Defensive patterns
Strategy: validation
Validate before calling
bool QuicAvailable => System.Net.Quic.QuicConnection.IsSupported; // gate DoQ/DoH3 enablement on QuicAvailable
Type guard
static bool IsQuicSupportedOnRuntime() => System.Net.Quic.QuicConnection.IsSupported;
Try / catch
try { server.ValidateQuicSupport("DNS-over-QUIC"); server.EnableDoQ = true; }
catch (DnsServerException ex) when (ex.Message.Contains("libmsquic")) { log.Warn("Install libmsquic or upgrade .NET/runtime; disabling QUIC"); server.EnableDoQ = false; } Prevention
- Install libmsquic on Linux hosts and images.
- Run a .NET runtime version that ships QUIC (7.0+).
- Feature-detect QuicConnection.IsSupported before enabling DoQ/DoH3.
When it happens
Trigger: Running an older .NET runtime without built-in QUIC; running on Windows 10/Server 2019; Linux without the libmsquic native dependency installed.
Common situations: Stock Ubuntu/Debian missing libmsquic.so; .NET 6 or earlier runtime (QUIC is .NET 7+); Alpine without musl libmsquic; container built on a minimal base lacking the native library.
Related errors
- {protocolName} requires IPv6 support on the system to work.
- Valid range is from 1 to 1000.
- Unix Domain Sockets (UDS) are supported only on Linux, Windo
AI-assisted analysis of TechnitiumSoftware/DnsServer@d0484b6c1e (2026-08-13).
Data as JSON: /api/errors/3092f865314dbb77.
Report an issue: GitHub.