Problem
*.lndo.site sites wouldn't resolve. Lando publishes a real public wildcard DNS record for *.lndo.site pointing at 127.0.0.1, so this normally needs no local setup at all.
Queries timed out rather than returning NXDOMAIN, and did so against every resolver — including 1.1.1.1 and 8.8.8.8 directly.
Diagnosis
The give-away was that only loopback-valued answers failed:
| Query | Answer | Result |
|---|---|---|
dig google.com @1.1.1.1 |
public IPs | works |
dig lndo.site @1.1.1.1 (apex) |
public IPs | works |
dig SOA lndo.site @198.51.44.2 (authoritative) |
public data | works, aa flag |
dig test.lndo.site @ any resolver |
127.0.0.1 |
timeout |
dig 127-0-0-1.sslip.io @1.1.1.1 |
127.0.0.1 |
timeout |
test.lndo.site over DoH |
127.0.0.1 |
works |
Same server, same zone — only responses containing 127.0.0.1 vanished. That is the Virgin Media Hub's DNS rebind protection, implemented as a silent packet drop rather than a rewrite. Hence the timeout instead of an error.
Confirming with DNS-over-HTTPS, which the Hub can't inspect:
curl -s 'https://cloudflare-dns.com/dns-query?name=test.lndo.site&type=A' \
-H 'accept: application/dns-json'
# -> "data": "127.0.0.1"
Note that switching upstream resolver does not help — the interference is on the local path, so it's the encryption that matters, not the server.
Solution
Encrypted DNS via systemd-resolved. One drop-in file, no extra daemon:
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo tee /etc/systemd/resolved.conf.d/90-dot.conf >/dev/null <<'EOF'
[Resolve]
DNS=1.1.1.1#cloudflare-dns.com 1.0.0.1#cloudflare-dns.com
FallbackDNS=9.9.9.9#dns.quad9.net 149.112.112.112#dns.quad9.net
DNSOverTLS=yes
Domains=~.
EOF
sudo systemctl restart systemd-resolved
Domains=~. is essential — without it the DHCP-supplied Virgin resolvers still win for most queries. Ubuntu doesn't ship resolved.conf.d, hence the mkdir -p.
Verify:
resolvectl query test.lndo.site # -> 127.0.0.1, "encrypted transport: yes"
resolvectl status | grep -E 'DNSOverTLS|Current DNS'
Per-link entries still listing 194.168.4.100 are harmless; Domains=~. means they go unused.
Caveats
DNSOverTLS=yesis strict: on a network blocking port 853 (some hotel/corporate wifi) DNS fails outright rather than falling back to droppable plaintext.- Still requires internet, since
*.lndo.siteis an internet-hosted record.
Offline / network-independent alternative
Answer the zone locally with dnsmasq, but scope it through resolved rather than replacing the system resolver — this avoids the usual port-53 conflicts:
# /etc/dnsmasq.d/lando.conf
listen-address=127.0.0.54
bind-interfaces
no-resolv
address=/lndo.site/127.0.0.1
# /etc/systemd/resolved.conf.d/lando.conf
[Resolve]
DNS=127.0.0.54
Domains=~lndo.site
~lndo.site is routing-only, so just that zone goes to dnsmasq and everything else keeps using DoT. The query never leaves the machine, so the Hub is bypassed entirely and it works offline.
For a handful of sites, plain /etc/hosts entries also work (no wildcards) — lando info lists the hostnames.