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.
21 KiB
ER-X → RB5009 网关升级:网络形态与实施计划
状态: 规划文档(未采购、未接线、未改生产配置)。 重要变更(2026-08-09): SE5420 已采购,网络升级改为「保留 ER-X + SE5420 核心」路径—— 实施与验证以 lan-se5420-deployment-guide.md 为准。 本文保留为「ER-X 网关未来替换为 RB5009」的备选方案;其中 PVE 透传调研与 VLAN10 实现方法仍适用。
1. 一句话架构
公网 ← 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 目标物理拓扑(升级完成后)
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 流量怎么走
同 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:采购前核验
- 确认 RB5009 revision、保修、零售渠道、RouterOS 当前稳定版本号(建议 7.x 最新 stable)。
- 确认硬件:1× 2.5G PoE-in(ether1)、8× 1G、1× SFP+、1GB RAM。SFP+ 模块本次不买。
- 盘点线缆与对端:ONT ↔ ether1;原 LAN55 设备清单(AC-Lite、Aqara…)及原 ER-X
switch0接线。
阶段 1:离线初始化(台面)
- 仅电源 + 隔离管理本。设置身份、时区
Asia/Shanghai、NTP。 - 建
zhiqiang管理用户(密钥登录,禁密码);删除/禁用默认admin。 - 建 bridge + VLAN 66/55 + 端口模板(
ether2–8pvid66,ether9pvid55);临时地址.253(不与 ER-X.254冲突)。 - 配 WAN PPPoE(ether1)、默认路由、NAT masquerade、4 条端口转发 + hairpin、防火墙(input/forward)、MSS clamp、IPv6 PD + SLAAC + IPv6 防火墙。
- 配 DHCP 池
.38–.243、24h 租约、DNS.36、UniFi Inform 选项、静态映射全量照搬。 - 管理面收口:禁 Winbox(8291)/ API(8728)/ WebFig(80/443);SSH 仅限 LAN66/55。
system backup save+/export,导出到离线存储(不落仓库)。
参考 RouterOS 配置骨架(口令/密钥用占位符;落地前逐一核对):
# 身份 / 时区 / 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=<PPPoE_USER> \
password=<PPPoE_PASS> 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 仍在线)
- 将 RB5009
ether2接入现有 LAN66 网段(管理本同网段),SSH 登录.253。 - 全配置复查:VLAN 表、防火墙规则顺序(SSH 在 drop 前)、NAT、路由、IPv6。
- 暂不启用 RA/DHCP(避免与 ER-X 冲突)。预验证
.253可达、SSH 密钥生效、zhiqiang无密码。 - 确认 ER-X 当前配置已备份并保存(作为回滚依据;
show configuration commands过滤敏感行)。
阶段 3:维护窗切换(约 30–60 分钟)
- 变更 RB5009
vlan66/vlan55地址.253 → .254。 - 下电 ER-X(保留原接线与配置,不作任何改动)。
- ONT 线从 ER-X
eth4移到 RB5009ether1。 - 观察 PPPoE 拨号:
/interface pppoe-client monitor pppoe0直至status=established;确认 WAN IP 与默认路由。 - 验证清单(见第 5 节),全绿才算完成。
阶段 4:上线收口
- 再确认管理面:禁 Winbox/API/WebFig、SSH 仅密钥、默认
admin已除。 - 更新固件/补丁至已核定的稳定版;重新导出备份(
.backup+ 文本)存离线。 - 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 个前提:
- RB5009 bridge 增加 VLAN10 转发:
/interface bridge vlan add bridge=bridge66 vlan-ids=10 tagged=<U6口>,<PVE口>只在这两个口 tagged。不要在 RB5009 上给 VLAN10 配 IP / DHCP(gfw 才是网关与唯一 DHCP)。 - PVE 宿主机路径(必须做,RB5009 解决不了这一段):
PVE 物理上联口透传 tagged VLAN10;
gfw虚拟机有一块 VLAN10 可达的网卡 (如 vmbr0 开vlan_filtering+ 给 gfw 加第二块 pvid 10 的 NIC,或 VM 内eth0.10)。 这是此前「无法实现」的同一处缺口,需在 PVE/vSwitch 层单独验证。 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 网卡
-
vmbr0开 vlan-aware(/etc/network/interfaces):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 -
gfw VM 添加
net1: virtio,bridge=vmbr0,tag=10。VM 内该网卡是无标记接口 (已落在 VLAN10 广播域),不要再建同名 8021q 子接口。 -
现有
eth0(native/untagged = VLAN66)不动,gfw 原有角色不变。 -
PVE 物理上联口(PVE→RB5009)改为 trunk:native 66 + tagged 10。
-
OpenWrt 内:新网卡
192.168.10.1/24+ DHCP(192.168.10.0/24)+ 独立 firewall zone→wan masq。
方案 B:OpenWrt 拥有 trunk(单 NIC 多 VLAN)
vmbr0vlan-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):
/interface bridge port add bridge=bridge66 interface=<U6口> pvid=66
/interface bridge port add bridge=bridge66 interface=<PVE口> pvid=66
/interface bridge vlan add bridge=bridge66 vlan-ids=66 tagged=bridge66 untagged=<U6口>,<PVE口>,<其余66口>
/interface bridge vlan add bridge=bridge66 vlan-ids=55 tagged=bridge66 untagged=<ether9>
/interface bridge vlan add bridge=bridge66 vlan-ids=10 tagged=<U6口>,<PVE口>
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 过滤层消失。
诊断命令:
# 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): https://pve.proxmox.com/wiki/Network_Configuration
- 「OpenWrt VM on Proxmox」设计(trunk vs access 谁拥有 tag、双标签坑): https://phb-crystal-ball.org/run-openwrt-in-proxmox/
- PVE 论坛「Tagged and Untagged VLAN」(
bridge-vlan-aware yes+bridge-vids解法): https://forum.proxmox.com/threads/tagged-and-untagged-vlan-configuration.144421/ - OpenWrt 论坛 guest WiFi tagged VLAN 案例(
vmbr0.3→VM 第三网卡;guest 拿到错误网段的 同型故障,最终归因在 PVE/host 侧):https://forum.openwrt.org/t/continued-x86-openwrt-proxmox-vlan-issues/182623
PVE host 改动风险: 给
vmbr0开 vlan-aware 是对宿主机网络栈的修改,有管理面断连风险; 需在维护窗内用控制台/独立带外通道进行,先ifreload -a(PVE7+ 的 ifupdown2 支持热应用), 保留原配置作回滚。
5. 验收清单(「网络算正常」的样子)
- 管理面:
zhiqiang密钥 SSH 可从 LAN66/55 登录;默认admin禁用;Winbox/API 不可达;.254管理可达。 - VLAN:客户端取得正确网段(
.66.x/.55.x),默认网关.254,DNS.36可用。 - 互联网:PPPoE 已建立;IPv4 外网通;端口转发逐条从公网验证(hass 8123、transmission 51413、ssh 5822→.36:22、openvpn 1194)。
- IPv6:两 VLAN 拿到 SLAAC
/64,默认路由存在,外部 IPv6 可达;IPv6 防火墙未阻断必要 ICMPv6/DHCPv6。 - 本地服务:跨 VLAN(
.55.x↔.66.x)互通;AdGuard Home、UniFi 控制器、gfw旁路由行为与升级前一致。 - UniFi:U6 Lite(
.66.6)与 UAP-AC-Lite(.55.5)在控制器显示 Connected;Inform 未变:9080。 - 无环路、无双默认网关;端口协商与错误计数正常。
- 备份(
.backup+ 文本导出)已离线保存;ER-X 已下电收纳。
6. 回滚语义
任一阶段失败:停手。
- 维护窗内失败(PPPoE 未起 / 客户端不通 / 防火墙锁死):
- 下电 RB5009。
- ONT 线插回 ER-X
eth4。 - 给 ER-X 上电 → 服务在数分钟内恢复。
- 不要在故障中改 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
- ER-X 现状:edgerouter-x-configuration.md、hosts/gw.md
- UniFi:unifi-network.md、hosts/ubnt.md
gfw:hosts/gfw.windy.lan.md- 作废方案(不再实施):lan-erx-se5420-network.md、lan-core-switch-upgrade-plan.md
- MikroTik RB5009 官方:https://mikrotik.com/product/rb5009ug_s_in、RouterOS v7 手册