SKILL.md
只读
名称
homelab-vlan-segmentation
描述
使用 UniFi、pfSense/OPNsense 和 MikroTik 将家庭网络划分 VLAN,隔离 IoT 设备、访客、信任设备及服务器流量——涵盖交换机 Trunk 配置、防火墙规则与无线 SSID 映射。
Homelab VLAN Segmentation
如何把家庭网络划分成互相隔离的 VLAN,让 IoT 智能设备、访客设备和你的主力 PC 无法互访。这是提升家庭网络安全性性价比最高、效果最立竿见影的升级方案。
本文展示的所有防火墙规则旨在增加网段间的隔离能力,绝不会削弱现有防护。建议在维护窗口期操作,且每完成一步都要验证跨网段连通性后再继续。
何时使用
- 首次在家庭网络中规划和搭建 VLAN
- 将 IoT 设备(智能灯、摄像头、电视等)与信任设备进行隔离
- 搭建无法访问内网设备的独立访客 Wi-Fi
- 向网络新手讲解 VLAN 的工作原理与隔离逻辑
- 配置 Trunk 端口、Access 端口以及 SSID 与 VLAN 的绑定映射
- 排查 pfSense/OPNsense/UniFi 上跨 VLAN 路由或防火墙规则失效的问题
工作原理
没有 VLAN — 大二层扁平网络:
所有设备都在 192.168.1.0/24
智能电视(潜在恶意软件漏洞)→ 可以直接访问你的 NAS、电脑和任意设备
划分 VLAN 后:
VLAN 10 — Trusted(信任区) 192.168.10.0/24 (电脑、手机、笔记本)
VLAN 20 — IoT(智能设备) 192.168.20.0/24 (智能电视、灯具、摄像头)
VLAN 30 — Servers(服务器) 192.168.30.0/24 (NAS、树莓派、虚拟机)
VLAN 40 — Guest(访客区) 192.168.40.0/24 (访客 Wi-Fi)
VLAN 99 — Management(管理)192.168.99.0/24 (交换机/AP 管理后台)
智能电视 → 禁止访问 192.168.10.0/24 和 192.168.30.0/24
访客设备 → 仅允许上网,无法探知或访问任何内网设备
VLAN 方案设计模板
VLAN 名称 网段 网关 用途
10 trusted 192.168.10.0/24 192.168.10.1 电脑、手机、笔记本
20 iot 192.168.20.0/24 192.168.20.1 智能家居设备
30 servers 192.168.30.0/24 192.168.30.1 NAS、树莓派、自建服务
40 guest 192.168.40.0/24 192.168.40.1 访客 Wi-Fi
99 management 192.168.99.0/24 192.168.99.1 网络设备 Web 管理后台
实战配置示例
典型配置:搭配 UniFi AP 和网管交换机的 Homelab:
场景:三居室,UniFi Dream Machine + UniFi 8口交换机 + 2个 AP
VLAN 10 — Trusted 192.168.10.0/24 MacBook, iPhone, iPad
VLAN 20 — IoT 192.168.20.0/24 Nest 恒温器、飞利浦 Hue、Ring 门铃、智能电视
VLAN 30 — Servers 192.168.30.0/24 群晖 NAS (192.168.30.10)、Pi-hole (192.168.30.2)
VLAN 40 — Guest 192.168.40.0/24 访客 Wi-Fi — 仅供上网
SSID → VLAN 绑定映射:
"Home" → VLAN 10 (WPA2, 强密码,仅限信任设备)
"IoT" → VLAN 20 (WPA2, 独立密码,可印在路由器上方便配网)
"Guest" → VLAN 40 (WPA2, 简单密码,可随时随地分享)
交换机端口行为:
Port 1 → 连路由器的 Trunk 端口 (Tagged VLANs 10,20,30,40,99)
Port 2 → 连 AP 的 Trunk 端口 (Tagged VLANs 10,20,40; AP 负责按 SSID 加 Tag)
Port 3 → Access 端口 VLAN 30 (NAS — Untagged,设备本身无需感知 VLAN)
Port 4 → Access 端口 VLAN 30 (Pi-hole — Untagged)
Port 5–8 → Access 端口 VLAN 10 (有线工作站电脑)
生效的防火墙规则(均为增加隔离能力的规则):
IoT → Trusted: 阻断 (BLOCK)
IoT → Servers: 阻断 (BLOCK),但放行 192.168.30.2:53 (允许访问 Pi-hole DNS)
IoT → Internet: 放行 (ALLOW)
Guest → 本地网络: 阻断 (BLOCK)
Guest → Internet: 放行 (ALLOW)
Trusted → 任意目的地: 放行 (ALLOW)
UniFi 配置指南
在 UniFi 控制器中创建网络
设置 (Settings) → 网络 (Networks) → 创建新网络 (Create New Network)
针对每个 VLAN 分别设置:
名称 (Name): IoT
用途 (Purpose): Corporate (提供 DHCP + 路由支持)
VLAN ID: 20
子网 (Network): 192.168.20.0/24
网关 IP (Gateway IP): 192.168.20.1
DHCP: 开启 (Enable)
DHCP 地址池范围: 192.168.20.100 – 192.168.20.254
将 SSID 绑定到 VLAN (UniFi)
设置 (Settings) → WiFi → 创建新 WiFi (Create New WiFi)
名称: IoT-Network
密码: <独立密码>
网络: IoT ← 此处选择刚才创建的 VLAN 网络
# 连入此 SSID 的所有设备都会被自动划分到 VLAN 20
名称: Guest
密码: <访客密码>
网络: Guest
访客策略 (Guest Policy): 启用 ← 同时隔离访客彼此之间的连接
UniFi 防火墙规则 (Traffic Rules)
设置 (Settings) → 流量与安全 (Traffic & Security) → 流量规则 (Traffic Rules)
# 阻断 IoT 设备访问 Trusted VLAN
动作 (Action): 阻断 (Block)
类别 (Category): 本地网络 (Local Network)
源地址 (Source): IoT (192.168.20.0/24)
目的地址 (Destination): Trusted (192.168.10.0/24)
# 仅允许 IoT 设备访问外网
动作: 放行 (Allow)
源地址: IoT
目的地址: Internet
# 阻断 Guest 访问所有本地内网
动作: 阻断 (Block)
源地址: Guest
目的地址: 本地网络 (Local Networks)
pfSense / OPNsense 配置指南
创建 VLAN
接口 (Interfaces) → 接口分配 (Assignments) → VLANs → 添加 (Add)
父接口 (Parent Interface): em1 (你的 LAN 网卡)
VLAN Tag: 20
描述 (Description): IoT
# 依次为每个 VLAN 重复上述操作,然后将各个 VLAN 分配给具体接口:
接口 (Interfaces) → 接口分配 (Assignments) → 添加 (Add)
选择刚才创建的 VLAN → 点击添加 (Add)
启用接口,将 IP 设置为网关地址 (192.168.20.1/24)
为每个 VLAN 配置 DHCP 服务
服务 (Services) → DHCP 服务器 (DHCP Server) → 选择对应的 VLAN 接口
启用 DHCP
地址池范围: 192.168.20.100 到 192.168.20.254
DNS 服务器: 192.168.30.2 ← 如果有 Pi-hole,填入其 IP
防火墙规则 (pfSense/OPNsense)
# 防火墙规则自上而下匹配,一旦匹配成功立即生效 (First match wins)。
# 在 IoT 接口上 (VLAN 20):
规则 1: 允许 IoT 访问 Pi-hole DNS ← 必须放在 RFC1918 阻断规则之前
协议: UDP/TCP
源地址: IoT net
目的地址: 192.168.30.2 端口 53
动作: 放行 (Allow)
规则 2: 阻断 IoT 访问 RFC1918 (所有私有 IP 地址段)
协议: 任意 (any)
源地址: IoT net
目的地址: RFC1918 (192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12)
动作: 阻断 (Block)
规则 3: 允许 IoT 访问外网 (internet)
协议: 任意 (any)
源地址: IoT net
目的地址: 任意 (any)
动作: 放行 (Allow)
# 在 Trusted 接口上 (VLAN 10):
放行所有流量 (信任设备可访问所有区域)
源地址: Trusted net
目的地址: 任意 (any)
动作: 放行 (Allow)
# 若某些 IoT 设备需要访问特定本地服务,可按需追加放行规则:
插入到规则 2 (RFC1918 阻断规则) 之前:
协议: TCP
源地址: IoT net
目的地址: 192.168.30.x 端口 8123 ← 例如 Home Assistant
动作: 放行 (Allow)
MikroTik 配置指南
# 步骤 1:创建 Bridge 并开启 VLAN 过滤功能
/interface bridge
add name=bridge vlan-filtering=yes
# 步骤 2:将物理端口添加进 Bridge
# 连接路由器/上行口的 Trunk 端口 (对所有 VLAN 加 Tag)
/interface bridge port
add bridge=bridge interface=ether1 frame-types=admit-only-vlan-tagged
# 连接信任设备的 Access 端口 (不加 Tag,分配至 VLAN 10)
/interface bridge port
add bridge=bridge interface=ether2 pvid=10 frame-types=admit-only-untagged-and-priority-tagged
# 连接 IoT 设备的 Access 端口 (不加 Tag,分配至 VLAN 20)
/interface bridge port
add bridge=bridge interface=ether3 pvid=20 frame-types=admit-only-untagged-and-priority-tagged
# 步骤 3:定义每个端口允许通过的 VLAN
/interface bridge vlan
add bridge=bridge tagged=ether1 untagged=ether2 vlan-ids=10
add bridge=bridge tagged=ether1 untagged=ether3 vlan-ids=20
# 步骤 4:在 Bridge 上创建 VLAN 虚拟接口 (用作网关 IP)
/interface vlan
add interface=bridge name=vlan10 vlan-id=10
add interface=bridge name=vlan20 vlan-id=20
# 步骤 5:配置网关 IP
/ip address
add interface=vlan10 address=192.168.10.1/24
add interface=vlan20 address=192.168.20.1/24
# 步骤 6:配置 DHCP 地址池与服务
/ip pool
add name=pool-trusted ranges=192.168.10.100-192.168.10.254
add name=pool-iot ranges=192.168.20.100-192.168.20.254
/ip dhcp-server
add interface=vlan10 address-pool=pool-trusted name=dhcp-trusted
add interface=vlan20 address-pool=pool-iot name=dhcp-iot
/ip dhcp-server network
add address=192.168.10.0/24 gateway=192.168.10.1
add address=192.168.20.0/24 gateway=192.168.20.1
# 步骤 7:防火墙 — 阻断 IoT 设备访问 Trusted VLAN
/ip firewall filter
add chain=forward src-address=192.168.20.0/24 dst-address=192.168.10.0/24 \
action=drop comment="Block IoT to Trusted"
交换机 Trunk 端口与 Access 端口对比
# Trunk 端口:传输多个带有标签 (Tagged) 的 VLAN 流量 — 常用于“交换机↔交换机”、“交换机↔路由器”、“交换机↔AP”之间的连接
# Access 端口:仅传输单个不带标签 (Untagged) 的 VLAN 流量 — 常用于连接终端设备 (电脑、摄像头、NAS)
# 连接到路由器的网管交换机端口必须设为 Trunk 端口:
允许的 VLAN 范围: 10, 20, 30, 40, 99
# 连接到台式 PC 的交换机端口应设为 Access 端口:
VLAN: 10 (trusted)
无需打标签 — PC 终端设备感知不到也不用关心 VLAN 的存在
# 连接到无线 AP 的交换机端口必须设为 Trunk 端口:
AP 会自动为来自不同 SSID 的数据包打上对应的 VLAN ID 标签
允许的 VLAN 范围: 10, 20, 40 (取决于该 AP 广播哪些 SSID)
踩坑防雷 (Anti-Patterns)
# 错误做法:仅划了 VLAN 却不配置防火墙隔离规则
# 原因:没有防火墙规则控制时,VLAN 间的路由默认是透传互通的,无法起到安全隔离效果
# 正确做法:划完 VLAN 后立即添加明确的 deny/block 阻断规则
# 错误做法:把 Pi-hole 直接丢进 IoT VLAN 里
# 原因:虽然 IoT 设备能访问到它,但在没有额外配置放行规则前,Trusted 信任区的设备将无法请求 DNS
# 正确做法:将 Pi-hole 部署在 Servers VLAN 中,并添加一条放行规则:允许所有 VLAN 访问其 53 端口
# 错误做法:将 Native VLAN 直接当作管理 VLAN (Management VLAN) 使用
# 原因:Untagged 流量掉入管理 VLAN 会导致易受 VLAN 跳跃攻击 (VLAN hopping attacks) 威胁
# 正确做法:指定一个未使用的 VLAN(例如 VLAN 999)作为 Native VLAN,所有管理流量均显式打上 Tag 标签
# 错误做法:IoT 的 SSID 与主 SSID 使用相同密码
# 原因:任何拿到密码的人都可能错把 IoT 设备连入主网络网段
最佳实践
- 建议起步规划 4 个 VLAN:Trusted(信任)、IoT(智能)、Servers(服务)、Guest(访客)——后期再按需扩充
- 将 Pi-hole 部署在 Servers VLAN 中(如 192.168.30.x)
- 在任何 RFC1918 私网阻断规则之前,先添加一条放行规则:允许所有 VLAN 访问 Pi-hole 的 DNS 端口(53 端口)
- 每修改一条防火墙规则都要测试隔离有效性:从 IoT VLAN 尝试 ping 信任设备,确认无法 ping 通
- 建立独立的 Management 管理 VLAN 专门用于交换机和 AP 的 Web 管理界面,且仅允许 Trusted VLAN 访问
- 建议用表格清晰整理并记录你的 VLAN 设计架构(包含 VLAN ID、名称、子网网段、用途)
相关 Skill 推荐
- homelab-network-setup
- homelab-pihole-dns
- homelab-wireguard-vpn






