84 lines
3.7 KiB
Markdown
84 lines
3.7 KiB
Markdown
# dns.windy.lan — AdGuard Home LAN DNS
|
|
|
|
## Role and access
|
|
|
|
| Item | Value |
|
|
|---|---|
|
|
| IPv4 | `192.168.66.36` |
|
|
| SSH | `ssh -4 windy@192.168.66.36` |
|
|
| OS | Debian 12 |
|
|
| **Host** | **PVE VM 120 (`pihole`)** — not a separate physical host (verified 2026-08-09) |
|
|
| Roles | AdGuard Home LAN DNS; Mihomo explicit-proxy service |
|
|
|
|
Use `windy` for routine inspection. Do not store credentials, AdGuard Home
|
|
user hashes, proxy subscriptions, or query-log contents in this repository.
|
|
|
|
## AdGuard Home
|
|
|
|
AdGuard Home runs as the root-owned `adguardhome` Docker container in host
|
|
network mode. The persistent deployment is `/opt/adguardhome`:
|
|
|
|
| Item | Path / setting |
|
|
|---|---|
|
|
| Compose file | `/opt/adguardhome/docker-compose.yml` |
|
|
| Configuration | `/opt/adguardhome/conf/AdGuardHome.yaml` |
|
|
| Mutable data and query logs | `/opt/adguardhome/work` |
|
|
| DNS | TCP/UDP `53`; intentionally no source ACL so both LAN55 and LAN66 work |
|
|
| HTTP UI | `192.168.66.36:80`; LAN66 only |
|
|
| Image policy | Pin the reviewed image digest; do not use `latest` for a rebuild |
|
|
|
|
The EdgeRouter DHCP service advertises this host as DNS for LAN55 and LAN66.
|
|
Do not enable AdGuard Home DHCP unless the existing EdgeRouter DHCP service is
|
|
explicitly migrated and disabled first.
|
|
|
|
`agh-ui-access.service` loads `/etc/nftables-agh-ui-access.nft`. It permits
|
|
`192.168.66.0/24` (LAN66) and `192.168.55.0/24` (LAN55, for Home Assistant
|
|
integration) to TCP/80 and drops other TCP/80 input. It deliberately
|
|
does **not** restrict DNS, SSH, Docker, or Mihomo ports. Keep it isolated from
|
|
Docker-managed nftables tables.
|
|
|
|
> 2026-08-12: added `192.168.55.0/24` allow so HAOS (`192.168.55.11`) can reach
|
|
the HTTP API on `:80` for the Home Assistant AdGuard Home integration; applied
|
|
via `sudo systemctl restart agh-ui-access.service` (file edited first, then
|
|
reloaded; syntax verified with `nft -c`). Other firewalls (EdgeRouter LAN_IN/
|
|
LAN_OUT inactive, PVE zero rules) were already open for LAN55->LAN66.
|
|
|
|
Current query-log policy is 14 days with anonymized client IPs. Check free
|
|
space before increasing retention. DNSSEC is disabled because the selected
|
|
upstream path did not pass the known-bad-signature validation check; do not
|
|
enable it without re-testing validated upstreams.
|
|
|
|
The compatible names `hass.windy.lan` and legacy `hass.local` currently point
|
|
to the same Home Assistant address. Migrate clients to `hass.windy.lan`; keep
|
|
the legacy rewrite until its planned retirement.
|
|
|
|
## Mihomo and routing boundary
|
|
|
|
Mihomo listens for explicit proxy traffic on this host. Read-only checks found
|
|
no host TUN policy routing or local nftables/iptables transparent-redirection
|
|
rules. A Mihomo listener alone does not mean it intercepts AdGuard Home
|
|
traffic. The default gateway (`gfw.windy.lan`) can still affect outbound
|
|
traffic, so inspect its OpenClash rules separately before changing upstream
|
|
routing.
|
|
|
|
## Safety
|
|
|
|
- Back up `/opt/adguardhome/conf/AdGuardHome.yaml` and `docker-compose.yml`
|
|
before changing either, then run the official `--check-config` command.
|
|
- Recreate only the AdGuard Home container and verify DNS A/AAAA, local names,
|
|
the UI from LAN66, and the UI denial from LAN55 afterwards.
|
|
- Private PTR currently has no local authoritative source: direct EdgeRouter
|
|
PTR queries return NXDOMAIN. Do not point `local_ptr_upstreams` at the
|
|
router until that source exists.
|
|
|
|
See [the health runbook](../runbooks/adguard-home-health.md) and
|
|
[the official configuration review](../docs/adguard-home-official-review-2026-08.md).
|
|
|
|
Routine health through Ansible (`--limit adguardhome`), with a daily timer +
|
|
email alerting like the other active hosts:
|
|
|
|
```bash
|
|
cd ansible
|
|
ansible-playbook playbooks/health-report.yml --limit adguardhome
|
|
```
|