homelab-vlan-segmentation

homelab-vlan-segmentation

热门

使用 UniFi、pfSense/OPNsense 和 MikroTik 将家庭网络划分 VLAN,隔离 IoT 设备、访客、信任设备及服务器流量——涵盖交换机 Trunk 配置、防火墙规则与无线 SSID 映射。

24万Star
3.6万Fork
更新于 2026/8/4
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