Here is the diagram of wrtnova.sh default DNS path:
client (vpn.lan)
| plain DNS :53 (firewall-redirected, can't escape)
v
dnsmasq (per-interface vpn_lan instance)
| forwards to 192.168.15.1#5354
v
AdGuard Home (filtering + cache)
| DoH / DoQ --- ENCRYPTED ---
v
Quad9 / Cloudflare / Google <- what your leak test sees
DNS path with ADGUARD_MAIN_DNS=1 (AdGuard as primary resolver):
client (vpn.lan)
| plain DNS :53 (firewall-redirected)
v
AdGuard Home (192.168.15.1:53, primary + filtering + cache)
| \
| *.lan / *.vpn.lan \ everything else
v v
dnsmasq :54 (local names + DHCP) DoH / DoQ --- ENCRYPTED ---
|
v
Quad9 / Cloudflare / Google <- what your leak test sees
-
The "leak". A leak test shows whoever answers your query, and AdGuard answers via encrypted DoH/DoQ to Quad9/Cloudflare/Google. Seeing them is correct. The queries are encrypted, so neither your ISP nor Mullvad can read them. A genuine leak is plaintext port 53 reaching your ISP outside the tunnel, and that can't happen here: every client is forced through its own dnsmasq and port 53 is firewall-redirected. If you'd rather use Mullvad's own DNS, swap AdGuard's upstreams.
-
"vpn_lan forwards to lan and lan forwards to vpn_lan". That's split-horizon DNS, not traffic routing. It only lets a VPN client resolve something.lan and a LAN client resolve something.vpn.lan. Where your packets go is separate: traffic is forwarded lan -> WG zone with a kill switch.
-
"AdGuard intercepts vpn.lan requests". The VPN network is part of the LAN firewall zone, so it inherits the same DNS interception and sends queries to AdGuard. Expected.
-
Blank pages / slow first load. MTU. WireGuard defaults to 1420 and large packets black-hole if your path is smaller. Lower the WireGuard interface MTU and test 1400, 1360, 1320, 1280 until it's stable. The Mullvad app does this automatically; on the router it's manual.
One more note on the design intent: sending DNS through AdGuard over DoH/DoQ is deliberate. Even a no-logs VPN could see every domain if you use their plain DNS - you're just trusting them not to. WrtNova encrypts queries to Quad9/Cloudflare/Google instead. The leak test showing those resolvers is the model working, not failing.