家庭网络 VLAN 划分实战:让 IoT、摄像头和访客各回各的网段
为什么要划 VLAN:先讲个真实场景 很多兄…
为什么要划 VLAN:先讲个真实场景
很多兄弟家里网络是「一锅端」的:电脑、手机、NAS、摄像头、智能音箱、扫地机器人、电视、空调,全挤在同一个 192.168.1.0/24 网段里。平时没啥感觉,直到某天你发现——几十块的智能插座居然在主动往外发包,摄像头能被公网扫到,来家里的客人一接 WiFi 就能直接访问你的 NAS 管理后台。
问题根源不在设备,而在网络没有分层。所有设备默认互相可见,等于把卧室、厨房、大门全打通了。VLAN(虚拟局域网)就是在这一个物理网络里,用「打标签」的方式隔出几个互不相通的虚拟网段。今天这篇文章,我带你用手里现成的软路由(iStoreOS / OpenWrt)把家庭网络切成几个区域,从头到尾有命令、能落地。
先搞懂三个词:Tagged / Untagged / Trunk
VLAN 的核心是给以太网帧加一个 802.1Q 标签(VLAN ID,范围 1~4094)。端口处理这个标签的方式有三种:
- Access 端口(Untagged):只属于一个 VLAN,进来的帧被打上这个 VLAN 的标签,出去的帧剥掉标签。接普通终端设备,比如电脑、摄像头。
- Trunk 端口(Tagged):同时跑多个 VLAN,帧带着标签通过。接路由器、交换机之间的级联口,或者支持多 SSID 的 AP。
- 混合口:既有 untagged(本征 VLAN / PVID)又有 tagged。路由器到交换机的口通常就是这种。
记住一句话就够了:设备不认标签,交换机认标签;交换机之间、交换机到路由器之间用 Tagged 传,设备侧用 Untagged 接。
方案设计:切四个区域
我按「最少改动、最大收益」的原则,给你一套四个 VLAN 的方案,你根据自己家的情况增减即可:
- VLAN 10 · 主网(trusted):你的电脑、手机、NAS,192.168.10.0/24。
- VLAN 20 · IoT(iot):智能插座、音箱、扫地机,192.168.20.0/24,只给上网,禁止访问主网和 NAS。
- VLAN 30 · 摄像头(cam):监控摄像头,192.168.30.0/24,禁止出公网,只允许主网设备主动访问它。
- VLAN 40 · 访客(guest):客人手机,192.168.40.0/24,只能上网,连设备之间都互相隔离。
硬件要求很轻:一台 iStoreOS / OpenWrt 软路由当主路由(这个我周一刚写过,没看过的先回去补课),下面挂一台支持 802.1Q 的网管交换机,或者干脆用支持「SSID 绑定 VLAN」的 AP。家里只有傻瓜交换机也没关系——那就先从「软路由多网口 + 按口划 VLAN」开始,一个口接一类设备,一样能隔离。
第一步:在 iStoreOS 上建 VLAN 接口
iStoreOS 底层是 OpenWrt,新版走 DSA 架构,VLAN 不是绑在某个口上,而是绑在网桥上,用 bridge-vlan 描述。我假设你的 LAN 口是 eth1、eth2(多网口的话自行替换)。先看现有配置:
# 登录软路由,看当前的网桥和端口
ssh root@192.168.1.1
ip -d link show br-lan
bridge vlan show
然后用 UCI 命令(或直接改 /etc/config/network)把 VLAN 加上。下面是核心配置,我拆开讲:
# 1) 先定义网桥设备,eth1/eth2 都作为成员口
uci set network.@device[0].name='br-lan'
uci set network.@device[0].type='bridge'
uci del network.@device[0].ports
uci add_list network.@device[0].ports='eth1'
uci add_list network.@device[0].ports='eth2'
# 2) 定义 bridge-vlan:每个 VLAN 指定哪些口以 tagged/untagged 方式参与
# VLAN 10 主网:eth1、eth2 都带标签往下传(接交换机/AP 做 trunk)
uci set network.vlan10='bridge-vlan'
uci set network.vlan10.device='br-lan'
uci set network.vlan10.vlan='10'
uci add_list network.vlan10.ports='eth1:t'
uci add_list network.vlan10.ports='eth2:t'
# VLAN 20 IoT、VLAN 30 摄像头、VLAN 40 访客同理
uci set network.vlan20='bridge-vlan'
uci set network.vlan20.device='br-lan'
uci set network.vlan20.vlan='20'
uci add_list network.vlan20.ports='eth1:t'
uci add_list network.vlan20.ports='eth2:t'
uci set network.vlan30='bridge-vlan'
uci set network.vlan30.device='br-lan'
uci set network.vlan30.vlan='30'
uci add_list network.vlan30.ports='eth1:t'
uci add_list network.vlan30.ports='eth2:t'
uci set network.vlan40='bridge-vlan'
uci set network.vlan40.device='br-lan'
uci set network.vlan40.vlan='40'
uci add_list network.vlan40.ports='eth1:t'
uci add_list network.vlan40.ports='eth2:t'
# 3) 每个 VLAN 建一个逻辑接口,配独立网段
uci set network.lan.device='br-lan.10'
uci set network.lan.ipaddr='192.168.10.1'
uci set network.lan.netmask='255.255.255.0'
uci set network.iot='interface'
uci set network.iot.device='br-lan.20'
uci set network.iot.proto='static'
uci set network.iot.ipaddr='192.168.20.1'
uci set network.iot.netmask='255.255.255.0'
uci set network.cam='interface'
uci set network.cam.device='br-lan.30'
uci set network.cam.proto='static'
uci set network.cam.ipaddr='192.168.30.1'
uci set network.cam.netmask='255.255.255.0'
uci set network.guest='interface'
uci set network.guest.device='br-lan.40'
uci set network.guest.proto='static'
uci set network.guest.ipaddr='192.168.40.1'
uci set network.guest.netmask='255.255.255.0'
# 4) 提交并重启网络
uci commit network
/etc/init.d/network restart
重启后,四个网段各自有网关了,但光有接口还不够——默认防火墙只对 lan 区域放行,新接口根本走不出去,也谈不上隔离。下一步就是防火墙区域和转发规则。
第二步:用防火墙区域把「能不能互相访问」定死
OpenWrt 的隔离精髓在 zone(区域):每个 zone 默认策略 input=REJECT, forward=REJECT,然后你显式「forward」谁到谁。这样默认就是隔离的,只放开你允许的方向,比一条条写 REJECT 规则稳得多。
# 三个新区域,默认全部拒绝输入和转发(输出放行才能上网)
for z in iot cam guest; do
uci set firewall.$z='zone'
uci set firewall.$z.name=$z
uci set firewall.$z.network=$z
uci set firewall.$z.input='REJECT'
uci set firewall.$z.output='ACCEPT'
uci set firewall.$z.forward='REJECT'
done
# 主网可以主动访问所有区域(你在电脑上能看摄像头、能配 IoT)
uci set firewall.fw_lan_iot='forwarding'
uci set firewall.fw_lan_iot.src='lan'
uci set firewall.fw_lan_iot.dest='iot'
uci set firewall.fw_lan_cam='forwarding'
uci set firewall.fw_lan_cam.src='lan'
uci set firewall.fw_lan_cam.dest='cam'
# IoT 和访客只许出公网,不许进主网、不许互访(默认 REJECT 已保证,这里只补 DHCP/DNS)
uci set firewall.rule_iot_dns='rule'
uci set firewall.rule_iot_dns.src='iot'
uci set firewall.rule_iot_dns.dest_port='53 67 68'
uci set firewall.rule_iot_dns.proto='tcp udp'
uci set firewall.rule_iot_dns.target='ACCEPT'
uci set firewall.rule_iot_dns.name='IoT-DHCP-DNS'
uci set firewall.rule_guest_dns='rule'
uci set firewall.rule_guest_dns.src='guest'
uci set firewall.rule_guest_dns.dest_port='53 67 68'
uci set firewall.rule_guest_dns.proto='tcp udp'
uci set firewall.rule_guest_dns.target='ACCEPT'
uci set firewall.rule_guest_dns.name='Guest-DHCP-DNS'
# 摄像头直接禁止出公网:不给它 output 之外的任何放行,再补一条阻止它的 WAN 出口
uci set firewall.rule_cam_block_wan='rule'
uci set firewall.rule_cam_block_wan.src='cam'
uci set firewall.rule_cam_block_wan.dest='wan'
uci set firewall.rule_cam_block_wan.target='REJECT'
uci set firewall.rule_cam_block_wan.name='Cam-No-Internet'
uci commit firewall
/etc/init.d/firewall restart
关键逻辑再强调一遍:zone 默认 REJECT + 显式 forwarding 放行,这是最不容易出错的写法。以后要临时让某台 IoT 设备访问 NAS,单独加一条精确到 IP 的 forwarding 或 rule 即可,不用动整体结构。
第三步:交换机 / AP 怎么配合
如果下面挂了网管交换机,核心就一件事:把连路由器的那个口设成 Trunk(1~40 全 Tagged),其余口按设备类型设成对应 VLAN 的 Access 口。以 TP-Link 网管交换机为例,在「VLAN → 802.1Q VLAN」里建 VLAN 10/20/30/40,端口成员里:上联口选 Tagged,接电脑的口在 VLAN 10 里选 Untagged,接摄像头的口在 VLAN 30 里选 Untagged,其余 VLAN 里设为非成员。
用支持多 SSID 的 AP(爱快、OpenWrt 的无线、TP-Link Omada 等)就更省事:每个 SSID 绑定一个 VLAN,客人连「Guest」这个 SSID 自动落到 VLAN 40,连「Home」落到 VLAN 10。很多 AP 还自带「访客隔离(Client Isolation)」,连设备之间互访都一并禁了。
验证与收尾:怎么确认隔离真的生效了
配置完别急着收工,逐项验证:
# 在软路由上看 VLAN 是否挂到网桥上
bridge vlan show
# 期望输出类似:
# port vlan-id
# eth1 10 20 30 40 (tagged)
# eth2 10 20 30 40 (tagged)
# 从电脑(VLAN 10)ping 摄像头网关,应该通
ping -c 3 192.168.30.1
# 把手机连到 IoT 或访客网,再 ping 主网 NAS,应该不通
ping -c 3 192.168.10.100 # 期望:超时
最后给你三条排错心法:① ping 不通先看 bridge vlan show 的 tagged/untagged 对不对,九成问题出在端口成员;② 跨 VLAN 访问不通先查防火墙 forwarding,别急着怪路由;③ 改完记得 uci commit 再 restart,OpenWrt 的 UCI 改动不提交重启就丢。
写在最后
VLAN 听起来是「企业网」的东西,但家庭场景里它解决的是实打实的痛:几十块钱的智能设备没打补丁、摄像头被扫、访客碰你的 NAS。花一个晚上把网络切成四个区域,以后谁出了问题都关在自己的小隔间里,不牵连全家。
这套配置我贴的都是 iStoreOS / OpenWrt 的 UCI 命令,你直接粘进去改改网段和端口就能用。动手前照例提醒一句:远程操作软路由前,先保证自己有一条能回到路由器管理界面的通路(比如接在有线 LAN 口上),网络重启的瞬间别把自己关在外面。有踩坑的,评论区见。
