# ER-X → RB5009 网关升级:网络形态与实施计划 **状态:** 规划文档(未采购、未接线、未改生产配置)。 **重要变更(2026-08-09):** **SE5420 已采购**,网络升级改为「保留 ER-X + SE5420 核心」路径—— 实施与验证以 [lan-se5420-deployment-guide.md](../lan-se5420-deployment-guide.md) 为准。 本文保留为「ER-X 网关未来替换为 RB5009」的备选方案;其中 PVE 透传调研与 VLAN10 实现方法仍适用。 --- ## 1. 一句话架构 ```text 公网 ← RB5009(主网关:PPPoE / NAT / 防火墙 / DHCP / IPv6 / VLAN 66+55 三层) ↑ 全部终端 / AP / PVE 直连其 8×1G 端口 (SFP+ 空槽,为未来 10G 核心预留) ``` - **RB5009** 兼任路由与 LAN 二层交换:所有接入设备直插 RB5009 端口。 - 客户端默认网关仍是 **`.254`**(RB5009 沿用 ER-X 地址,客户端零感知)。 - **`gfw`** 仍为旁路由(默认网关 `.254`);OpenClash 行为不变。 - **ER-X 升级后下电闲置,作为已配置的备件保存**(回滚路径)。 - 2.5G/10G 同 VLAN 交换目标**放弃**(无 SE5420);LAN 二层为 1G。 --- ## 2. 已确认的设计决策 | 决策 | 结论 | |---|---| | 角色 | RB5009 单机:路由 + LAN 交换 + 双 VLAN 三层 | | WAN | **PPPoE**,走 **`ether1`(2.5G 铜口接 ONT/光猫)**,MTU 1492 | | LAN 模型 | **单 bridge + VLAN 过滤**:VLAN 66(多数端口)+ VLAN 55;VLAN 10 预留 | | 网关地址 | **沿用 `192.168.66.254` / `192.168.55.254`**;重编址另立项目 | | IPv6 | **保留对等**:PPPoE 上 DHCPv6-PD `/60` + 双 LAN SLAAC `/64` + IPv6 防火墙 | | 端口转发 | 4 条 **原样迁入**(hass / transmission / ssh / openvpn)+ hairpin NAT | | LAN55 成员 | **保持现状**(AC-Lite、Aqara 及原 LAN55 设备)不迁到 VLAN66 | | 管理面 | SSH **仅密钥**(`zhiqiang`);禁用默认 `admin`;**禁 Winbox/API/WebFig** 或仅限 LAN | | 迁移方式 | 台面预配置(临时 `.253`)→ 维护窗(30–60 分钟)→ 验证 → ER-X 留作备件 | | 固件/备份 | 当前稳定 RouterOS 7.x;上线前 `.backup` + 文本导出存离线 | | 时区/NTP | `Asia/Shanghai` + 现有 NTP 服务器 | | 安全 | PPPoE 口令、SSH 私钥、`zhiqiang` 口令**只存设备上**,不落本仓库 | --- ## 3. 升级后的网络形态(拓扑图) ### 3.1 目标物理拓扑(升级完成后) ```text Internet │ PPPoE (ether1 2.5G, MTU 1492, IPv6 PD /60) ▼ ┌──────────────────────────────────────────────┐ │ RB5009 (gw) RouterOS 7.x │ │ ether1 = WAN (PPPoE) │ │ bridge + vlan-filtering=yes │ │ vlan66 = 192.168.66.254/24 (pvid 66) │ │ vlan55 = 192.168.55.254/24 (pvid 55) │ │ SFP+ = 空槽(未来 10G) │ │ SSH-only 管理(仅 LAN) │ └─────┬─────────┬──────────┬──────────┬────────┘ │ pvid66 │ pvid66 │ pvid66 │ pvid55 │ │ │ │ gfw (.1) dns (.36) ubnt (.46) UAP-AC-Lite (.55.5) PVE (.26) NAS/PC… U6 Lite Aqara (.55.248) (.66.6) ``` 端口角色以面板为准;下表是建议预留: | RB5009 端口 | 对端 | 模式 | |---|---|---| | `ether1` | ONT/光猫 | WAN,PPPoE | | `ether2`–`ether8` | PVE/gfw、dns、ubnt、U6 Lite、NAS、PC、杂项 | access,pvid 66 | | `ether9` | 原 LAN55 成员(AC-Lite、Aqara…) | access,pvid 55 | | SFP+ `sfp-sfpplus1` | 未来 10G 核心 | 空槽 | > **禁止双上行:** 任一设备不得同时接旧 ER-X 与 RB5009(环路 / 双默认网关)。 ### 3.2 逻辑网络 | VLAN | 子网 | 网关 / DHCP | 形态 | 成员 | |---|---|---|---|---| | **66** | `192.168.66.0/24` | RB5009 `vlan66` `.254` | 多数端口 access | gfw、dns、ubnt、U6、PVE、NAS、PC… | | **55** | `192.168.55.0/24` | RB5009 `vlan55` `.254` | `ether9` access | AC-Lite、Aqara…(原 LAN55 全量) | | 10(预留) | `192.168.10.0/24` | 未来(`gfw`) | 暂不配业务 | 升级专用 SSID(后续项目) | - 客户端 DNS:DHCP 仍下发 **`192.168.66.36`**(AdGuard Home)。 - UniFi Inform 仍为 `http://192.168.66.46:9080/inform`。 - LAN66 ↔ LAN55 互通由 RB5009 三层转发(沿用现网默认可达语义,防火墙不设隔离边界)。 ### 3.3 流量怎么走 ```text 同 VLAN(NAS ↔ PC): 客户端 → RB5009 端口 → bridge(二层交换,1G) 跨 VLAN(66 ↔ 55): 客户端 → RB5009 路由(vlan66 ↔ vlan55,1G) 上网: 客户端 → RB5009 → PPPoE → Internet(限速 = 线路;RB5009 fasttrack 去掉 ER-X ~900M 天花板) 旁路由: 默认网关仍 `.254`;显式代理走 gfw(不变) 未来 VLAN10: U6 trunk → RB5009 →(转发 VLAN10)→ gfw(后续项目) ``` ### 3.4 性能预期(诚实边界) | 场景 | 预期 | |---|---| | WAN / PPPoE | 线路速率以内;若线路 >1G,RB5009 fasttrack 可跑满(ER-X 受 900M 限制) | | 同 VLAN 交换 | **1G**(无 SE5420;RB5009 8×1G) | | 跨 VLAN | 1G 级三层 | | SFP+ 空槽 | 不等于已是 10G | --- ## 4. 分阶段实施计划 ### 阶段 0:采购前核验 1. 确认 RB5009 revision、保修、零售渠道、RouterOS 当前稳定版本号(建议 7.x 最新 stable)。 2. 确认硬件:1× 2.5G PoE-in(ether1)、8× 1G、1× SFP+、1GB RAM。SFP+ 模块本次不买。 3. 盘点线缆与对端:ONT ↔ ether1;原 LAN55 设备清单(AC-Lite、Aqara…)及原 ER-X `switch0` 接线。 ### 阶段 1:离线初始化(台面) 1. 仅电源 + 隔离管理本。设置身份、时区 `Asia/Shanghai`、NTP。 2. 建 `zhiqiang` 管理用户(**密钥登录,禁密码**);**删除/禁用默认 `admin`**。 3. 建 bridge + VLAN 66/55 + 端口模板(`ether2–8` pvid66,`ether9` pvid55);**临时地址 `.253`**(不与 ER-X `.254` 冲突)。 4. 配 WAN PPPoE(ether1)、默认路由、NAT masquerade、4 条端口转发 + hairpin、防火墙(input/forward)、MSS clamp、IPv6 PD + SLAAC + IPv6 防火墙。 5. 配 DHCP 池 `.38–.243`、24h 租约、DNS `.36`、UniFi Inform 选项、**静态映射全量照搬**。 6. 管理面收口:**禁 Winbox(8291)/ API(8728)/ WebFig(80/443)**;SSH 仅限 LAN66/55。 7. `system backup save` + `/export`,导出到离线存储(**不落仓库**)。 **参考 RouterOS 配置骨架**(口令/密钥用占位符;落地前逐一核对): ```text # 身份 / 时区 / NTP /system identity set name=gw /system clock set time-zone-name=Asia/Shanghai # WAN /interface ethernet set ether1 name=wan /interface pppoe-client add name=pppoe0 interface=wan user= \ password= add-default-route=yes use-peer-dns=no \ mtu=1492 mru=1492 # bridge + VLAN /interface bridge add name=bridge66 vlan-filtering=yes /interface bridge port add bridge=bridge66 interface=ether2 pvid=66 ... # ether3..ether8 同 pvid 66 /interface bridge port add bridge=bridge66 interface=ether9 pvid=55 /interface bridge vlan add bridge=bridge66 vlan-ids=66 tagged=bridge66 /interface bridge vlan add bridge=bridge66 vlan-ids=55 tagged=bridge66 /interface vlan add name=vlan66 interface=bridge66 vlan-id=66 /interface vlan add name=vlan55 interface=bridge66 vlan-id=55 # 地址(台面先用 .253,维护窗切 .254) /ip address add address=192.168.66.254/24 interface=vlan66 /ip address add address=192.168.55.254/24 interface=vlan55 # NAT masquerade + 端口转发 + hairpin /ip firewall nat add chain=srcnat out-interface=pppoe0 action=masquerade /ip firewall nat add chain=dstnat in-interface=pppoe0 protocol=tcp dst-port=8123 \ action=dst-nat to-addresses=192.168.55.11 to-ports=8123 /ip firewall nat add chain=dstnat in-interface=pppoe0 protocol=tcp dst-port=51413 \ action=dst-nat to-addresses=192.168.66.51 to-ports=51413 /ip firewall nat add chain=dstnat in-interface=pppoe0 protocol=udp dst-port=51413 \ action=dst-nat to-addresses=192.168.66.51 to-ports=51413 /ip firewall nat add chain=dstnat in-interface=pppoe0 protocol=tcp dst-port=5822 \ action=dst-nat to-addresses=192.168.66.36 to-ports=22 /ip firewall nat add chain=dstnat in-interface=pppoe0 protocol=udp dst-port=5822 \ action=dst-nat to-addresses=192.168.66.36 to-ports=22 /ip firewall nat add chain=dstnat in-interface=pppoe0 protocol=tcp dst-port=1194 \ action=dst-nat to-addresses=192.168.66.32 to-ports=1194 /ip firewall nat add chain=dstnat in-interface=pppoe0 protocol=udp dst-port=1194 \ action=dst-nat to-addresses=192.168.66.32 to-ports=1194 /ip firewall nat add chain=srcnat connection-nat-state=dstnat action=masquerade # hairpin # 防火墙(input / forward),顺序很重要:SSH 放行必须早于默认 drop /ip firewall filter add chain=input connection-state=established,related action=accept /ip firewall filter add chain=input connection-state=invalid action=drop /ip firewall filter add chain=input protocol=icmp action=accept /ip firewall filter add chain=input in-interface=pppoe0 action=drop comment="drop WAN in" /ip firewall filter add chain=input protocol=tcp dst-port=22 \ src-address=192.168.66.0/24,192.168.55.0/24 action=accept comment="mgmt SSH" /ip firewall filter add chain=input action=drop comment="drop other input" /ip firewall filter add chain=forward connection-state=established,related action=fasttrack-connection \ hw-offload=yes /ip firewall filter add chain=forward connection-state=established,related action=accept /ip firewall filter add chain=forward connection-state=invalid action=drop /ip firewall filter add chain=forward in-interface=pppoe0 action=drop comment="drop WAN fwd" /ip firewall filter add chain=forward action=accept comment="accept LAN fwd" # MSS clamp(PPPoE MTU 1492 → 1452;ER-X 旧值 1412 偏小,验证后按标准值收敛) /ip firewall mangle add chain=forward protocol=tcp tcp-flags=syn \ tcp-mss=1400-65535 action=change-mss new-mss=1452 passthrough=yes # IPv6(PD /60 + SLAAC /64) /ipv6 dhcp-client add interface=pppoe0 request=prefix pool-name=pd6 \ pool-prefix-length=60 add-default-route=yes /ipv6 address add from-pool=pd6 interface=vlan66 address=::1 adverts=yes /ipv6 address add from-pool=pd6 interface=vlan55 address=::1 adverts=yes # /ipv6 firewall filter 参照 IPv4:established/related accept、invalid drop、 # icmpv6 accept、pppoe0 in drop、默认 drop,forward 同构 # DHCP(池 / DNS / Inform / 静态映射全量照搬 ER-X) /ip pool add name=pool66 ranges=192.168.66.38-192.168.66.243 /ip pool add name=pool55 ranges=192.168.55.38-192.168.55.243 /ip dhcp-server add name=dhcp66 interface=vlan66 address-pool=pool66 lease-time=1d /ip dhcp-server add name=dhcp55 interface=vlan55 address-pool=pool55 lease-time=1d /ip dhcp-server network add address=192.168.66.0/24 gateway=192.168.66.254 \ dns-server=192.168.66.36 /ip dhcp-server network add address=192.168.55.0/24 gateway=192.168.55.254 \ dns-server=192.168.66.36 # 静态映射:从 ER-X 导出后逐条 /ip dhcp-server lease add ... # UniFi Inform:DHCP option 43(hex 编码为 http://192.168.66.46:9080/inform), # 或依赖已 adopt AP 的 set-inform;与现网 ER-X 行为保持一致。 ``` ### 阶段 2:上台预验证(ER-X 仍在线) 1. 将 RB5009 `ether2` 接入现有 LAN66 网段(管理本同网段),SSH 登录 `.253`。 2. 全配置复查:VLAN 表、防火墙规则顺序(SSH 在 drop 前)、NAT、路由、IPv6。 3. **暂不启用 RA/DHCP**(避免与 ER-X 冲突)。预验证 `.253` 可达、SSH 密钥生效、`zhiqiang` 无密码。 4. 确认 ER-X 当前配置**已备份并保存**(作为回滚依据;`show configuration commands` 过滤敏感行)。 ### 阶段 3:维护窗切换(约 30–60 分钟) 1. 变更 RB5009 `vlan66`/`vlan55` 地址 `.253 → .254`。 2. **下电 ER-X**(保留原接线与配置,不作任何改动)。 3. ONT 线从 ER-X `eth4` 移到 RB5009 `ether1`。 4. 观察 PPPoE 拨号:`/interface pppoe-client monitor pppoe0` 直至 `status=established`;确认 WAN IP 与默认路由。 5. 验证清单(见第 5 节),全绿才算完成。 ### 阶段 4:上线收口 1. 再确认管理面:禁 Winbox/API/WebFig、SSH 仅密钥、默认 `admin` 已除。 2. 更新固件/补丁至已核定的稳定版;重新导出备份(`.backup` + 文本)存离线。 3. ER-X 下电收纳为**已配置备件**,把其接线与角色记录到 `hosts/gw.md` 备份节。 ### 阶段 5(后续,另立项目) **时序确认:** VLAN10 升级专用 Wi-Fi 是 RB5009 上线**稳定之后**的独立项目,不并入本次维护窗。 - 4 条端口转发是否仍需的审计。 - 网关重编址(`.254 → 其它`)决策。 - **VLAN10 升级专用 SSID → `gfw`(可行性审查,2026-08-09)**。 - 迁移后同步本仓库事实文档:`hosts/gw.md`、`docs/lan-overview.md`、`inventory/hosts.md`、`AGENTS.md` 快速地图。 ### 阶段 5 附:VLAN10 可行性审查 **结论:** 换 RB5009 后**物理上可行**,但 RB5009 只解决「交换机侧」路径;PVE 宿主机到 `gfw` 虚拟机这一段(此前判定为不可行的关键缺口)仍必须单独打通。 **为什么当前不能在 AP 上启用 VLAN10:** U6 接的是 ER-X `eth0` 的普通 untagged LAN66 路径,尚无已验证的 VLAN10 端到端二层通道。给 SSID 选择 VLAN10 后,客户端不会获得可由 gfw 服务的预期 VLAN10 网络;帧究竟被丢弃、被设备错误处理,还是 SSID 实际没有打 tag,必须以 AP/交换机/gfw 抓包和配置核验判断。**不得**将“tagged 帧必然自动去标签并泄漏到 LAN66”作为实施前提。 **RB5009 下实现需要 3 个前提:** 1. **RB5009 bridge 增加 VLAN10 转发:** `/interface bridge vlan add bridge=bridge66 vlan-ids=10 tagged=,` 只在这两个口 tagged。**不要**在 RB5009 上给 VLAN10 配 IP / DHCP(gfw 才是网关与唯一 DHCP)。 2. **PVE 宿主机路径(必须做,RB5009 解决不了这一段):** PVE 物理上联口透传 tagged VLAN10;`gfw` 虚拟机有一块 VLAN10 可达的网卡 (如 vmbr0 开 `vlan_filtering` + 给 gfw 加第二块 pvid 10 的 NIC,或 VM 内 `eth0.10`)。 这是此前「无法实现」的同一处缺口,需在 PVE/vSwitch 层单独验证。 3. **`gfw` 侧:** VLAN10 网卡 `192.168.10.1/24` + DHCP(`192.168.10.0/24`)+ 出 66 口 masquerade。RB5009 无需到 `192.168.10.0/24` 的路由(gfw SNAT 后源地址即 66 网段)。 **两个注意点:** - **单 DHCP 原则:** VLAN10 上唯一 DHCP 是 gfw;RB5009 不得在 VLAN10 提供 DHCP。 - **设计确认:** 升级 SSID 客户端走 gfw 网关后,DNS 为 gfw 的 dnsmasq→clash(7874), **不是** AdGuard `.36`——这是「被代理网络」的预期行为,需接受。 ### 阶段 5 附:PVE 上 VLAN10 透传实现(调研 2026-08-09) 官方 wiki + 多个社区案例支持两种模型,核心原则是 **「一层只拥有一个 tag」**——要么 PVE 拥有 access VLAN,要么 OpenWrt 拥有 trunk,**不能在同一张 NIC 上两层都做**。 **方案 A(推荐):PVE 拥有 access VLAN,gfw 加第二块 virtio 网卡** 1. `vmbr0` 开 vlan-aware(`/etc/network/interfaces`): ```text auto vmbr0 iface vmbr0 inet static address 192.168.66.26/24 gateway 192.168.66.254 bridge-ports eno1 bridge-stp off bridge-fd 0 bridge-vlan-aware yes bridge-vids 10 # 至少含 10;常见默认 2-4094 ``` 2. gfw VM 添加 `net1: virtio,bridge=vmbr0,tag=10`。VM 内该网卡是**无标记**接口 (已落在 VLAN10 广播域),**不要再建同名 8021q 子接口**。 3. 现有 `eth0`(native/untagged = VLAN66)不动,gfw 原有角色不变。 4. PVE 物理上联口(PVE→RB5009)改为 **trunk:native 66 + tagged 10**。 5. OpenWrt 内:新网卡 `192.168.10.1/24` + DHCP(`192.168.10.0/24`)+ 独立 firewall zone→wan masq。 **方案 B:OpenWrt 拥有 trunk(单 NIC 多 VLAN)** - `vmbr0` vlan-aware;VM NIC **不加 tag**;trunk 原样进 VM;OpenWrt 内建 `8021q` 设备 (`eth0.10`,x86/virtio 用 `option type '8021q'`,不要套用 DSA 教程)。物理上联 trunk。 - 更灵活(一块网卡多 VLAN),是 router VM 的常见做法,但需要 OpenWrt 8021q 配置, 且方案 A 对现有单网卡 gfw 改动更小。 **RB5009 侧配套(U6 口 + PVE 口都做成 trunk):** ```text /interface bridge port add bridge=bridge66 interface= pvid=66 /interface bridge port add bridge=bridge66 interface= pvid=66 /interface bridge vlan add bridge=bridge66 vlan-ids=66 tagged=bridge66 untagged=,,<其余66口> /interface bridge vlan add bridge=bridge66 vlan-ids=55 tagged=bridge66 untagged= /interface bridge vlan add bridge=bridge66 vlan-ids=10 tagged=, ``` VLAN10 在 RB5009 上**纯二层桥接**(U6 ↔ PVE),三层由 gfw 承担;RB5009 无 VLAN10 IP/DHCP。 **常见坑(社区高复发):** - **双标签:** PVE 设了 `tag=10` 又在 OpenWrt 里建 `eth1.10` → 一帧被两层改两次。 - **native VLAN 不一致:** trunk 上无标记帧被两端当成不同 VLAN → DHCP 消失 / 拿到错网段 (正是你之前在 AP 上打 VLAN10 坏 66 网的同类故障)。 - **bridge 未 vlan-aware:** tagged 帧进 host 后在 bridge 过滤层消失。 **诊断命令:** ```bash # PVE host bridge vlan show ip -br link tcpdump -eni <上联口> # 帧是否到物理口 tcpdump -eni vmtapXXXXXX # 帧是否到 VM tap # OpenWrt guest ip -d link show logread -e netifd ``` **参考案例:** - PVE 官方 wiki — Network Configuration / VLAN 802.1Q(三种模式 + vlan-aware bridge): - 「OpenWrt VM on Proxmox」设计(trunk vs access 谁拥有 tag、双标签坑): - PVE 论坛「Tagged and Untagged VLAN」(`bridge-vlan-aware yes` + `bridge-vids` 解法): - OpenWrt 论坛 guest WiFi tagged VLAN 案例(`vmbr0.3`→VM 第三网卡;guest 拿到错误网段的 同型故障,最终归因在 PVE/host 侧): > **PVE host 改动风险:** 给 `vmbr0` 开 vlan-aware 是对宿主机网络栈的修改,有管理面断连风险; > 需在维护窗内用控制台/独立带外通道进行,先 `ifreload -a`(PVE7+ 的 ifupdown2 支持热应用), > 保留原配置作回滚。 --- ## 5. 验收清单(「网络算正常」的样子) 1. 管理面:`zhiqiang` 密钥 SSH 可从 LAN66/55 登录;默认 `admin` 禁用;Winbox/API 不可达;`.254` 管理可达。 2. VLAN:客户端取得正确网段(`.66.x` / `.55.x`),默认网关 `.254`,DNS `.36` 可用。 3. 互联网:PPPoE 已建立;IPv4 外网通;端口转发逐条从公网验证(hass 8123、transmission 51413、ssh 5822→.36:22、openvpn 1194)。 4. IPv6:两 VLAN 拿到 SLAAC `/64`,默认路由存在,外部 IPv6 可达;IPv6 防火墙未阻断必要 ICMPv6/DHCPv6。 5. 本地服务:跨 VLAN(`.55.x` ↔ `.66.x`)互通;AdGuard Home、UniFi 控制器、`gfw` 旁路由行为与升级前一致。 6. UniFi:U6 Lite(`.66.6`)与 UAP-AC-Lite(`.55.5`)在控制器显示 **Connected**;Inform 未变 `:9080`。 7. 无环路、无双默认网关;端口协商与错误计数正常。 8. 备份(`.backup` + 文本导出)已离线保存;ER-X 已下电收纳。 --- ## 6. 回滚语义 任一阶段失败:**停手**。 - **维护窗内失败(PPPoE 未起 / 客户端不通 / 防火墙锁死):** 1. 下电 RB5009。 2. ONT 线插回 ER-X `eth4`。 3. 给 ER-X 上电 → 服务在数分钟内恢复。 4. 不要在故障中改 ER-X 的 WAN、DHCP、网关地址或 SSH 策略。 - **维护窗成功后** ER-X 只是备件;后续 VLAN10 失败只撤 SSID/VLAN 绑定,主 SSID 与 `.254` 路径不动。 --- ## 7. 安全与记录 - **本仓库永不记录**:PPPoE 口令、`zhiqiang` 口令、SSH 私钥、RouterOS 备份(含口令/密钥)。 - 每次实质性变更(切换、回滚、加固)完成后,在 Linear **`vps` 项目**记录 scope / action / verification / 遗留 follow-up(本次先不建 issue,待执行时补)。 - SSH 与访问策略变更遵循仓库「SSH access safety」流程:ER-X 会话保持为回滚路径,新密钥登录验证成功前不关闭旧通道。 --- ## 8. 参考 - 现网地图:[lan-overview.md](../lan-overview.md) - ER-X 现状:[edgerouter-x-configuration.md](../edgerouter-x-configuration.md)、[hosts/gw.md](../../hosts/gw.md) - UniFi:[unifi-network.md](../unifi-network.md)、[hosts/ubnt.md](../../hosts/ubnt.md) - `gfw`:[hosts/gfw.windy.lan.md](../../hosts/gfw.windy.lan.md) - 作废方案(**不再实施**):[lan-erx-se5420-network.md](../lan-erx-se5420-network.md)、[lan-core-switch-upgrade-plan.md](lan-core-switch-upgrade-plan.md) - MikroTik RB5009 官方:、RouterOS v7 手册