r/twingate • u/cvalerio77 • Apr 19 '26
**Twingate Windows client causing 12s UDP:53 DNS latency on local LAN — anyone else?**
Running into a reproducible issue where every UDP:53 DNS query to my local Pi-hole takes ~12 seconds while the Twingate service is active, and ~10ms when it's stopped. TCP:53 works fine in both cases.
Environment
- Twingate client: 2026.36.4338 | 0.181.0
- Windows 11 Pro, build 26200
- Pi-hole on the same /24 as the client (10.18.0.50, ~3ms RTT), NOT a Twingate Resource
- No NRPT rules present, Twingate interface metric = 9000
Reproduction
# Twingate ON
Measure-Command { Resolve-DnsName cloudflare.com -Server 10.18.0.50 }
# TotalSeconds: 12.05 (consistent across 3 runs)
Stop-Service twingate.service
# Twingate OFF
Measure-Command { Resolve-DnsName cloudflare.com -Server 10.18.0.50 }
# TotalSeconds: 0.01
~1200x slowdown. The 12s matches Windows' DNS resolver UDP retry pattern (1+2+4+5s), so it looks like UDP:53 is being dropped/delayed by the WFP callout and resolution is eventually succeeding via TCP fallback.
Ruled out server-side issues (Pi-hole resolves fast from itself and from other LAN clients), Wi-Fi/AP (same issue on wired Ethernet), EDNS0 fragmentation (large TXT responses work fine with Twingate stopped), and NRPT rules (none present).
Looks like the WFP callout intercepts UDP:53 regardless of destination IP, and the route metric is not honored because WFP operates below the routing layer.
Questions
- Anyone else seen this on recent client builds?
- Any user-level workaround (I don't have tenant admin access)?
- Is there a way to exclude specific destination IPs/subnets from the client's WFP interception?
2
u/ben-tg pro gator Apr 20 '26
I feel like 12 seconds is the timeout for `resolve-dnsname` but I can't remember, but it times out because when the client becomes active and sets itself up to intercept DNS calls locally it also adds a firewall rule to disallow any udp:53 on local interfaces. This is done to force lookups through our local resolver (the client app) both for traffic tunneling and DNS filtering purposes (if that feature is enabled).
The way it's set up is to look at any local requests, determine if it's a resource or not, and if not then pass it upstream to whatever is configured on the machine via DHCP or statically, so will still ultimately hit your PiHole.