From 86bfb5a953d3456b7b38e473c33d83da6e8c67c2 Mon Sep 17 00:00:00 2001 From: windyboy Date: Tue, 11 Aug 2026 19:22:22 +0800 Subject: [PATCH] docs: record SE5420 VLAN10 deployment pitfalls (trunk PVID, fw4 dest=lan, minimal gfw migration) --- docs/lan-se5420-deployment-guide.md | 139 ++++++++++++++++++++-------- 1 file changed, 100 insertions(+), 39 deletions(-) diff --git a/docs/lan-se5420-deployment-guide.md b/docs/lan-se5420-deployment-guide.md index 6e19780..bab7e92 100644 --- a/docs/lan-se5420-deployment-guide.md +++ b/docs/lan-se5420-deployment-guide.md @@ -162,8 +162,9 @@ 10. 删 VLAN1 管理 IP:`路由功能 → 接口 → 接口设置` → VLAN1 → 清空 IPv4。 11. **保存配置**。 12. **验证:** `show vlan` VLAN1 无任何成员、无管理 IP;VLAN66 管理路径仍通(SSH/HTTPS 不断)。 -13. 关未用端口:`二层交换 → 端口管理 → 端口配置` → 口 9、11、12、13、14、15、16 → 端口状态 `Disabled`;并确认这些口不在任何 VLAN 的 Untagged/Tagged 勾选中。 -14. 配管理 ACL:`访问控制 → ACL配置`(或 `安全管理` 下对应项,以界面为准)→ 允许源网段 `192.168.66.0/24` 访问 HTTPS/SSH(启用 SNMP 则一并限制)→ 其余拒绝 → 保存。 +13. 关未用端口:`二层交换 → 端口管理 → 端口配置` → 口 9、11、12、13、14、15、16 **及 SFP+ 17–20** → 端口状态 `Disabled`;并确认这些口不在任何 VLAN 的 Untagged/Tagged 勾选中。**口 12 是 NAS LACP 预留口,未来 LACP 维护窗需在此重新启用。** +14. 配管理面源限制:`系统管理 → 安全管理 → 安全配置`(管理主机/管理访问,以界面为准)→ 只允许源 `192.168.66.0/24` 访问 HTTPS/SSH(启用 SNMP 则一并限制)→ 其余拒绝 → 保存。 + > ⚠️ **不要**在 `访问控制` 菜单配——那是数据面 ACL(MAC/IP ACL),管不到管理面;管理面限制在 `安全管理 → 安全配置`。 15. 配生成树: - 全局配置(`生成树 → 基本配置`):功能`启用`、模式`RSTP`、**CIST优先级 `4096`**(让本机当根桥);联络时间 2 / 老化 20 / 时延 15 / 流量限制 5 / 最大跳数 20 保持默认。 - 端口配置(`生成树 → 端口配置`):**终端口 5、6、8、10 的「边缘端口」设`启用`**(= PortFast);上联口 1、2、3、4、7 保持`禁用`。状态列显示`禁用`是链路未接/未启用,属正常。 @@ -233,7 +234,7 @@ ## 8. 第一阶段验收(全绿才进第二阶段) -1. SE5420:`ping 192.168.66.253` 通,且从 55 网段**不通**(仅 LAN66 管理);默认口令已改;配置已离线备份。 +1. SE5420:`ping 192.168.66.253` 通,且从 55 网段**不通**(依赖 §4.3 第 14 步管理面源限制已配;若 ACL 未生效,从 55 网段经 ER-X 路由仍可达 .253——此条不通过则回查 ACL);默认口令已改;配置已离线备份。 2. LAN66 客户端:`ip addr` 是 `.66.x`、路由 `default via 192.168.66.254`、DNS `192.168.66.36`;`ping 223.5.5.5` 通。 3. LAN55 客户端:`.55.x`、`default via 192.168.55.254`;LAN55↔LAN66 互通(如 `ping 192.168.66.46`)。 4. 端口转发:从公网(手机流量)逐条验——hass `:8123`、transmission `:51413`、ssh `:5822→.36:22`、openvpn `:1194`。 @@ -251,7 +252,7 @@ ## 9. PVE VLAN10 边界 -### 9.1 快照与备份 +### 9.1 快照与备份(在 PVE 上执行:SSH `ssh -4 root@192.168.66.26` 进入或本地终端) 1. 取只读快照(逐条执行并保存输出): ```sh @@ -267,11 +268,18 @@ ### 9.2 改造 vmbr0 为 VLAN-aware(以 §9.1 快照为准) -1. 编辑 `/etc/network/interfaces`(`nano /etc/network/interfaces`)。 -2. 在 `vmbr0` 定义段加一行:`bridge-vlan-aware yes`。 -3. 在物理口 `enp1s0` 的配置里,把允许 VLAN 显式列出(典型为 `bridge-vids 2-4094` 或按快照当前值扩展出 10),并确认 untagged/PVID 语义与现状一致。**不得在没看快照的情况下写死。** -4. `systemctl restart networking`(或 `ifreload -a`)应用。 -5. **验证(关键):** `ssh -4 root@192.168.66.26 'ip -br addr'` 显示 `.66.26` 仍在;`ping 192.168.66.254` 通;dns(.36)/ubnt(.46)/gfw(.1) 仍通。任一断 → 立即回滚 interfaces 文件重启网络。 +1. 编辑 `/etc/network/interfaces`(PVE 本机 `nano /etc/network/interfaces`)。 +2. 在 **vmbr0 定义段**加两行: + ```text + bridge-vlan-aware yes + bridge-vids 10 66 + ``` + > `bridge-vids` 只放行需要的 tagged VLAN:`10`(gfw VLAN10 帧)+ `66`(显式声明 native)。不要写 `2-4094` 全放行;将来加 VLAN 再扩展此列表。 + > ⚠️ **`bridge-vids` 必须加在 vmbr0 段**,不是 `enp1s0` 段——enp1s0 只是 `bridge-ports` 成员;加错位置 VLAN10 无法上 bridge。 +3. **不要**改动 `bridge-ports enp1s0`、现有 tap 口或 `vmbr1`;现有 VM 的无标签语义(untagged/PVID)保持不变。 +4. 应用:**优先 `ifreload -a`**(PVE 用 ifupdown2,只应用变更);不要用 `systemctl restart networking`(会重载全部接口)。 + > ⚠️ `ifreload` 会断当前 SSH 连接(管理本重连即可),`ip -br addr` 重新验证。 +5. **验证(关键):** `ssh -4 root@192.168.66.26 'ip -br addr'` 显示 `.66.26` 仍在;`ping 192.168.66.254` 通;dns(.36)/ubnt(.46)/gfw(.1) 仍通。任一断 → 立即恢复备份的 interfaces 文件并 `ifreload -a`。 6. `bridge vlan show` 确认现有 tap 口、物理口的 PVID/untagged 与迁移前一致,只是多出 tag 10 的允许。 ### 9.3 为 gfw 加 tag=10 专用 vNIC @@ -291,25 +299,40 @@ 1. gfw 先只读确认当前绑定与 DHCP 段名: ```sh - ssh -4 root@192.168.66.1 'uci show dhcp; uci show firewall | grep -A3 ubunt_upg' + ssh -4 root@192.168.66.1 'uci show network; uci show dhcp' ``` -2. 记录现有 `ubunt_upg` 在 `firewall` 里的 zone/规则段名,以及 DHCP 里对应池段名(下面用占位符 `` `` 替换为实际值)。 -3. 把 VLAN10 地址从 `eth0.10` 迁到新接口(先在 network 里把 `eth0.10` 的 device 改到新接口名,或新增新接口段并保留 `192.168.10.1/24`、DHCP 与 zone 绑定)——**同一时刻同一地址不得同时挂在两个接口**。 -4. 确认 firewall 的 `ubunt_upg` zone 的 `device`/`network` 指向新接口。 -5. 验证后删除旧 `eth0.10` 段:`uci delete network.eth0_10`(段名以实际为准)→ `uci commit network`。 -6. **验证:** + 预期:`network.ubunt_upg.device='eth0.10'`、`dhcp.ubunt_upg.interface='ubunt_upg'`(按接口名绑定)。 +2. **最小迁移——只改 device 一行**(gfw 上执行): + ```sh + ifdown ubunt_upg + uci set network.ubunt_upg.device='eth2' + uci commit network + ifup ubunt_upg + ``` + > `eth0.10` 不再被引用会自动消失,**无需手动删段**;DHCP 池 `dhcp.ubunt_upg.interface='ubunt_upg'` 按接口名绑定,自动跟着走。 +3. **验证:** gfw 内 `ip -br addr` → `eth2` 拿 `192.168.10.1/24` UP、`eth0.10` 消失、`eth0` 仍 `.66.1`。 +4. 确认 firewall `ubunt_upg` zone 按 `network='ubunt_upg'` 绑定(改 device 后 zone/DHCP/NAT/规则自动跟随)。 +5. **验证:** - PVE 管理 IP 仍在 LAN66; - - gfw 内 `ip -br addr`:VLAN10 地址只在新接口; - - `bridge vlan show` 与 VM NIC 配置证明其他 VM 无 VLAN10 可达性(可用 `tcpdump -ni vmbr0 vlan 10` 抓包确认只有 gfw 的帧)。 -7. 未通过 → 按 §16 回滚顺序停止 VLAN10 项目。 + - `bridge vlan show` 确认其他 VM 无 VLAN10 可达性(`tap140i2` 显示 `10 PVID Egress Untagged`;dns/ubnt 等 tap 仍只有 PVID 1)。 +6. 未通过 → 按 §16 回滚顺序停止 VLAN10 项目。 ## 10. SE5420 增加 VLAN10 -1. 建 VLAN10:`VLAN → 802.1Q VLAN → VLAN配置` → 新建 VLAN ID `10` → 口 4、口 6 在 **Tagged** 勾选;口 4/6 的 **Untagged** 保持 VLAN66(口 4/6 即 trunk:untagged 66 + tagged 10)→ 保存。 -2. 确认其余口不允许 VLAN10(口 4/6 之外不勾选)。 -3. 确认 VLAN10 不建 SVI/DHCP/路由:`路由功能 → 接口 → 接口设置` 无 VLAN10 接口;`路由功能 → DHCP服务器/DHCP中继` 无 10 段。 -4. **保存配置。** -5. **验证:** `show vlan` VLAN10 仅在口 4/6;`show interface` 口 4/6 状态正常;VLAN66 管理流量不受影响(`ping 192.168.66.253`、`ssh` 均通)。 +> **关键:口 4/6 是 access 口时,VLAN10 的 Tagged 选择器里会显示不可选**——必须先在本步第 1 步把口 4/6 改成 trunk,才能勾 Tagged。改 trunk 后口 4/6 会从 VLAN66 untagged 成员中被移除,需在第 3 步恢复。 + +1. 改口 4/6 为 trunk:`VLAN → 802.1Q VLAN → 端口配置` → 口 4、口 6 → 端口类型 `ACCESS`→`TRUNK` → **PVID 改 `66`**(改 TRUNK 后默认 PVID 变 1,必须改回 66)→ 保存。 +2. **验证:** 端口配置页口 4/6 显示 `TRUNK` + PVID `66`。 +3. **恢复 VLAN66 成员:** 改 trunk 后口 4/6 从 VLAN66 untagged 被移除 → `VLAN → 802.1Q VLAN → VLAN配置` → 编辑 VLAN66 → **Untagged 重新勾选口 4、口 6** → 保存。确认 VLAN66 = 口 2、4、6、8、10。 +4. 建 VLAN10:`VLAN → 802.1Q VLAN → VLAN配置` → 新建 VLAN ID `10` → **Tagged 勾选:口 4、口 6**(Untagged 不勾)→ 保存。口 4/6 即 trunk:untagged 66 + tagged 10。 +5. 确认其余口不允许 VLAN10(口 4/6 之外不勾选)。 +6. 确认 VLAN10 不建 SVI/DHCP/路由:`路由功能 → 接口 → 接口设置` 无 VLAN10 接口;`路由功能 → DHCP服务器/DHCP中继` 无 10 段。 +7. **保存配置:** `配置保存 → 保存配置`。 +8. **验证(静态链路):** + - SE5420 `show vlan`:VLAN10 仅在口 4/6;VLAN66 仍是口 2、4、6、8、10。 + - PVE `bridge vlan show`:`enp1s0` 允许 10 + 66;`tap140i2` 显示 `10 PVID Egress Untagged`。 + - `ping 192.168.66.253`、`ssh` 均通(VLAN66 管理流量不受影响)。 + - > 注:此时抓不到 VLAN10 帧是正常的——还没有客户端(SSID 未启用);真正流量验证在 §12 启用 SSID 后。 ## 11. gfw 防火墙、NAT 与 IPv6 @@ -320,6 +343,19 @@ ssh -4 root@192.168.66.1 'uci show network; uci show firewall; uci show dhcp; ip ``` - 记录 `wan` zone 的 masq、`ubunt_upg` zone 段名、`ubunt_upg_nat`、`ubunt_upg_to_lan`、DHCP 段名。以下命令全部用具名段,段名以本次输出为准。 +### 11.1b 现场已核实规则(2026-08 实施时确认存在,无需重建) + +| 段名 | 类型 | 作用 | +|---|---|---| +| `firewall.ubunt_upg` | zone | `network='ubunt_upg'`,input/forward=`REJECT`、output=`ACCEPT` | +| `ubunt_upg_dhcp` | rule | VLAN10 → UDP 67 允许(DHCP) | +| `ubunt_upg_dns` | rule | VLAN10 → TCP/UDP 53 允许(DNS) | +| `ubunt_upg_block_lan66` | rule | VLAN10 → `192.168.66.0/24` REJECT | +| `ubunt_upg_to_lan` | forwarding | `src=ubunt_upg → dest=lan` | +| `ubunt_upg_nat` | nat | `src=lan`、`src_ip=192.168.10.0/24`、target `MASQUERADE`(出口走 lan 即 eth0/LAN66) | + +> **待补缺口:** 只有 `192.168.66.0/24` 被拒,**LAN55 和其余 RFC1918 无显式拒绝**——VLAN10 经 ER-X 仍可达 `192.168.55.0/24`(haos/IoT/AP)等内网,必须在 §11.3 补齐。 + ### 11.2 IPv4 策略(目标) | 流量 | 动作 | @@ -333,18 +369,42 @@ ssh -4 root@192.168.66.1 'uci show network; uci show firewall; uci show dhcp; ip ### 11.3 执行(段名替换为实际值) 1. 确认 `ubunt_upg` zone 的 `forward` 保持 `REJECT`(不改 ACCEPT)。 -2. **NAT 已存在,勿动:** 现场已有 `wan` zone `masq=1` + `ubunt_upg_nat`(`oifname eth0`,`192.168.10.0/24 masquerade`)。**不要**给 `ubunt_upg` zone 加 masq,也不要新增 NAT 规则。核对 `nft list ruleset` 该规则在列。 +2. **NAT 已存在,勿动:** 现场已有 `wan` zone `masq=1` + `ubunt_upg_nat`(`src=lan`、`src_ip=192.168.10.0/24` masquerade)。**不要**给 `ubunt_upg` zone 加 masq,也不要新增 NAT 规则。核对 `nft list ruleset` 该规则在列。 3. 不新增宽泛的 `ubunt_upg→wan` zone forwarding(会经 ER-X 放行 LAN55/其它内网)。 -4. 在现有 `ubunt_upg_to_lan` 或新建具名规则里,按顺序加内网前缀拒绝(顺序在允许之前): +4. **补内网前缀拒绝**(LAN55、10/8、172.16/12;`192.168.0.0/16` 已被 66/55/10 三段覆盖,无需再加)。⚠️ **每条必须写 `dest='lan'`**——否则 fw4 会把规则放进 `input_ubunt_upg`(进 gfw 本机方向)而非 `forward_ubunt_upg`(VLAN10→其他网段转发),`dest_ip` 永远不命中、等于没配: ```sh - # 以 uci add firewall rule 创建具名段,段名唯一(如 v10_deny_lan66) - # dest_ip 依次覆盖:192.168.66.0/24、192.168.55.0/24、192.168.10.0/24、 - # 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 中除已列之外 - # proto=all, family=ipv4, target=REJECT, src=ubunt_upg + # LAN55 + uci add firewall rule + uci set firewall.@rule[-1].name='v10_deny_lan55' + uci set firewall.@rule[-1].src='ubunt_upg' + uci set firewall.@rule[-1].dest='lan' + uci set firewall.@rule[-1].dest_ip='192.168.55.0/24' + uci set firewall.@rule[-1].target='REJECT' + uci set firewall.@rule[-1].proto='all' + uci set firewall.@rule[-1].family='ipv4' + # 10/8 + uci add firewall rule + uci set firewall.@rule[-1].name='v10_deny_10net' + uci set firewall.@rule[-1].src='ubunt_upg' + uci set firewall.@rule[-1].dest='lan' + uci set firewall.@rule[-1].dest_ip='10.0.0.0/8' + uci set firewall.@rule[-1].target='REJECT' + uci set firewall.@rule[-1].proto='all' + uci set firewall.@rule[-1].family='ipv4' + # 172.16/12 + uci add firewall rule + uci set firewall.@rule[-1].name='v10_deny_172net' + uci set firewall.@rule[-1].src='ubunt_upg' + uci set firewall.@rule[-1].dest='lan' + uci set firewall.@rule[-1].dest_ip='172.16.0.0/12' + uci set firewall.@rule[-1].target='REJECT' + uci set firewall.@rule[-1].proto='all' + uci set firewall.@rule[-1].family='ipv4' + uci commit firewall + fw4 reload ``` -5. 加"允许所需外网目的"的具名规则(`target=ACCEPT, src=ubunt_upg`,family ipv4),放在拒绝之后。 -6. `fw4 reload`(或 `/etc/init.d/firewall reload`)。 -7. **验证(看 nft 而非 UCI):** `nft list ruleset` 中拒绝规则先于允许命中;`fw4 print` 顺序正确;`wan` masq 仍在。 +5. **验证(看 nft 而非 UCI):** `nft list ruleset | grep -A6 "chain forward_ubunt_upg"` 应显示拒绝规则**全部在 `forward_ubunt_upg` 链**且先于 `accept_to_lan`;`wan` masq 仍在。若拒绝规则出现在 `input_ubunt_upg` 链 → 说明漏了 `dest='lan'`,回去补。 +6. **IPv6 核验:** `ip -6 addr show eth2` 只有 `fe80::`;`dhcp.ubunt_upg` 的 `ra='disabled'`、`dhcpv6='disabled'` → VLAN10 无 GUA/ULA、无 IPv6 DNS/路由/出口。 ### 11.4 IPv6:本阶段不提供 VLAN10 IPv6 @@ -354,12 +414,13 @@ ssh -4 root@192.168.66.1 'uci show network; uci show firewall; uci show dhcp; ip ### 11.5 部署后验证 -1. VLAN10 客户端拿 `192.168.10.x`,`ip route` 默认网关 `192.168.10.1`,DNS 正常。 -2. gfw 上 `logread`/DHCP 租约出现 VLAN10 客户端。 -3. 拒绝规则命中:从测试客户端 `ping 192.168.66.1/.26/.36/.46/.254`、`192.168.55.254`、LAN55 主机 → 全不通;访问 gfw 的 22/80/443 管理口 → 拒绝。 -4. NAT 命中:gfw `nft list ruleset` 中 `192.168.10.0/24 masquerade` 有 counter 增长。 -5. IPv6:`ip -6 addr`(客户端)除 fe80 外无地址;`curl -6` 失败。 -6. 抓包工具:`apk add tcpdump`(ImmortalWrt 25.12.0;勿用 opkg)。 +1. **链归属(已实测):** `nft list ruleset | grep -A6 "chain forward_ubunt_upg"` 确认 66/55/10/172 四条拒绝在 forward 链、先于 `accept_to_lan`;`192.168.10.0/24 masquerade` 仍在(§11.3 第 5 步已验)。 +2. **IPv6(已实测):** `ip -6 addr show eth2` 仅 `fe80::`;`dhcp.ubunt_upg.ra='disabled'` + `dhcpv6='disabled'`;odhcpd 不服务 eth2(§11.4 已验)。 +3. VLAN10 客户端拿 `192.168.10.x`,`ip route` 默认网关 `192.168.10.1`,DNS 正常(SSID 启用后验)。 +4. gfw 上 `logread`/DHCP 租约出现 VLAN10 客户端(SSID 启用后验)。 +5. 拒绝规则命中:从测试客户端 `ping 192.168.66.1/.26/.36/.46/.254`、`192.168.55.254`、LAN55 主机 → 全不通;访问 gfw 的 22/80/443 管理口 → 拒绝(SSID 启用后验)。 +6. NAT 命中:gfw `nft list ruleset` 中 `192.168.10.0/24 masquerade` 有 counter 增长(SSID 启用后验)。 +7. 抓包工具:`apk add tcpdump`(ImmortalWrt 25.12.0;勿用 opkg)。 ## 12. UniFi 改网络 + 启用 SSID(最后做) @@ -405,7 +466,7 @@ ssh -4 root@192.168.66.1 'uci show network; uci show firewall; uci show dhcp; ip |---|---| | §4 台面 | 还原台面配置或恢复出厂(见下) | | §5–7 上联/迁移 | 停手 → 刚迁的线逐根插回 ER-X 原口 → 逐根验证(IP/服务恢复、AP Connected、MAC 表回旧拓扑) | -| §9 PVE 边界 | 关 `ubnt-upg` SSID → gfw `ubunt_upg` 恢复绑 `eth0.10` → 恢复 gfw network/DHCP/firewall → 移除 VM140 新增 vNIC(`qm set 140 -delete net2`)→ 恢复 VM140 配置 → **最后**恢复 PVE `/etc/network/interfaces` 重启网络 → 分别验证 PVE/dns/ubnt/gfw 的 LAN66 | +| §9 PVE 边界 | 关 `ubnt-upg` SSID → gfw `ubunt_upg` 恢复绑 `eth0.10` → 恢复 gfw network/DHCP/firewall → 移除 VM140 新增 vNIC(`qm set 140 -delete net2`)→ 恢复 VM140 配置 → **最后**恢复 PVE `/etc/network/interfaces` 并 `ifreload -a` → 分别验证 PVE/dns/ubnt/gfw 的 LAN66 | | §10 SE5420 VLAN10 | 删 VLAN10(`VLAN → 802.1Q VLAN → VLAN配置` 删除 VLAN10),口 4/6 恢复 Untagged 仅 VLAN66、Tagged 清空 | | §11 gfw | 恢复已备份命名规则/NAT;不触碰 LAN55/LAN66 主网规则 | | §12 SSID | 只关 `ubnt-upg` SSID;主 SSID、`.254`、gfw 66 路径不受影响 |