I didn’t deem this interesting or conclusive enough to write an extensive blog post, but I’ll explain the issues I was running into and the eventual resolution.
I was having issues resolving domains, specifically the *.microsoft
TLD and a random *.gov
website - but inconsistently, and ONLY when using Tailscale’s 100.100.100.100
magic DNS nameserver (which in my setup ultimately redirected to my pihole). The funny thing was whenever I was having these issues, if I performed a dig <problematic domain>
on my WSL on the same computer, the domain would suddenly resolve! Oddly too, this seemed to happen pretty consistently while I was on a non-local network connected to Tailscale, and basically never while I was at home - but I ran into it with ALL domains this evening while testing.
The eventual fix was this: uncheck “Use DNSSEC” on my pihole. The pihole forwards any DNS requests not on a blocklist to my router, which then forwards upstream to Google DNS using DNSSEC. I couldn’t tell you enough about DNSSEC to tell you why having it enabled twice was an issue, but I could tell you that I do indeed trust my router over my LAN not to feed my pihole bogus or malicious domains, MitM on my LAN notwithstanding (god forbid).
One of the things I did during the troubleshooting process was disable DNSSEC and re-enable it on my OpenWRT router, which I had done several months prior, right before I started documenting, and so now is as good a time as any to record what I did.
Side note, I just purchased a Protectli v1211 to serve as an OpnSense firewall + router, and I plan to turn my OpenWRT router into a simple single-purpose WAP, so what I am recording here will likely be outmoded in a month or two, but regardless - here it is.
A note before I begin: all configuration is done via the luci web interface, I haven’t delved deep enough to figure my way around the uci CLI interface - counter to my usual approach to things, I know.
DNSSEC setup on OpenWRT
System → Software
- Update lists
- Search for ‘stubby’, install it
Use localhost
as DNS on the LAN interface
Network → Interfaces → lan → Advanced Settings
- Use custom DNS servers
127.0.0.1
0::1
- DNS weight: 20
Note
For the WAN and WAN6 interfaces, must use an upstream DNS provider that supports DNSSEC. I opted for Google DNS.
Use custom upstream IPv4 DNS on the WAN interface
Network → Interfaces → wan → Advanced Settings
- Use custom DNS servers
8.8.8.8
8.8.4.4
- DNS weight: 50
Use custom upstream IPv6 DNS on the WAN6 interface
Network → Interfaces → wan6 → Advanced Settings
- Use custom DNS servers
2001:4860:4860::8888
2001:4860:4860::8844
- DNS weight: 55
Network → DHCP and DNS → Forwards
0::1#5453
127.0.0.1#5453
Network → DHCP and DNS → Resolv & Hosts Files
- Ignore resolv file: checked
- Strict order: checked
”Normal” DNS setup on OpenWRT
Basically, revert the previous options. Some of these might be fine if left as is, but I reverted them to the defaults if I was unsure. OpenWRT seems to come with sane defaults and they were working before I enabled DNSSEC.
You can use still use custom upstream DNS on the WAN interfaces, but make sure to remove:
localhost
DNS on LAN interface and DNS weight- DNS
localhost
forwards under Network → DHCP and DNS → Forwards - Uncheck “Ignore resolv file” and “Strict order” under Network → DHCP and DNS → Resolv & Hosts files
- I also uninstalled stubby to be on the safe side
EOF