Files
vps/docs/lan-overview.md
T
windyboy 27fe9c078e docs: archive historical planning documents and fix references
Move self-described historical/upstream docs to docs/archive/:
- agent-runbook-guide.md
- lan-core-switch-upgrade-plan.md
- lan-rb5009-upgrade.md
- se5420-review-claim-verification-2026-08.md

Update archive/README.md manifest and fix relative links in active docs
and archived docs. Update AGENTS.md docs/ layout description.
2026-08-22 19:34:05 +08:00

247 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LAN network overview
A standalone, live-verified map of the **internal LAN** hosts and the software
deployed on them. Written for a future self / another agent to get oriented fast.
Focused per-host facts and runbooks live in [`../hosts/`](../hosts/) and are linked
from each section below.
> **Scope:** this document covers the real LAN only. It deliberately excludes the public VPS
> hosts (`mx2`, `us2`, `us4`, `hk2`, `synapse`) and any dormant/stub software. The
> WireGuard VPN server is external (`us4.wsvc.info`); there is **no WireGuard interface on
> the LAN side**.
> **Verified live on 2026-08-06** by read-only SSH from the WSL client. No
> changes were made. `gfw.windy.lan` root SSH was re-verified the same day after
> the key was installed; its facts below are from the fresh probe.
>
> **IPv6 re-verified 2026-08-20** (read-only): UniFi controller `Default`
> network IPv6 enabled (SLAAC/RA), both APs hold global SLAAC addresses, and
> `zhiqiangf` key-only AP SSH re-confirmed. See
> [unifi-network.md](unifi-network.md).
---
## Topology
```
Internet
│ PPPoE (pppoe0, MTU 1492, IPv6 PD /60)
┌───────────────────────────────────────────────┐
│ gw — EdgeRouter X (192.168.66.254) │
│ eth0 = LAN66 · switch0(eth1-3) = LAN55 │
│ WAN_IN active on pppoe0 (default-drop) │
│ port-forwards: hass/transmission/ssh/openvpn │
LAN66 └───────────────┬──────────────────────────────┘
(192.168.66.0/24) │
│ gfw.windy.lan — OpenWrt / OpenClash (192.168.66.1)
│ dns.windy.lan — AdGuard Home + Mihomo (192.168.66.36)
│ ubnt — UniFi Network Controller (192.168.66.46)
```
> **SE5420 live (2026-08-22):** TP-Link `TL-SE5420` (purchased 2026-08-09) is
> online — management `192.168.66.253` reachable, web UI on :80/:443; LAN55
> 上联为 ER-X `switch0` **单口**`eth1` up、`eth2`/`eth3` down2026-08-22
> 只读核实)→ `switch0` 不再是 LAN55 全量抓包点(同段有线单播在 SE5420 本地
> 交换),全量点只能靠 SE5420 port mirroring。迁移状态见部署计划
> [lan-se5420-deployment-guide.md](lan-se5420-deployment-guide.md). Design/planning refs:
> [lan-erx-se5420-network.md](lan-erx-se5420-network.md),
> [lan-core-switch-upgrade-plan.md](archive/lan-core-switch-upgrade-plan.md).
---
## Hosts
| Host | Role | SSH | IPv4 | Facts |
|------|------|-----|------|-------|
| **gw** | EdgeRouter X primary LAN gateway | `ssh -4 zhiqiang@192.168.66.254` | `192.168.66.254` | [hosts/gw.md](../hosts/gw.md) |
| **PVE** | Proxmox host (`.66.26`/vmbr0 · `.55.26`/vmbr1) — hosts gfw/dns/ubnt VMs | `ssh -4 root@192.168.66.26` | `192.168.66.26` | — |
| **gfw.windy.lan** | OpenWrt LAN gateway / OpenClash — **PVE VM 140** | `ssh -4 root@192.168.66.1` | `192.168.66.1` | [hosts/gfw.windy.lan.md](../hosts/gfw.windy.lan.md) |
| **dns.windy.lan** | AdGuard Home LAN DNS + Mihomo explicit proxy — **PVE VM 120** (`pihole`) | `ssh -4 windy@192.168.66.36` | `192.168.66.36` | [hosts/dns.windy.lan.md](../hosts/dns.windy.lan.md) |
| **ubnt** | UniFi Network Controller — **PVE VM 160** | `ssh -4 windy@192.168.66.46` | `192.168.66.46` | [hosts/ubnt.md](../hosts/ubnt.md) |
| **hass.windy.lan** | Home Assistant (HAOS) — **x88 Pro physical box** (LAN55) | `ssh hassio@hass.windy.lan` | `192.168.55.11` | [hosts/hass.windy.lan.md](../hosts/hass.windy.lan.md) |
| **NAS/FreeNAS** | NAS; `transmission` jail runs here (`.51`) | — | — | — |
| **U6 Lite** | UniFi AP (LAN66) | `ssh -4 zhiqiangf@192.168.66.6` | `192.168.66.6` | [docs/unifi-network.md](../docs/unifi-network.md) |
| **UAP-AC-Lite** | UniFi AP (LAN55) | `ssh -4 zhiqiangf@192.168.55.5` | `192.168.55.5` | [docs/unifi-network.md](../docs/unifi-network.md) |
> **Positioning facts:** `dns`/`ubnt`/`gfw` are VMs on PVE; `haos` is a **physical x88 Pro
> box** (HAOS bare-metal, `machine: green`), not a PVE VM (corrected 2026-08-15).
> `transmission` is a FreeNAS/NAS jail. Physical SE5420 ports: gw, PVE, haos, NAS,
> U6, UAP-AC-Lite, and wired PCs. See [lan-se5420-deployment-guide.md](lan-se5420-deployment-guide.md) §1.
---
## gw — EdgeRouter X (LAN gateway)
| Item | Value |
|------|-------|
| Platform | EdgeOS v3.0.1 (Build 5862409), kernel 4.14.54-UBNT |
| Interfaces | `eth0`=192.168.66.254/24 (LAN66) · `switch0`=192.168.55.254/24 (LAN55) · `eth4`=WAN PPPoE · `pppoe0`=WAN default route (MTU 1492, IPv6 PD /60) |
| WAN | `pppoe0`=113.68.54.159 (PPPoE) · IPv6 SLAAC /64 on both LANs |
| Firewall | `WAN_IN` **active** on pppoe0 (established/related accept, invalid drop, default drop) · `LAN_IN`/ `LAN_OUT` defined but **inactive** (not attached) |
| DHCP | LAN1 (66) + LAN2 (55), 24h leases, client DNS = `192.168.66.36`, pools .38.243, static mappings for infra hosts |
| DNS | `service dns forwarding` cache 512, listen on eth0 + switch0; DHCP advertises `192.168.66.36` as client DNS |
| Port-forwards | `hass`→192.168.55.11:8123 · `transmission`→192.168.66.51:51413 · `ssh`→192.168.66.36:22 (orig 5822) · `openvpn`→192.168.66.32:1194 · WAN iface pppoe0 |
| Management | SSH TCP 22 · EdgeOS GUI HTTP 80 / HTTPS 443 |
**Static DHCP mappings (LAN66):** `OnePlus-12`=.37, `gfw`=.1, `hp-nas`=.32, `pihole`=.36, `pve`=.26, `transmission`=.51, `ubnt-6`=.6, `ubnt-app`=.46, `windy-pc`=.99. LAN55: `Aqara-Hub-M3-10CB`=.248, `SmartThings-Station`=.48, `espressif`=.47,
`hass`=.11, `hass-wifi`=.250, `ihost`=.12, `midea_ac_0418`=.10,
`midea_e3_0198`=.42, `roborock-wm-a141`=.43, `samsung-hub`=.251,
`matter`=.41 (added 2026-08-20).
> **Note:** `LAN_IN`/`LAN_OUT` are defined but not applied to an interface, so LAN55
> and LAN66 are bidirectionally reachable by default. Do not rely on those rules as
> an access boundary. See [hosts/gw.md](../hosts/gw.md).
---
## gfw.windy.lan — OpenWrt / OpenClash gateway
| Item | Value |
|------|-------|
| IPv4 | `192.168.66.1` |
| OS | **ImmortalWrt 25.12.0** (r37854), Linux 6.12.87, x86/64 |
| SSH | `ssh -4 root@192.168.66.1` (key-only, verified 2026-08-06) |
| OpenClash | `/etc/openclash/clash` (clash_meta core) + config `/etc/openclash/pass-cat.yaml` |
| Mode | **fake-ip + TPROXY transparent proxy** (`operation_mode=fake-ip`, `en_mode=fake-ip`, `proxy_mode=rule`) |
| DNS | dnsmasq → clash DNS `127.0.0.1#7874`; clash `nameserver` = mosdns `127.0.0.1:6052` (DIRECT 规则真实 IP 解析,非客户端路径) |
| nft | `table inet fw4` with OpenClash TPROXY/redirect + DNS-hijack rules; residual `table inet passwall` (0 packets, unused) |
**OpenClash listeners:** HTTP `7890` · SOCKS `7891` · Redirect `7892` · Mixed `7893` · TPROXY `7895` · DNS `7874` · dashboard `9090`. `8443` is **not** an OpenClash listener (only in its TLS-sniffing port list).
> **Operational note:** a LAN client request logged as `<client> --> localhost:8443` + refusal is normally an explicit-proxy client sending its own loopback to the gateway. Fix the
> originating host's `NO_PROXY`/`no_proxy` config; do not create a listener on this router to mask it. See [docs/unifi-openclash-localhost.md](../docs/unifi-openclash-localhost.md).
---
## dns.windy.lan — AdGuard Home + Mihomo (DNS & proxy host)
| Item | Value |
|------|-------|
| IPv4 | `192.168.66.36` |
| OS | Debian 12 (kernel 6.1.0-43) |
| SSH | `ssh -4 windy@192.168.66.36` |
| AdGuard Home | Docker container `adguardhome` (host network, pinned digest), `/opt/adguardhome` |
| DNS | TCP/UDP `53` (no source ACL — serves both LAN55 and LAN66) |
| UI | `192.168.66.36:80` (LAN66 only via nft `agh_ui_access`) |
| Upstreams | `https://dns.alidns.com/dns-query` + `https://doh.pub/dns-query` (load-balanced) · bootstrap `223.5.5.5`/`223.6.6.6` · fallback `https://adg.chans.xyz/dns-query` |
| DNSSEC | **disabled** (upstream path failed known-bad-signature check) |
| Rewrites | `hass.local` + `hass.windy.lan` → same Home Assistant address |
| Query log | 14 days, anonymized client IPs |
| Mihomo | **systemd service** (NOT Docker) — `/usr/local/bin/mihomo -d /etc/mihomo`, config `/etc/mihomo/config.yaml` |
| Mihomo listeners | HTTP `7890` · SOCKS `7891` · Mixed `7892` · DNS `1053` · external-controller `9090` · `allow-lan: true` · mode `rule` |
| nft | `table inet agh_ui_access` permits only `192.168.66.0/24` to TCP/80, drops other TCP/80 input |
**Routing boundary:** read-only checks found no host TUN policy routing or nftables/iptables transparent-redirection on this host. A Mihomo listener alone does not mean it intercepts AdGuard traffic; the default gateway (`gfw.windy.lan`) can still affect outbound, so inspect its OpenClash rules separately before changing upstream routing.
---
## ubnt — UniFi controller host
| Item | Value |
|------|-------|
| IPv4 | `192.168.66.46` |
| Compose | `/home/windy/unifi-9/compose.yml` · service `unifi` · container `unifi-controller` |
| Image | `jacobalberty/unifi:v9.5.21` (host network) |
| HTTPS UI | `https://192.168.66.46:8443` |
| Inform | `http://192.168.66.46:9080/inform` (not 8080) |
| Health | `docker inspect --format '{{.State.Health.Status}}' unifi-controller``healthy` (2026-08-06) |
| Also running | **dockge** (`louislam/dockge:1`, healthy) — compose UI, `/opt/stacks` |
| Dormant | `semaphoreui` (semaphore + postgres, exited 9 months) · `homarr` dir (no container) |
**Proxy contract:** the container keeps `NO_PROXY`/`no_proxy` enabled with
`localhost,127.0.0.1,::1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12` so a controller
request to `localhost:8443` stays local instead of going to the OpenClash gateway.
See [docs/unifi-openclash-localhost.md](../docs/unifi-openclash-localhost.md).
---
## hass.windy.lan — Home Assistant (HAOS)
| Item | Value |
|------|-------|
| IPv4 | `192.168.55.11` (LAN55) |
| DNS | `hass.windy.lan` (AdGuard rewrite; legacy `hass.local` alias) |
| SSH | `ssh hassio@hass.windy.lan` (key-only, verified 2026-08-13) |
| Web UI | `http://hass.windy.lan:8123` |
| WAN | gw port-forward `hass``192.168.55.11:8123` |
| Platform | HAOS on physical x88 Pro box; kernel `6.1.115-haos` (aarch64), `machine: green` |
---
## Managed access points
| Name | Model | Mgmt IP | Firmware | Network | Inform |
|------|-------|---------|----------|---------|--------|
| U6 Lite | U6 Lite (UAL6) | `192.168.66.6` | 6.7.54.15663 | LAN66 | `:9080` |
| UAP-AC-Lite | U7LT | `192.168.55.5` | 6.8.2.15592 | LAN55 | `:9080` |
Both reported **Connected** to `http://192.168.66.46:9080/inform` on 2026-08-06.
AP SSH account is `zhiqiangf` (key-only, verified). See [docs/unifi-network.md](../docs/unifi-network.md).
**IPv6 (verified 2026-08-20):** both APs hold global SLAAC IPv6 addresses on
`br0` — U6 Lite `240e:3bd:235:1fb1::/64` (LAN66), UAP-AC-Lite
`240e:3bd:235:1fb2::/64` (LAN55) — with RA default routes via `gw`; the
controller's `Default` network has IPv6 enabled (SLAAC). Prefixes are dynamic
(PPPoE PD), so they rotate on redial. Details:
[docs/unifi-network.md](../docs/unifi-network.md).
**SSID cleanup (2026-08-21, W1N-207):** the SmartThings Element/vWire provisioning
SSIDs (`element-8a0d5133c9438f12`, `vwire-8b2d67469e455785`, `vport-F09FC22004E9`)
were removed/disabled in the controller (`element_adopt` setting off, element wlanconf
deleted, connectivity `x_mesh_essid`/`x_mesh_psk` cleared, device `x_vwirekey` removed,
`vwire_enabled`/`mesh_sta_vap_enabled=false`) and cleared from both APs; all
vwire/vport/element flags on the remaining SSIDs are now `disabled`.
**Stable ULA on gw: not feasible (2026-08-21, W1N-207):** EdgeOS v3.0.1
`interfaces switch switch0` rejects a static `ipv6 address`, and an explicit
`router-advert` node *replaces* the DHCPv6-PD-slaac RA (drops the delegated GUA
prefix from radvd → LAN55 loses IPv6 egress after RA expiry). Attempted and rolled
back cleanly (no `save`; gw config unchanged). Consequence: after a PD rotation,
restart HA's matter-server (see [hosts/hass.windy.lan.md](../hosts/hass.windy.lan.md))
to clear stale IPv6 mDNS caches.
**LAN55 RA environment (observed 2026-08-21):** besides `gw`, the SmartThings
Station (.48) and Aqara M3 (.248) act as Thread border routers and advertise ULA
prefixes (`fd00:5a7:6415:1::/64`, `fd97:d580:16fe:1::/64`); several LAN55 hosts
(HA, PVE, UAP-AC-Lite) have IPv6 forwarding enabled and mark themselves as
routers in NDP. This is normal Thread-BDR behaviour and was not the Matter
failure cause.
**Matter 灯泡(2026-08-21 实测,W1N-207):** 两盏 ESP32-C2 Matter 灯泡
VP `0x4891/0x4100`OUI `34:98:7a`)——工作盏 MAC `34:98:7a:25:a1:f0`;故障盏
MAC `34:98:7a:27:7f:08`hostname `matter`,动态 .145)。故障盏已在 Aqara fabric
`4DF2B1455D19402D` 内、宣告 `CM=0`(不在配对模式)且缺 GUA → 找回需**恢复出厂**
后扫它自己的二维码。DHCP 保留 `matter`.45 → MAC `34:98:7a:27:10:bc`)与故障盏
MAC 不符,保留从未租出(待修,见 [hosts/gw.md](../hosts/gw.md))。完整排障知识:
[docs/matter-pairing-troubleshoot.md](matter-pairing-troubleshoot.md)。
---
## Quick orientation (who runs what)
| Service | Host | How to reach |
|---------|------|--------------|
| LAN gateway / routing / DHCP | gw | `ssh -4 zhiqiang@192.168.66.254` |
| Transparent/explicit proxy (OpenClash) | gfw.windy.lan | `ssh -4 root@192.168.66.1` |
| LAN DNS (AdGuard Home) + Mihomo proxy | dns.windy.lan | `ssh -4 windy@192.168.66.36` |
| UniFi controller + dockge | ubnt | `ssh -4 windy@192.168.66.46` |
| Home Assistant | hass.windy.lan | `ssh hassio@hass.windy.lan` · UI `:8123` |
| Wi-Fi APs | U6 Lite / UAP-AC-Lite | via controller |
---
## Related docs
- [hosts/gw.md](../hosts/gw.md) — EdgeRouter X detail, firewall, verification record
- [hosts/gfw.windy.lan.md](../hosts/gfw.windy.lan.md) — OpenClash listeners
- [hosts/dns.windy.lan.md](../hosts/dns.windy.lan.md) — AdGuard Home + Mihomo detail
- [hosts/ubnt.md](../hosts/ubnt.md) — UniFi controller + proxy contract
- [hosts/hass.windy.lan.md](../hosts/hass.windy.lan.md) — Home Assistant (HAOS) SSH + LAN access
- [docs/unifi-network.md](../docs/unifi-network.md) — APs, inform endpoint, recovery
- [docs/unifi-third-party-vlan10-dhcp.md](unifi-third-party-vlan10-dhcp.md) — VLAN Wi-Fi feasibility and DHCP boundary
- [docs/unifi-openwrt-vlan10-implementation-examples.md](unifi-openwrt-vlan10-implementation-examples.md) — supported topology and examples
- [docs/edgerouter-x-configuration.md](../docs/edgerouter-x-configuration.md) — effective gw config
- [docs/unifi-openclash-localhost.md](../docs/unifi-openclash-localhost.md) — proxy bypass
- [runbooks/adguard-home-health.md](../runbooks/adguard-home-health.md) — AGH health