SKILL.md
唯讀
名稱
homelab-vlan-segmentation
描述
使用 UniFi、pfSense/OPNsense 和 MikroTik 將家用網路劃分成不同 VLAN,以隔離 IoT、訪客、信任裝置及伺服器流量——包含交換器 Trunk 埠設定、防火牆規則與無線 SSID 對應。
Homelab VLAN Segmentation
如何將家用網路劃分成相互隔離的 VLAN,避免 IoT 裝置、訪客與主要電腦互相通訊。這是家用網路效益最高的資安升級做法。
本文展示的所有防火牆規則皆旨在加強網段間的隔離,不會移除現有的防護機制。請在維護時段進行變更,並在每完成一步後驗證網段間的連線能力,再繼續進行下一步。
使用時機
- 首次在家用網路設定 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 的 Web UI)
智慧電視 → 被封鎖,無法存取 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 溫控器、Philips Hue、Ring 門鈴、智慧電視
VLAN 30 — Servers 192.168.30.0/24 Synology 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 的 Tagging)
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 → Local networks: BLOCK
Guest → Internet: ALLOW
Trusted → everywhere: ALLOW
UniFi 設定
在 UniFi Controller 中建立網路
Settings → Networks → Create New Network
針對每個 VLAN:
Name: IoT
Purpose: Corporate (提供 DHCP + 路由)
VLAN ID: 20
Network: 192.168.20.0/24
Gateway IP: 192.168.20.1
DHCP: Enable
DHCP Range: 192.168.20.100 – 192.168.20.254
將 SSID 對應至 VLAN (UniFi)
Settings → WiFi → Create New WiFi
Name: IoT-Network
Password: <獨立密碼>
Network: IoT ← 在此選擇您的 VLAN
# 所有連接至此 SSID 的裝置都會分配到 VLAN 20
Name: Guest
Password: <訪客密碼>
Network: Guest
Guest Policy: Enable ← 同時隔離訪客彼此之間的連線
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 存取網際網路
Action: Allow
Source: IoT
Destination: Internet
# 封鎖訪客存取所有區域網路
Action: Block
Source: Guest
Destination: 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 Server → 選擇您的 VLAN 介面
Enable DHCP
Range: 192.168.20.100 至 192.168.20.254
DNS Servers: 192.168.30.2 ← 若有設定 Pi-hole 請填入其 IP
防火牆規則 (pfSense/OPNsense)
# 規則會由上至下依序比對,符合第一條即生效。
# 在 IoT 介面 (VLAN 20) 上:
規則 1:允許 IoT → Pi-hole DNS ← 必須放在 RFC1918 封鎖規則之前
Protocol: UDP/TCP
Source: IoT net
Destination: 192.168.30.2 port 53
Action: Allow
規則 2:封鎖 IoT → RFC1918 (所有私有 IP 區段)
Protocol: any
Source: IoT net
Destination: RFC1918 (192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12)
Action: Block
規則 3:允許 IoT → 網際網路
Protocol: any
Source: IoT net
Destination: any
Action: Allow
# 在 Trusted 介面 (VLAN 10) 上:
允許所有連線 (信任裝置可存取任何地方)
Source: Trusted net
Destination: any
Action: Allow
# 針對需要特定區域服務的 IoT 裝置設定額外例外情況:
插入至規則 2 (RFC1918 封鎖) 之前:
Protocol: TCP
Source: IoT net
Destination: 192.168.30.x port 8123 ← Home Assistant
Action: 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 埠(Untagged VLAN 10)
/interface bridge port
add bridge=bridge interface=ether2 pvid=10 frame-types=admit-only-untagged-and-priority-tagged
# IoT 裝置的 Access 埠(Untagged 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 埠 vs Access 埠
# Trunk 埠:傳送多個 VLAN 流量(Tagged)— 用於連接「交換器對交換器」、「交換器對路由器」、「交換器對 AP」
# Access 埠:僅傳送單一 VLAN 流量(Untagged)— 用於連接終端裝置(電腦、攝影機、NAS)
# 連接至路由器的網管型交換器連接埠應設定為 Trunk:
允許的 VLAN:10, 20, 30, 40, 99
# 連接至電腦的連接埠應設定為 Access 埠:
VLAN:10 (trusted)
不加 Tag — 電腦不需要也不需理解 VLAN
# 連接至 AP 的連接埠必須設定為 Trunk:
AP 會為來自各 SSID 的流量加上正確的 VLAN ID Tag
允許的 VLAN:10, 20, 40(視 AP 提供的 SSID 而定)
反模式(應避免的做法)
# 錯誤:建立 VLAN 但未新增防火牆規則
# 缺乏防火牆規則的 VLAN 無法提供安全性 — VLAN 間路由預設是完全開放的
# 正確:建立 VLAN 後立即新增明確的封鎖規則
# 錯誤:將 Pi-hole 放在 IoT VLAN 中
# IoT 裝置可存取,但信任裝置無法存取(除非設定額外規則)
# 正確:將 Pi-hole 放在 Servers VLAN 中,並新增規則允許所有 VLAN 存取 53 埠
# 錯誤:原生 VLAN (Native VLAN) 等於管理 VLAN (Management VLAN)
# 未帶 Tag 的流量落入管理 VLAN 會引發 VLAN 跳躍 (VLAN hopping) 攻擊風險
# 正確:使用專用且未使用的 VLAN 作為 Native VLAN(例如 VLAN 999),並保持管理流量帶有 Tag
# 錯誤:IoT SSID 與信任 SSID 使用相同的 Wi-Fi 密碼
# 任何取得密碼的人都可能將 IoT 裝置連接到錯誤的網段
最佳做法
- 建議先從 4 個 VLAN 開始:Trusted、IoT、Servers、Guest — 後續再依需求擴充
- 將 Pi-hole 放在 Servers VLAN (192.168.30.x)
- 新增一條防火牆規則,允許所有 VLAN 存取 Pi-hole IP 的 DNS (53 埠) — 且該規則必須放在任何 RFC1918 封鎖規則之前
- 每變更一次規則即測試隔離效果:從 IoT VLAN 嘗試 ping 信任裝置 — 應無法 ping 通
- 使用獨立的管理 VLAN 管理交換器與 AP 的 Web UI,並限制僅能從 Trusted VLAN 存取
- 將您的 VLAN 設計記錄在表格中(包含 VLAN ID、名稱、子網路、用途)
相關 Skill
- homelab-network-setup
- homelab-pihole-dns
- homelab-wireguard-vpn






