家庭网络改造:VLAN、PoE 和一次全屋断网事故
去年双十一买了台 8 口 2.5G 网管交换机(带 PoE),把家里网络整个重做了一遍。
动机有三个:智能家居设备太多(37 个)、访客 WiFi 和主网混在一起、摄像头直连主网不安全。
一、拓扑
光猫(桥接)→ 树莓派(PPPoE 拨号 + 防火墙)
│
trunk(VLAN 10/20/30/40)
│
8 口网管交换机
┌──────┬──────┼──────┬───────┐
客厅AP 书房 摄像头×3 电视 NAS
二、VLAN 规划
| VLAN | 用途 | 网段 | 说明 |
|---|---|---|---|
| 10 | 主网络 | 192.168.10.0/24 | 电脑、手机、NAS |
| 20 | IoT | 192.168.20.0/24 | 智能家居,禁止访问其他网段 |
| 30 | 访客 | 192.168.30.0/24 | 只有外网权限 |
| 40 | 摄像头 | 192.168.40.0/24 | 只允许 NAS 访问 |
关键是默认拒绝:VLAN 之间默认不通,只开需要的方向。
三、交换机配置(以某 8 口 2.5G 网管交换机为例)
概念上要搞清楚 pvid 和 tagged/untagged:
- 接终端设备的端口:设 pvid,untagged
- 接路由器的 trunk 口:tagged 所有 VLAN
port 1 (trunk → 路由): tagged 10,20,30,40 pvid 1
port 2 (客厅AP): untagged 10 tagged 20,30 pvid 10
port 3-5 (摄像头): untagged 40 pvid 40
port 6 (电视): untagged 20 pvid 20
port 7 (NAS): untagged 10 pvid 10
port 8 (书房): untagged 10 pvid 10
客厅 AP 那个端口是难点:AP 上要同时提供主网 SSID 和访客 SSID,所以必须是 tagged 的混合口。
大部分家用 AP 支持「多 SSID 绑 VLAN」,但便宜的不支持,买之前要确认。
四、路由侧的防火墙
树莓派上(nftables):
# IoT 只能出网,不能访问内网
nft add rule inet filter forward iifname "vlan20" oifname "vlan10" drop
nft add rule inet filter forward iifname "vlan20" oifname "vlan40" drop
# 摄像头只能被 NAS 访问
nft add rule inet filter forward iifname "vlan40" ip daddr 192.168.10.20 accept
nft add rule inet filter forward iifname "vlan40" drop
# 访客只能出外网
nft add rule inet filter forward iifname "vlan30" oifname "vlan10" drop
五、DHCP 方案
四个网段要么用四个 dnsmasq 实例,要么用 dnsmasq 的多接口配置。我用后者:
interface=br0.10
interface=br0.20
interface=br0.30
interface=br0.40
bind-interfaces
dhcp-range=set:lan,192.168.10.100,192.168.10.200,12h
dhcp-range=set:iot,192.168.20.100,192.168.20.200,12h
dhcp-range=set:guest,192.168.30.100,192.168.30.200,2h
dhcp-range=set:cam,192.168.40.100,192.168.40.200,12h
dhcp-option=tag:lan,3,192.168.10.1
dhcp-option=tag:iot,3,192.168.20.1
...
VLAN 子接口要用 8021q:
sudo ip link add link eth1 name br0.10 type vlan id 10
sudo ip addr add 192.168.10.1/24 dev br0.10
六、那次全屋断网
配置做完,一切正常。第三天晚上八点,全屋断网。
排查过程:交换机灯正常,树莓派能 ping 通外网,内网设备互相 ping 不通。
登录交换机看日志:
%SPANTREE-2-BLOCK_BPDUGUARD: BPDU received on port 3
%LINK-3-UPDOWN: Interface GigabitEthernet0/3, changed state to down
端口 3 是摄像头。摄像头里带了个廉价的交换机芯片,它发出了 BPDU,触发了 STP 的 BPDU Guard,端口被 block。
但为什么全屋断?因为这个交换机的 STP 全局开启,BPDU Guard 触发后引起了一次拓扑重算,重算期间所有端口短暂阻塞,而我的 AP 和交换机之间的链路协商又出了问题,导致 AP 掉线后再没回来(需要重启 AP)。
修复:
# 关掉全局 STP,只保留必要的边缘端口
spanning-tree mode disable
# 或者:开启 BPDU Guard 但只作用于接终端的端口,且不全局重算
家用网络其实不需要 STP(没有环路),直接关掉更稳。
那次之后我加了条规矩:任何网络变更都在周六上午做,且留出两小时观察时间。晚上八点改网络,出事的时候人在沙发上看电影,代价是整个晚上没网。
七、效果
- 37 个 IoT 设备不再占用主网段 IP,主网段干净了很多
- 访客 WiFi 给了朋友,连上以后只能上网,看不到我家 NAS
- 摄像头抓包确认只往 NAS 发流,没有偷偷连外网(之前有个摄像头确实在连一个国内 IP,被我拦截后功能正常)
- 主网段的广播包减少,WiFi 延迟从平均 12ms 降到 5ms
八、值得做吗
如果你家设备少于 20 个,没必要。一个普通路由器 + 访客网络就够。
如果设备超过 30 个、或者有摄像头、或者家里有办公设备,VLAN 隔离带来的收益是实打实的:故障排查快、安全隐患少、网络看起来干净。
代价是要花一个周末,并且做好「改坏了全家断网」的心理准备。
评论 (0)
还没有评论,来说两句吧~
发表评论