홈랩 VLAN 분할 (Homelab VLAN Segmentation)
홈 네트워크를 분리된 VLAN으로 나누어 IoT 장치, 게스트, 그리고 메인 PC가 서로 통신할 수 없도록 하는 방법입니다. 홈 네트워크 보안에 가장 큰 영향을 주는 업그레이드입니다.
여기에 표시된 모든 방화벽 규칙은 세그먼트 간 격리를 추가합니다. 기존 보호 기능을 제거하지 않습니다. 유지보수 시간을 정해 변경 사항을 적용하고, 각 단계 후 세그먼트 간 연결을 확인한 후 다음 단계로 넘어가십시오.
사용 시점
- 처음으로 홈 네트워크에 VLAN을 설정할 때
- IoT 장치(스마트 전구, 카메라, TV)를 신뢰 장치로부터 격리할 때
- 홈 장치에 접근할 수 없는 게스트 Wi-Fi 네트워크를 생성할 때
- VLAN 작동 방식을 잘 모르는 사람에게 설명할 때
- 트렁크 포트, 액세스 포트 및 SSID-VLAN 매핑을 구성할 때
- pfSense/OPNsense/UniFi에서 VLAN 간 라우팅 또는 방화벽 규칙 문제를 해결할 때
작동 방식
VLAN 없음 — 평평한 네트워크:
모든 장치가 192.168.1.0/24에 있음
스마트 TV (잠재적 맬웨어) → NAS, PC, 모든 것에 접근 가능
VLAN 사용:
VLAN 10 — 신뢰 192.168.10.0/24 (PC, 전화, 노트북)
VLAN 20 — IoT 192.168.20.0/24 (스마트 TV, 전구, 카메라)
VLAN 30 — 서버 192.168.30.0/24 (NAS, Pi, VM)
VLAN 40 — 게스트 192.168.40.0/24 (방문자 Wi-Fi)
VLAN 99 — 관리 192.168.99.0/24 (스위치/AP 웹 UI)
스마트 TV → 192.168.10.0/24 및 192.168.30.0/24 접근 차단
게스트 → 인터넷만 가능, 어떤 홈 장치도 볼 수 없음
VLAN 설계 템플릿
VLAN 이름 서브넷 게이트웨이 용도
10 trusted 192.168.10.0/24 192.168.10.1 PC, 전화, 노트북
20 iot 192.168.20.0/24 192.168.20.1 스마트 홈 장치
30 servers 192.168.30.0/24 192.168.30.1 NAS, Pi, 자체 호스팅
40 guest 192.168.40.0/24 192.168.40.1 방문자 Wi-Fi
99 management 192.168.99.0/24 192.168.99.1 네트워크 장비 웹 UI
예시
UniFi AP 및 관리형 스위치가 있는 일반적인 홈랩:
시나리오: 3베드룸 주택, UniFi Dream Machine + UniFi 8포트 스위치 + 2대의 AP
VLAN 10 — 신뢰 192.168.10.0/24 MacBook, iPhones, iPad
VLAN 20 — IoT 192.168.20.0/24 Nest 온도조절기, Philips Hue, Ring 초인종, 스마트 TV
VLAN 30 — 서버 192.168.30.0/24 Synology NAS (192.168.30.10), Pi-hole (192.168.30.2)
VLAN 40 — 게스트 192.168.40.0/24 방문자 Wi-Fi — 인터넷만 가능
SSID → VLAN 매핑:
"Home" → VLAN 10 (WPA2, 강력한 비밀번호, 신뢰 장치만)
"IoT" → VLAN 20 (WPA2, 별도 비밀번호, 설정을 위해 라우터에 인쇄)
"Guest" → VLAN 40 (WPA2, 자유롭게 공유할 수 있는 간단한 비밀번호)
스위치 포트 동작:
포트 1 → 트렁크 to 라우터 (태그된 VLAN 10,20,30,40,99)
포트 2 → 트렁크 to AP (태그된 VLAN 10,20,40; AP가 SSID별 태깅 처리)
포트 3 → 액세스 VLAN 30 (NAS — 태그 없음, VLAN 인식 불필요)
포트 4 → 액세스 VLAN 30 (Pi-hole — 태그 없음)
포트 5–8 → 액세스 VLAN 10 (유선 워크스테이션)
방화벽 규칙 적용 (모든 규칙은 격리를 추가하며, 기존 보호 기능을 제거하지 않음):
IoT → 신뢰: 차단
IoT → 서버: 192.168.30.2:53 (Pi-hole DNS 허용) 제외 차단
IoT → 인터넷: 허용
게스트 → 로컬 네트워크: 차단
게스트 → 인터넷: 허용
신뢰 → 모든 곳: 허용
UniFi 구성
UniFi 컨트롤러에서 네트워크 생성
설정 → 네트워크 → 새 네트워크 만들기
각 VLAN마다:
이름: IoT
용도: Corporate (DHCP + 라우팅 제공)
VLAN ID: 20
네트워크: 192.168.20.0/24
게이트웨이 IP: 192.168.20.1
DHCP: 활성화
DHCP 범위: 192.168.20.100 – 192.168.20.254
SSID를 VLAN에 매핑 (UniFi)
설정 → WiFi → 새 WiFi 만들기
이름: IoT-Network
비밀번호: <별도 비밀번호>
네트워크: IoT ← 여기서 VLAN 선택
# 이 SSID에 연결하는 모든 장치는 VLAN 20에 있음
이름: Guest
비밀번호: <게스트 비밀번호>
네트워크: Guest
게스트 정책: 활성화 ← 게스트끼리도 격리
UniFi 방화벽 규칙 (트래픽 규칙)
설정 → 트래픽 및 보안 → 트래픽 규칙
# IoT가 신뢰 VLAN에 도달하는 것을 차단
동작: 차단
범주: 로컬 네트워크
소스: IoT (192.168.20.0/24)
대상: 신뢰 (192.168.10.0/24)
# IoT가 인터넷에만 접속하도록 허용
동작: 허용
소스: IoT
대상: 인터넷
# 게스트가 모든 로컬 네트워크에 접근하는 것을 차단
동작: 차단
소스: Guest
대상: 로컬 네트워크
pfSense / OPNsense 구성
VLAN 생성
인터페이스 → 할당 → VLAN → 추가
부모 인터페이스: em1 (LAN NIC)
VLAN 태그: 20
설명: IoT
# 각 VLAN에 대해 반복한 후, 각 VLAN을 인터페이스에 할당:
인터페이스 → 할당 → 추가
생성한 VLAN 선택 → 추가 클릭
인터페이스 활성화, IP를 게이트웨이 주소로 설정 (192.168.20.1/24)
각 VLAN에 대한 DHCP
서비스 → DHCP 서버 → VLAN 인터페이스 선택
DHCP 활성화
범위: 192.168.20.100 ~ 192.168.20.254
DNS 서버: 192.168.30.2 ← Pi-hole IP (있는 경우)
방화벽 규칙 (pfSense/OPNsense)
# 규칙은 위에서 아래로 처리되며, 첫 번째 일치가 우선합니다.
# IoT 인터페이스 (VLAN 20)에서:
규칙 1: IoT → Pi-hole DNS 허용 ← RFC1918 차단 규칙 전에 반드시 와야 함
프로토콜: UDP/TCP
소스: IoT net
대상: 192.168.30.2 포트 53
동작: 허용
규칙 2: IoT → RFC1918 (모든 사설 IP 범위) 차단
프로토콜: any
소스: IoT net
대상: RFC1918 (192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12)
동작: 차단
규칙 3: IoT → 인터넷 허용
프로토콜: any
소스: IoT net
대상: any
동작: 허용
# 신뢰 인터페이스 (VLAN 10)에서:
모두 허용 (신뢰 장치는 모든 곳에 접근 가능)
소스: 신뢰 net
대상: any
동작: 허용
# 특정 로컬 서비스가 필요한 IoT 장치를 위한 추가 예외:
규칙 2 (RFC1918 차단) 앞에 삽입:
프로토콜: TCP
소스: IoT net
대상: 192.168.30.x 포트 8123 ← Home Assistant
동작: 허용
MikroTik 구성
# 1단계: VLAN 필터링이 활성화된 브리지 생성
/interface bridge
add name=bridge vlan-filtering=yes
# 2단계: 물리적 포트를 브리지에 추가
# 라우터/업링크로의 트렁크 포트 (모든 VLAN에 대해 태그됨)
/interface bridge port
add bridge=bridge interface=ether1 frame-types=admit-only-vlan-tagged
# 신뢰 장치용 액세스 포트 (태그되지 않은 VLAN 10)
/interface bridge port
add bridge=bridge interface=ether2 pvid=10 frame-types=admit-only-untagged-and-priority-tagged
# IoT 장치용 액세스 포트 (태그되지 않은 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단계: 브리지에 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가 신뢰 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"
스위치 트렁크 vs 액세스 포트
# 트렁크 포트: 여러 VLAN을 전달 (태그됨) — 스위치-스위치, 스위치-라우터, 스위치-AP 연결
# 액세스 포트: 하나의 VLAN만 전달 (태그 없음) — 엔드 장치(PC, 카메라, NAS)에 연결
# 라우터에 연결된 관리형 스위치 포트는 트렁크여야 함:
허용된 VLAN: 10, 20, 30, 40, 99
# PC에 연결되는 포트는 액세스 포트여야 함:
VLAN: 10 (신뢰)
태깅 없음 — PC는 VLAN을 알거나 신경쓰지 않음
# AP에 연결되는 포트는 트렁크여야 함:
AP가 각 SSID의 트래픽을 올바른 VLAN ID로 태그함
허용된 VLAN: 10, 20, 40 (AP가 제공하는 SSID에 따라 다름)
안티패턴
# 나쁨: 방화벽 규칙 없이 VLAN 생성
# 방화벽 규칙이 없는 VLAN은 보안을 제공하지 않습니다 — VLAN 간 라우팅은 기본적으로 개방됩니다
# 좋음: VLAN 생성 직후 명시적 차단 규칙 추가
# 나쁨: Pi-hole을 IoT VLAN에 배치
# IoT 장치는 접근 가능하지만 신뢰 장치는 접근 불가 (추가 규칙 필요)
# 좋음: Pi-hole을 서버 VLAN에 배치하고 모든 VLAN이 포트 53에 접근할 수 있도록 규칙 추가
# 나쁨: 네이티브 VLAN이 관리 VLAN과 동일
# 태그되지 않은 트래픽이 관리 VLAN에 유입되어 VLAN 호핑 공격 가능
# 좋음: 전용 미사용 VLAN을 네이티브로 사용 (예: VLAN 999), 관리 트래픽은 태그 유지
# 나쁨: IoT SSID와 신뢰 SSID에 동일한 Wi-Fi 비밀번호 사용
# 비밀번호를 알게 된 사람이 IoT 장치를 잘못된 세그먼트에 연결할 수 있음
모범 사례
- 신뢰, IoT, 서버, 게스트의 4개 VLAN으로 시작하고 필요에 따라 추가
- Pi-hole을 서버 VLAN(192.168.30.x)에 배치
- RFC1918 차단 규칙 전에 모든 VLAN에서 Pi-hole IP로의 DNS(포트 53)를 허용하는 방화벽 규칙 추가
- 규칙 변경 후 격리 테스트: IoT VLAN에서 신뢰 장치로 ping 시도 — 실패해야 함
- 스위치 및 AP 웹 UI용 관리 VLAN을 사용하고 신뢰 VLAN으로만 접근 제한
- VLAN 설계를 표(VLAN ID, 이름, 서브넷, 용도)로 문서화
관련 스킬
- homelab-network-setup
- homelab-pihole-dns
- homelab-wireguard-vpn