Communitygithub.com

homelab-vlan-segmentation

홈 네트워크를 IoT, 게스트, 신뢰 및 서버 트래픽용 VLAN으로 분할합니다. UniFi, pfSense/OPNsense, MikroTik을 사용한 스위치 트렁크 구성, 방화벽 규칙, 무선 SSID 매핑을 포함합니다.

homelab-vlan-segmentation란 무엇인가요?

이 스킬은 홈 랩 환경에서 네트워크를 보안 VLAN으로 분할하는 포괄적인 가이드를 제공합니다. 사용자가 IoT 장치(스마트 TV, 카메라, 조명)를 신뢰할 수 있는 PC, 서버 및 게스트 트래픽으로부터 격리하여 가장 큰 보안 영향을 제공합니다. 이 스킬은 UniFi(UDM, 스위치, AP), pfSense/OPNsense, MikroTik 장비에 대한 VLAN 설정 단계별 지침을 다룹니다. 트렁크 및 액세스 포트 구성, SSID-VLAN 매핑, 샤딩된 방화벽 규칙(예: IoT→신뢰 차단, 게스트→로컬 차단)과 같은 핵심 개념을 설명합니다. 또한 초보자가 흔히 저지르는 오류(방화벽 규칙 없는 VLAN 생성, 잘못된 기본 VLAN 사용)에 대한 안티패턴과 Pi-hole DNS 서버 배치와 같은 모범 사례를 포함합니다. 이 가이드는 실제 예시(예: 3베드룸 주택 시나리오)를 제공하며, VLAN 설정이 네트워크 보안을 향상시키는 방법을 실용적으로 이해하는 데 중점을 둡니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/ECC/tree/main/skills/homelab-vlan-segmentation

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

홈랩 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

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

affaan-m/ECC

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

affaan-m/fal-ai-media

Unified media generation via fal.ai MCP — image, video, and audio. Covers text-to-image (Nano Banana), text/image-to-video (Seedance, Kling, Veo 3), text-to-speech (CSM-1B), and video-to-audio (ThinkSound). Use when the user wants to generate images, videos, or audio with AI.

affaan-m/manim-video

日本語翻訳:このファイルは manim-video 用の日本語翻訳が必要です

affaan-m/remotion-video-creation

Remotion のベストプラクティス - React で動画を作成する。3D、アニメーション、音声、字幕、チャート、トランジションなどをカバーするドメイン固有の29のルール。

affaan-m/video-editing

AI-assisted video editing workflows for cutting, structuring, and augmenting real footage. Covers the full pipeline from raw capture through FFmpeg, Remotion, ElevenLabs, fal.ai, and final polish in Descript or CapCut. Use when the user wants to edit video, cut footage, create vlogs, or build video content.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

agent-self-evaluation

Use after completing any non-trivial task. The agent self-rates its output on 5 axes — accuracy, completeness, clarity, actionability, conciseness — with concrete evidence per criterion. Produces a structured 1-5 scorecard with specific improvement suggestions.

agent-sort

Build an evidence-backed ECC install plan for a specific repo by sorting skills, commands, rules, hooks, and extras into DAILY vs LIBRARY buckets using parallel repo-aware review passes. Use when ECC should be trimmed to what a project actually needs instead of loading the full bundle.

ai-first-engineering

Engineering operating model for teams where AI agents generate a large share of implementation output. Use when setting team process, review gates, or ownership rules for a codebase largely written by agents.

ai-regression-testing

Regression testing strategies for AI-assisted development. Sandbox-mode API testing without database dependencies, automated bug-check workflows, and patterns to catch AI blind spots where the same model writes and reviews code. Use when adding regression coverage to AI-assisted code, or when the same model both wrote and reviewed a change.

android-clean-architecture

Clean Architecture patterns for Android and Kotlin Multiplatform projects — module structure, dependency rules, UseCases, Repositories, and data layer patterns. Use when structuring modules, layers, or data flow in an Android or KMP project.

angular-developer

Generates Angular code and provides architectural guidance. Trigger when creating projects, components, or services, or for best practices on reactivity (signals, linkedSignal, resource), forms, dependency injection, routing, SSR, accessibility (ARIA), animations, styling (component styles, Tailwind CSS), testing, or CLI tooling.

관련 스킬