家庭网络改造:VLAN、PoE 和一次全屋断网事故

网络 · 7 分钟阅读· 4 次阅读

去年双十一买了台 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)

还没有评论,来说两句吧~

发表评论

验证码

提交后需站长审核,通过后才会显示。