Current Network — Live Snapshot¶
Baseline capture: 2026-06-03 (read-only UniFi API scan of UDM SE) Last doc update: 2026-06-19 (DNS cutover progress — see §3)
DNS cutover in progress
AdGuard is deployed on 192.168.6.17 and resolving. UDM WAN + all-VLAN
DHCP still need owner confirmation at 192.168.6.17. PiHole
(192.168.6.80) remains in parallel until soak completes. See
AdGuard service page and
Phase 7 §8.
Source (baseline): uv run python -m scripts.labctl unifi dump
Controller: UDM SE — UniFi Network 10.4.57 (just updated from 10.4.46;
gateway uptime was ~6 minutes at capture, i.e. a reboot had just occurred)
This document is the as-built picture of the network at capture time. It is hand-authored from a live scan, not generated from inventory, so where inventory or the older device-VLAN mapping disagree, this document reflects reality. For the intended/design view see network.md; for firewall posture see firewall-live.md.
Regenerate the underlying data anytime with
uv run python -m scripts.labctl unifi dump > snapshot.json. Thezones,firewall-policies,networks,clients, anddevicessubcommands pull individual slices.
1. Physical topology¶
How the wired backbone and access points are actually cabled, from the UniFi device table (uplink MAC + port).
graph TD
ISP["ISP — Cable"]
MODEM["Cable Modem (UCI)<br/>192.168.100.1<br/>d0:21:f9:05:8f:21"]
UDM["UDM SE (Gateway)<br/>WAN1 98.167.204.33 / eth8<br/>60:22:32:26:2f:89"]
WAN2["WAN2 / eth9<br/>(enabled, link DOWN — failover)"]
SW["USW Pro Max 16 PoE<br/>192.168.1.58<br/>28:70:4e:32:67:6d"]
FLEX["USW Flex Mini<br/>192.168.1.95"]
APH["Hallway AP — U7 Pro<br/>192.168.1.110 · 20 clients"]
APD["Dining AP — AC Pro<br/>192.168.1.34 · 7 clients"]
WIRED["Wired endpoints<br/>(servers, cameras, IoT, printers)"]
WIFI["Wi-Fi clients<br/>(4 SSIDs → VLANs)"]
ISP --> MODEM --> UDM
WAN2 -.-> UDM
UDM -->|port 11| SW
SW -->|port 2| FLEX
SW -->|port 13| APH
SW -->|port 14| APD
SW --> WIRED
FLEX --> WIRED
APH --> WIFI
APD --> WIFI
| Device | Model | Mgmt IP | Uplink → | Clients |
|---|---|---|---|---|
| UDM SE | UDMPROSE | 98.167.204.33 (WAN) |
Cable modem (port 1 / eth8) | 41 |
| USW Pro Max 16 PoE | USPM16P | 192.168.1.58 |
UDM port 11 | 20 |
| USW Flex Mini | USMINI | 192.168.1.95 |
Pro Max port 2 | 1 |
| Hallway AP (U7 Pro) | U7PRO | 192.168.1.110 |
Pro Max port 13 | 20 |
| Dining AP (AC Pro) | U7PG2 | 192.168.1.34 |
Pro Max port 14 | 7 |
| Cable Modem | UCI | 192.168.100.1 |
— (WAN) | 1 |
Dual-WAN: WAN1 (eth8, weighted) is up; WAN2 (eth9, failover-only) is
enabled but the link is down — expected if no second ISP is connected.
2. Layer-3 / VLAN topology¶
Every routed network on the UDM SE and the firewall zone it belongs to (zones drive the inter-VLAN policy — see firewall-live.md).
graph TD
UDM["UDM SE<br/>inter-VLAN router + DHCP"]
subgraph EXTERNAL["Zone: External"]
W1["WAN1 / Internet 1<br/>98.167.204.33"]
W2["WAN2 / Internet 2 (down)"]
end
subgraph INTERNAL["Zone: Internal (trusted)"]
V1["VLAN 1 · GenPop<br/>192.168.1.0/24"]
V2["VLAN 2 · Personal<br/>192.168.3.0/24"]
V4["VLAN 4 · Servers<br/>192.168.6.0/24"]
V10["VLAN 10 · Management<br/>192.168.10.0/24"]
end
subgraph IOTZ["Zone: IoT (untrusted)"]
V5["VLAN 5 · IoT<br/>192.168.7.0/24"]
V3["VLAN 3 · Appliances<br/>192.168.5.0/24"]
end
subgraph SECZ["Zone: Security"]
V6["VLAN 6 · Security/Cameras<br/>192.168.8.0/24"]
end
subgraph VPNZ["Zone: Vpn"]
VPN["VPN Server pool<br/>192.168.2.0/24"]
end
UDM --- W1
UDM -.- W2
UDM --- V1 & V2 & V4 & V10
UDM --- V5 & V3
UDM --- V6
UDM --- VPN
| VLAN | Name | Subnet | Gateway | DHCP pool | Zone | DHCP-handed DNS |
|---|---|---|---|---|---|---|
| 1 | GenPop | 192.168.1.0/24 | .1 | .6–.254 | Internal | gateway (dhcpd_dns off) |
| 2 | Personal | 192.168.3.0/24 | .1 | .6–.254 | Internal | gateway |
| 3 | Appliances | 192.168.5.0/24 | .1 | .6–.254 | IoT | gateway |
| 4 | Servers | 192.168.6.0/24 | .1 | .6–.254 | Internal | gateway |
| 5 | IoT | 192.168.7.0/24 | .1 | .6–.254 | IoT | gateway |
| 6 | Security | 192.168.8.0/24 | .1 | .6–.254 | Security | gateway |
| 10 | Management | 192.168.10.0/24 | .1 | .10–.100 | Internal | gateway |
| — | VPN Server | 192.168.2.0/24 | .1 | — | Vpn | — |
Note: Appliances (VLAN 3) is grouped into the IoT firewall zone, not the Internal zone — so appliances are treated as untrusted for inter-VLAN purposes.
Wi-Fi SSID → VLAN (live)¶
| SSID | Security | Network → VLAN |
|---|---|---|
| The LAN Before Time | WPA2-PSK | GenPop → 1 |
| IsThisTheKrustyKrab | WPA2-EAP | Personal → 2 |
| Rebellious Amish Family | WPA2-EAP | Appliances → 3 |
| HotSignalsInYourArea | WPA2-EAP | IoT → 5 |
3. DNS resolution path¶
3a. Baseline at capture (2026-06-03)¶
This was the actual resolver chain at the June scan. It differed from the design in network.md.
graph LR
C["Any client<br/>(all VLANs)"]
GW["VLAN gateway<br/>192.168.x.1 (UDM)"]
PIHOLE["Blocktopus / PiHole<br/>192.168.6.80<br/>(WAN1 manual DNS)"]
UP["Upstream / Internet"]
ADG["AdGuard Home<br/>192.168.6.17<br/>(NOT in DHCP/DNS path)"]
C -->|"DHCP hands out gateway as DNS"| GW
GW -->|"forwards to WAN DNS"| PIHOLE
PIHOLE --> UP
ADG -.->|"documented target,<br/>not used at scan time"| C
- Per-VLAN DHCP DNS was disabled (
dhcpd_dns_enabled: false) on every network — clients received the UDM gateway as DNS. - WAN1 manual DNS was
192.168.6.80(Blocktopus / legacy PiHole). IPv6 DNS also pointed at Blocktopus. - AdGuard on
192.168.6.17was deployed in repo but not in the path. See observation O1.
3b. Target and current cutover (2026-06-19)¶
Target: all VLANs (and UDM WAN upstream) use AdGuard at 192.168.6.17.
graph LR
C["Clients (all VLANs)"]
ADG["AdGuard + Unbound<br/>192.168.6.17:53<br/>infra-services"]
UB["Root DNS"]
RW["Rewrites<br/>*.lab.local<br/>*.infra.realemail.app"]
C -->|"DHCP DNS or direct query"| ADG
ADG --> RW
ADG --> UB
| Item | Status (2026-06-19) |
|---|---|
| AdGuard + Unbound running | Yes |
| Rewrites + infra wildcard | Yes |
| UFW LAN → :53 on infra-services | Yes |
| Tailscale prefer-main (Servers VLAN) | Yes — same-L2 DNS to .17 works |
UDM WAN1 DNS → .17 |
Owner action — confirm in UI |
Per-VLAN DHCP DNS → .17 |
Owner action — most VLANs; Servers may use .17 or gateway |
| IPv6 DNS on UDM | Not configured (AdGuard IPv4 only) |
| PiHole decom (LXC 104) | After 48h parallel soak |
Servers VLAN note: infra-services advertises 192.168.6.0/24 on Tailscale.
Without prefer-main routing, replies to same-subnet clients go out
tailscale0 and DNS times out. Fix is in the Ansible tailscale role — see
AdGuard — Servers VLAN caveat.
Verify from any VLAN:
Verify from Servers VLAN (e.g. saltierpoop): same command must succeed before PiHole is turned off.
4. Live device inventory (by VLAN)¶
48 clients were associated at capture. Entries marked (no lease) were
associated at L2 but had no IPv4 in stat/sta at scan time.
VLAN 4 — Servers (192.168.6.0/24)¶
| IP | Name | Conn |
|---|---|---|
| 192.168.6.17 | infra-services | wired |
| 192.168.6.71 | Proxbox (prox) | wired |
| 192.168.6.80 | Blocktopus (PiHole) | wired |
| 192.168.6.98 | Whrrr — Recordurbate VM | wired |
| 192.168.6.100 | Whrrr — Ubuncap VM | wired |
| 192.168.6.199 | Proxbox — pulse | wired |
| 192.168.6.214 | Whrrr — LAN2 | wired |
| 192.168.6.215 | Whrrr — LAN1 (primary) | wired |
| 192.168.6.222 | octoprint | wired |
| 192.168.6.227 | Proxbox — HAOS (poopcastle) | wired |
| 192.168.6.243 | saltierpoop | wired |
| (no lease) | harbor-registry | wired |
| (no lease) | Whrrr — LAN3 | wired |
| (no lease) | Proxbox — influxdb | wired |
VLAN 2 — Personal (192.168.3.0/24)¶
| IP | Name | Conn |
|---|---|---|
| 192.168.3.17 | CaptainKangapoo (PC) | wired |
| 192.168.3.37 | Apple MBP M4 (Ben) | Wi-Fi (KrustyKrab) |
| 192.168.3.60 | OnePlus 8 Pro | Wi-Fi (KrustyKrab) |
| 192.168.3.85 | Samsung | Wi-Fi (LAN Before Time) |
| 192.168.3.107 | LM-L06YF9KDC1 (MacBook) | Wi-Fi (LAN Before Time) |
| 192.168.3.169 | iPhone | Wi-Fi (KrustyKrab) |
| 192.168.3.240 | LM-L06YF9KDC1 (wired NIC) | wired |
| (no lease) | Fiio R7 | Wi-Fi |
VLAN 5 — IoT (192.168.7.0/24)¶
| IP | Name | Conn |
|---|---|---|
| 192.168.7.22 | Xiaomi H3 Air Purifier | Wi-Fi |
| 192.168.7.93 | Govee Lamp (Bedside) | Wi-Fi |
| 192.168.7.106 | Apple TV 4K (Bedroom) | wired |
| 192.168.7.107 | Aqara Doorbell G4 | Wi-Fi |
| 192.168.7.124 | Apple HomePod (Kitchen) | Wi-Fi |
| 192.168.7.145 | Petlibro Cat Feeder #2 | Wi-Fi |
| 192.168.7.156 | Neakasa M1 Litter Box | Wi-Fi |
| 192.168.7.159 | Blueair DustMagnet 5415i | Wi-Fi |
| 192.168.7.168 | Google Nest Mini (Living Room) | Wi-Fi |
| 192.168.7.169 | Molly & Cody Smart Feeder (Tuya) | Wi-Fi |
| 192.168.7.184 | Yale Lock (Front Door) | Wi-Fi |
| 192.168.7.212 | roborock-vacuum-a288 | Wi-Fi |
| 192.168.7.241 | ecobee (BooBEE) | Wi-Fi |
| (no lease) | SLZB-06M Zigbee coordinator | wired |
| (no lease) | ChargePoint Charger | Wi-Fi |
VLAN 3 — Appliances (192.168.5.0/24)¶
| IP | Name | Conn |
|---|---|---|
| 192.168.5.39 | Fellow Aiden (coffee brewer) | Wi-Fi |
| 192.168.5.59 | Prusa LayerSlut (3D printer) | Wi-Fi |
| 192.168.5.71 | Rheem EcoNet (water heater) | Wi-Fi |
| 192.168.5.187 | Rollo Label Printer | Wi-Fi |
| 192.168.5.239 | GE Appliance (GEMODULE) | Wi-Fi |
| 192.168.5.247 | Bosch Dishwasher | Wi-Fi |
VLAN 6 — Security (192.168.8.0/24)¶
| IP | Name | Conn |
|---|---|---|
| 192.168.8.11 | G5 Flex (rack monitor) | wired |
| 192.168.8.76 | G4 Pro | wired |
| 192.168.8.173 | G4 Pro | wired |
VLAN 1 — GenPop (192.168.1.0/24)¶
| IP | Name | Conn |
|---|---|---|
| 192.168.1.34 | Dining AP (infra) | wired |
| 192.168.1.58 | USW Pro Max 16 (infra) | wired |
| 192.168.1.95 | USW Flex Mini (infra) | wired |
| 192.168.1.110 | Hallway AP (infra) | wired |
| 192.168.1.82 | Aqara Hub M2 (drift — should be IoT) | Wi-Fi |
| (no lease) | SamsungPrinter (pending move) | Wi-Fi |
VLAN 10 — Management (192.168.10.0/24)¶
No clients — reserved for admin / out-of-band.
5. WAN exposure (port forwards)¶
| Service | WAN port | → Internal target |
|---|---|---|
| HTTP | 80 | 192.168.6.243:80 (saltierpoop) |
| HTTP_Too | 8080 | 192.168.6.243:8080 |
| HTTPS | 443 | 192.168.6.243:443 |
No SMB/445 forward is present (consistent with the Phase 0 hotfix).
6. Drift & anomalies¶
A reboot/firmware-update had just occurred at capture, and several items differ from inventory/design. These are catalogued — with evidence and suggested checks — in Network Observations (2026-06-03).