infra
Platform

모듈 맵

[Network] Port Security와 VLAN 필터링 기초

0 / 35 완료

펼치기
0 / 35 완료0%

네트워크 트러블슈팅 · 25 / 35

[Network] Port Security와 VLAN 필터링 기초

VLAN이 왜 필요한지, 개발망/운영망 분리가 어떻게 동작하는지, 클라우드 보안 그룹이 이걸 어떻게 대체하는지 이해합니다

🚨INCIDENT ALERT
HIGH

개발망과 운영망을 분리했다고 들었는데 실제로는 같은 브로드캐스트 도메인에 섞여 있었습니다. 한쪽의 실험 트래픽이 다른 망까지 영향을 주며 장애 범위가 커졌습니다.

VLAN은 물리 스위치를 더 사지 않고도 논리적으로 망을 나누는 방법입니다. 어디까지 같은 L2인지 알아야 장애 전파를 막을 수 있습니다.

VLAN과 논리적 망 분리

물리적인 네트워크 장비 하나로 여러 개의 독립된 네트워크처럼 운영할 수 있다면 어떨까요? VLAN(Virtual LAN)은 바로 이것을 가능하게 합니다. 개발망, 운영망, 관리망을 물리적으로 완전히 분리하지 않아도, VLAN 태그 하나로 논리적인 분리와 보안을 동시에 달성할 수 있습니다.


이번 챕터에서 배울 것
  • 1브로드캐스트 도메인 개념과 VLAN이 필요한 이유를 설명할 수 있다
  • 2VLAN의 동작 방식인 Access 포트와 Trunk 포트를 구분할 수 있다
  • 3개발망/운영망/관리망을 논리적으로 분리하는 설계 패턴을 적용할 수 있다
  • 4클라우드에서 VPC 서브넷과 보안 그룹이 VLAN을 대체하는 방식을 이해할 수 있다
실습 환경 준비
현재 네트워크 인터페이스 목록 확인
ip link show
VLAN 커널 모듈 로드 확인
lsmod | grep 8021q || sudo modprobe 8021q
vlan 패키지(vconfig) 설치 — 레거시 도구 실습 시 필요
sudo apt-get install -y vlan
VLAN 인터페이스는 실물 스위치 없이도 리눅스 브리지로 실습 가능

가상 환경(KVM, VirtualBox, VMware)에서 스위치 포트를 Trunk 모드로 설정하면 실제 태깅 동작을 확인할 수 있습니다.

VLAN 기본 개념

💡개념

브로드캐스트 도메인과 VLAN의 필요성

같은 스위치에 연결된 개발서버와 운영서버가 있습니다. 개발팀이 실수로 브로드캐스트 폭풍을 일으켰고, 트래픽이 운영 서버까지 덮쳐서 응답 지연이 발생했습니다. 네트워크를 물리적으로 분리하지 않으면 이런 사고가 반복됩니다. VLAN은 물리 장비를 추가하지 않고 네트워크를 논리적으로 분리하는 방법으로, 이 원리를 이해하면 클라우드의 VPC 개념도 자연스럽게 연결됩니다.

브로드캐스트 도메인과 VLAN의 필요성 — 같은 스위치의 모든 포트는 하나의 브로드캐스트 도메인이라 한 장비의 브로드캐스트 폭풍이 전체에 퍼짐(개발 트래픽이 운영 서버까지 영향). VLAN은 물리 장비 추가 없이 스위치를 논리적으로 분리해 도메인을 나눔 — 클라우드 VPC/서브넷의 토대확대

브로드캐스트 도메인이란

이더넷 네트워크에서 ARP, DHCP 등의 브로드캐스트 패킷은 같은 L2 세그먼트의 모든 호스트에게 전달됩니다. 이 범위를 브로드캐스트 도메인이라고 합니다.

스위치 1대에 100대 서버 연결 시 (VLAN 없음)

서버 A가 ARP 브로드캐스트 전송
    ↓
서버 B, C, D ... Z (99대) 전부 수신 및 처리
→ 불필요한 CPU 소모
→ 보안 문제 (내부 망 구조 노출)
→ 장애 전파 범위 넓음

VLAN으로 브로드캐스트 도메인 분리

VLAN은 물리 스위치를 논리적으로 나눠 각 그룹이 서로의 브로드캐스트를 보지 못하게 합니다. 아래 구조에서 개발망의 ARP는 운영망 서버에 전혀 전달되지 않습니다.

VLAN 10 (개발망): 서버 A, B, C
VLAN 20 (운영망): 서버 D, E, F
VLAN 30 (관리망): 서버 G, H

서버 A가 ARP 브로드캐스트 전송
    ↓
VLAN 10 내의 서버 B, C만 수신
서버 D~H는 수신하지 않음 ← 격리 성공!

VLAN이 해결하는 문제들

문제VLAN 없음VLAN 있음
보안 격리같은 스위치면 같은 망VLAN별 완전 격리
브로드캐스트 부하모든 호스트가 수신VLAN 내부만 수신
물리 장비 비용망별 스위치 필요스위치 1대로 분리 가능
망 확장성물리 케이블 재배선포트 설정만 변경

언제 VLAN이 필요한가

  • 개발/스테이징/운영 환경을 같은 물리 인프라에서 분리할 때
  • PCI-DSS, HIPAA 등 컴플라이언스 요구 보안 분리
  • 멀티테넌트 환경에서 고객 간 격리
  • IoT/OT 장비를 IT 네트워크와 분리
💡개념

802.1Q VLAN Tagging — Trunk와 Access 포트

VLAN을 설정했는데 같은 VLAN 내에서도 통신이 안 됩니다. 스위치 포트 설정을 보면 어떤 포트는 access mode, 어떤 포트는 trunk mode로 되어 있습니다. 이 차이를 모르면 잘못 설정해도 어디가 틀린지 찾을 수 없습니다. 802.1Q 태깅이 어떻게 VLAN 정보를 프레임에 실어 나르는지 이해해야 포트 설정이 왜 이렇게 나뉘는지 납득이 됩니다.

802.1Q VLAN Tagging — Trunk 포트 vs Access 포트. Switch A와 Switch B를 잇는 Trunk 포트(802.1Q)는 VLAN 10·20·30 태그를 혼합해 전송하고, 각 스위치의 Access 포트는 단일 VLAN 단말(PC VLAN 10·20, IP Phone VLAN 30)을 태그 없이 연결한다(스위치가 태그 자동 추가/제거). 802.1Q 태그 프레임은 Dst MAC·Src MAC 뒤에 4바이트 802.1Q 태그(TPID 0x8100 + PCP 3bit + DEI 1bit + VID 12bit = VLAN ID 0~4094)가 삽입된다. 리눅스 서버는 ip link add link eth0 name eth0.10 type vlan id 10으로 VLAN 인터페이스를 만든다확대

802.1Q 프레임 구조

802.1Q 표준은 이더넷 프레임에 4바이트의 VLAN 태그를 삽입합니다.

이더넷 프레임 vs 802.1Q 태그 프레임 — Src MAC과 Type 사이에 4바이트 VLAN 태그(TPID·PCP·DEI·VID) 삽입확대

VID(VLAN Identifier)는 12비트이므로 최대 4094개의 VLAN을 구성할 수 있습니다.

Access 포트 vs Trunk 포트

Access 포트 vs Trunk 포트 — Access는 한 VLAN 단말 연결(태그 추가/제거), Trunk는 여러 VLAN 태그를 그대로 운반(스위치 간 연결)확대

  • Access 포트 — 일반 서버/PC 연결용. 태그 없는 프레임을 받아 VLAN 태그를 붙이고, 보낼 때 태그를 제거한다(단말은 VLAN을 모름).
  • Trunk 포트 — 스위치 간 또는 서버 VLAN 트렁킹용. 여러 VLAN의 태그 프레임을 그대로 실어 나른다(상대는 VLAN 인식).

PVID (Port VLAN ID)

Access 포트의 기본 VLAN을 PVID 또는 Native VLAN이라고 합니다. 태그 없는 프레임이 들어오면 해당 포트의 PVID로 처리됩니다.

스위치 포트 설정:
- 포트 1: PVID=10 (개발망 서버)
- 포트 2: PVID=20 (운영망 서버)
- 포트 24: Trunk (다른 스위치 연결)

리눅스 서버에서의 VLAN 처리

리눅스 서버를 스위치 Trunk 포트에 연결하면, 서버에서 직접 VLAN을 처리할 수 있습니다.

물리 NIC eth0를 Trunk 포트에 연결하면, 그 위에 VLAN별 서브인터페이스를 만들 수 있습니다.

  • eth0.10 — VLAN 10 (192.168.10.x)
  • eth0.20 — VLAN 20 (192.168.20.x)
  • eth0.30 — VLAN 30 (192.168.30.x)

이를 통해 NIC 하나로 여러 망에 동시 접속이 가능합니다.


💡개념

프레임 하나가 스위치를 건너가는 법 — MAC 학습부터 VLAN 격리까지 5단계

VLAN을 나눴는데 통신이 되거나 안 되는 이유를 이해하려면, 그 아래에서 스위치가 프레임 한 개를 어떻게 처리하는지를 먼저 봐야 합니다. 스위치는 라우터처럼 IP를 보지 않습니다 — 오직 MAC 주소를 배우고(learning), 그 학습된 표를 보고 목적지 포트로만 보내며(forwarding), 모르면 뿌리고(flooding), 이 모든 걸 같은 VLAN 안에서만 합니다. 이 5단계를 알면 "MAC 플래핑", "브로드캐스트 폭풍", "PVID 불일치로 단절" 같은 L2 장애가 각각 어느 단계의 고장인지 보입니다.

TEXT
[스위치]  프레임 수신 (in: 포트3, VLAN 10)
   │
   ① 프레임 수신 → 들어온 포트·VLAN 확인
   │
   ② 출발지 MAC 학습
   │    (출발지MAC, 포트3, VLAN10)을 MAC 주소 테이블에 기록
   │
   ③ 목적지 MAC 조회 (MAC 테이블에서)
   │
   ④ 포워딩 결정
   │    ├─ 테이블에 있음 → 그 포트로만 전달
   │    ├─ 없음(unknown unicast)·브로드캐스트 → 같은 VLAN 전 포트로 플러딩
   │    └─ 학습이 쌓이면 다음부터는 플러딩 안 함
   │
   ⑤ VLAN 경계 적용
   │    전달·플러딩 모두 같은 VLAN 안에서만 → 다른 VLAN엔 안 감
   ▼
같은 VLAN이면 도달, 다른 VLAN이면 라우터/L3를 거쳐야

각 단계에서 무슨 일이 일어나고, 어긋나면 어떤 증상인가:

단계하는 일여기서 어긋나면
① 수신프레임이 들어온 물리 포트와 그 포트의 VLAN을 확인한다Access 포트 PVID가 서버가 쓰는 VLAN과 다르면 여기서부터 엉뚱한 VLAN으로 처리
② MAC 학습출발지 MAC을 (포트·VLAN)과 함께 표에 적는다같은 MAC이 두 포트에서 번갈아 학습됨 → MAC 플래핑(루프·중복 MAC) → 간헐 끊김
③ 목적지 조회목적지 MAC이 표에 있는지 찾는다표에 없으면(아직 미학습) 다음 단계로 넘어가 플러딩
④ 포워딩/플러딩알면 한 포트로, 모르면·브로드캐스트면 같은 VLAN 전체로 뿌린다루프가 있으면 브로드캐스트가 무한 복제 → 브로드캐스트 폭풍으로 전체 마비
⑤ VLAN 경계전달·플러딩을 같은 VLAN으로 한정한다Trunk allowed vlan 누락·PVID 불일치 → 프레임이 드랍되거나 다른 VLAN으로 새서 ARP 실패·격리 붕괴

정리하면 스위치의 일은 **"배우고(②)·찾고(③)·같은 VLAN 안에서만 보낸다(④·⑤)"**로 요약됩니다. 그래서 L2 장애는 단계로 대응됩니다 — 같은 VLAN 두 호스트가 아예 안 되면 ①·⑤의 VLAN/PVID 불일치, 통신은 되는데 간헐적으로 끊기고 로그에 같은 MAC이 포트를 오가면 ②의 MAC 플래핑(대개 물리 루프), 특정 시점에 망 전체가 느려지고 브로드캐스트가 폭증하면 ④의 브로드캐스트 폭풍입니다. 진단은 스위치의 show mac address-table로 MAC이 어느 포트·VLAN에 학습됐는지 보고, 서버에선 tcpdump -e -n vlan으로 프레임에 붙은 <VLAN 태그>가 기대한 값인지 확인하는 것으로 시작합니다.


💡개념

클라우드에서 VLAN의 개념이 어떻게 사용되는가

온프레미스에서는 VLAN으로 망을 분리하지만, AWS/GCP 같은 클라우드에서는 같은 개념이 다른 이름으로 구현됩니다.

클라우드에서의 VLAN 개념 — 온프레미스 vs AWS 비교. 온프레미스의 VLAN(논리 분리)은 VPC, VLAN 서브넷은 Subnet, L2 스위치 포트는 ENI(Elastic Network Interface), 방화벽 ACL은 Security Group + NACL, Trunk 포트는 VPC Peering/Transit GW, VLAN 간 라우팅은 Route Table, ISP 연결은 Internet Gateway로 각각 대응된다. AWS VPC는 소프트웨어 정의 VLAN의 진화로, VPC 10.0.0.0/16 안에서 Public Subnet(IGW로 인터넷 직접 통신)·Private Subnet(NAT GW로 아웃바운드)·DB Subnet(인터넷 완전 차단)으로 계층을 나눈다확대

온프레미스AWS
VLAN (L2 분리)VPC 서브넷 (IP 범위 분리)
스위치 ACLSecurity Group (포트 기반 허용/차단)
VLAN 간 라우터VPC Route Table
방화벽Network ACL (NACL)

실제 대응 예시:

온프레미스AWS
개발망 VLAN 1010.0.1.0/24 (dev-subnet)
운영망 VLAN 2010.0.2.0/24 (prod-subnet)
관리망 VLAN 10010.0.100.0/24 (mgmt-subnet)

클라우드 Security Group = VLAN + 방화벽 — 온프레미스의 두 계층 기능을 하나의 규칙 셋으로 통합합니다:

온프레미스: VLAN으로 격리 + 별도 방화벽 장비로 차단
AWS:        VPC 서브넷 분리 + Security Group으로 포트 제어

Security Group 규칙 예시 (DB 서버):
  Inbound:  TCP 3306  from  10.0.2.0/24 (운영 서브넷만 허용)
  Inbound:  TCP 3306  from  10.0.100.0/24 (관리 서브넷만 허용)
  Outbound: 모두 차단 (DB는 외부 연결 불필요)

개발자는 스위치를 만질 일이 없지만, "왜 이 서버가 저 서버랑 통신이 안 되는가"를 이해하려면 VLAN 개념을 알아야 VPC 서브넷 설계를 제대로 할 수 있습니다.


참고: 리눅스에서 직접 VLAN 인터페이스를 생성하는 실습(ip link add, 8021q 모듈)은 네트워크 엔지니어 영역입니다. 개발자로서 직접 스위치를 설정할 일은 없으며, 클라우드 환경에서는 콘솔/CLI로 서브넷과 보안 그룹을 관리합니다.


VLAN 문제 증상 → 원인 판단
같은 스위치인데 두 호스트가 전혀 통신 안 됨 (ping도 안 됨)Access 포트 VLAN 불일치 — 두 포트가 다른 VLAN에 할당됨. 스위치 포트의 VLAN ID 확인(L2 격리는 의도된 차단)
ping은 되는데 가끔/한 방향만 끊기고 ARP가 불안정Trunk의 PVID(native VLAN) 불일치 — 양단 trunk 포트의 native VLAN이 다름. 태그 없는 프레임이 엉뚱한 VLAN으로 감
작은 패킷(ping)은 되는데 대용량 전송·HTTPS만 끊김MTU 불일치 — VLAN 태그(4바이트)로 인해 1500이 초과. trunk 구간 MTU를 1504+(또는 점보)로, 또는 호스트 MTU 하향
다른 VLAN인데 통신이 됨 (격리가 안 됨)VLAN 누수 — trunk가 불필요한 VLAN을 허용(allowed vlan 과다) 또는 라우터/L3에서 의도치 않은 inter-VLAN 라우팅. allowed VLAN 최소화
내 서버가 어느 VLAN에 있는지 확인ip -d link show eth0.10 (vlan id 표시), cat /proc/net/vlan/config, 스위치측 show vlan/show interface status. 태그 인터페이스(eth0.N)의 N이 VLAN ID
1리눅스에서 VLAN 인터페이스 생성 및 확인

리눅스 서버에서 VLAN 인터페이스를 직접 생성해보고, 802.1Q 태깅이 어떻게 동작하는지 확인합니다.

로컬 터미널
# 1단계: 8021q 커널 모듈 로드 확인
lsmod | grep 8021q
# 없으면 로드
sudo modprobe 8021q

# 2단계: VLAN 10 인터페이스 생성 (eth0에 연결)
sudo ip link add link eth0 name eth0.10 type vlan id 10

# 3단계: VLAN 인터페이스에 IP 할당 및 활성화
sudo ip addr add 192.168.10.100/24 dev eth0.10
sudo ip link set eth0.10 up

# 4단계: 인터페이스 목록 확인
ip link show eth0.10
# eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
# link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

# 5단계: VLAN 상세 정보 확인
ip -d link show eth0.10
# vlan protocol 802.1Q id 10 <REORDER_HDR>  ← VLAN ID 확인
sudo ip link add link eth0 name eth0.10 type vlan id 10
🔍실행 후 확인할 것
  • ip -d link show eth0.10 출력에서 "vlan protocol 802.1Q id 10" 먼저 확인 → 그 다음 eth0.10@eth0 형태로 부모 인터페이스(eth0)가 명시되는지 확인
  • VLAN ID 수치 확인: ip -d link 출력의 id 값이 스위치 포트의 PVID(또는 Trunk 허용 VLAN)와 일치해야 통신 가능 — 숫자 하나라도 다르면 ARP 응답 없음으로 통신 완전 단절
  • ip addr show eth0.10에서 IP 정상 + ping 실패 → VLAN ID 불일치(스위치 설정 확인); ip addr show에서 IP 없음 → ip addr add 미실행; lsmod | grep 8021q 결과 없음 → modprobe 8021q 필요

트러블슈팅

L2 스위치 및 VLAN 망 분리 환경의 장애 극복

실무 온프레미스 인프라 환경에서 서로 다른 VLAN ID를 사용하는 컨테이너 또는 가상 서버 간의 통신 장애가 발생하면, SRE는 L2 스위치의 태깅(Tagging) 정책과 포트 할당 오류를 가장 먼저 의심해야 합니다.

  • 네트워크 인터페이스 VLAN 수동 확인 규칙:
    • Trunk 포트 설정 점검: 스위치가 다중 VLAN 트래픽을 단일 물리 케이블로 흘려보내는 Trunk 모드로 올바르게 정의되어 있는지 점검합니다.
    • 물리 레이어 상태 점검: ip link show 명령어를 실행하여 물리 카드 포트가 LOWER_UP 상태인지 검증합니다.

증상

서버에 VLAN 인터페이스를 설정하고 IP를 잡았는데, 게이트웨이나 같은 망의 다른 서버와 통신이 전혀 안 됩니다.

로컬 터미널
# 실습 디렉토리 준비
mkdir -p /tmp/networking/part5/exam_24 && cd /tmp/networking/part5/exam_24

ping -c 4 192.168.10.1
# PING 192.168.10.1: 56 data bytes
# Request timeout for icmp_seq 0
# Request timeout for icmp_seq 1
# ...
# 100% packet loss

# ARP 테이블 확인
arp -n
# (아무것도 없거나 incomplete 상태)
ip neigh show
# 192.168.10.1 dev eth0.10  FAILED

원인 진단

로컬 터미널
# 서버측 VLAN 설정 확인
ip -d link show eth0.10
# vlan protocol 802.1Q id 10  ← 서버는 VLAN 10으로 설정됨

# 패킷 캡처로 실제 태그 확인
sudo tcpdump -i eth0 -e -n vlan
# 나가는 패킷: VLAN 10 태그가 달려서 나감

# 스위치 포트 설정 확인 (관리자에게 확인 요청 or 직접 확인)
# 스위치 포트가 Access PVID=20으로 설정되어 있다면?
# → 스위치는 VLAN 10 태그를 무시하거나 잘못된 VLAN으로 처리

문제 상황 다이어그램: VLAN trunk 설정 불일치로 발생하는 상황입니다.

VLAN 태그 불일치 — eth0.10이 VLAN 10으로 태깅한 프레임이 PVID 20인 Access 포트로 들어와 태그 불일치로 드랍·오처리되어 통신 불가확대

해결 방법

해결책 1: 스위치 포트를 Trunk 모드로 변경

서버가 VLAN 인터페이스를 사용한다면 스위치 포트를 Trunk로 설정해야 합니다.

스위치 설정 (Cisco IOS 예시):
interface GigabitEthernet0/1
  switchport mode trunk
  switchport trunk allowed vlan 10,20
  no shutdown

해결책 2: 서버에서 VLAN 인터페이스를 사용하지 않고 Access 포트 PVID에 맞춤

스위치 포트가 Access VLAN 10이라면 서버에서도 별도 VLAN 태깅 없이 eth0을 직접 사용합니다.

로컬 터미널
# 잘못된 방식: VLAN 인터페이스 사용 (스위치가 Access 모드일 때)
# ip addr add 192.168.10.10/24 dev eth0.10  ← 이렇게 하면 안 됨

# 올바른 방식: 부모 인터페이스에 직접 IP 설정
sudo ip addr add 192.168.10.10/24 dev eth0

확인 체크리스트

□ 스위치 포트 모드 확인 (Access / Trunk)
□ Access 모드라면 PVID가 서버가 원하는 VLAN과 일치하는지
□ Trunk 모드라면 허용된 VLAN 목록에 해당 VLAN이 포함되는지
□ 서버에서 tcpdump로 실제 나가는 패킷의 VLAN 태그 확인
□ 서버에서 ARP 요청이 나가는지 확인

증상

작은 파일 전송은 되는데 큰 파일 전송이 안 됩니다. ping은 되지만 SCP나 HTTP 다운로드가 중간에 끊깁니다.

로컬 터미널
# 소형 패킷 ping 성공
ping -c 4 192.168.10.1
# 0% packet loss

# 대형 패킷 ping 실패
ping -c 4 -s 1472 192.168.10.1
# 100% packet loss

원인

802.1Q VLAN 태그는 이더넷 프레임에 4바이트를 추가합니다. 기본 MTU 1500에서 태그 4바이트를 포함하면 실제 데이터 페이로드는 1496바이트로 줄어듭니다. MTU 설정이 맞지 않으면 큰 패킷이 드랍됩니다.

로컬 터미널
# VLAN 인터페이스의 MTU 확인
ip link show eth0.10
# eth0.10@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500  ← 이게 문제
# 실제로는 1496이어야 함 (또는 부모 eth0을 1504로 올려야 함)

해결 방법

로컬 터미널
# 방법 1: 부모 인터페이스 MTU를 1504로 올림 (점보 프레임 지원 시)
sudo ip link set eth0 mtu 1504

# 방법 2: VLAN 인터페이스 MTU를 1496으로 내림
sudo ip link set eth0.10 mtu 1496

# 방법 3: Netplan에서 MTU 설정
# /etc/netplan/01-vlan.yaml 에서:
# vlans:
#   eth0.10:
#     mtu: 1496

검증

로컬 터미널
# 1472바이트 (ICMP 헤더 28바이트 포함하면 총 1500바이트)
ping -c 4 -s 1472 -M do 192.168.10.1
# -M do: 단편화 금지 (DF bit 설정)

심화 — 태그를 안 붙이는 예외, 네이티브 VLAN

💡개념

심화: 네이티브 VLAN과 VLAN 호핑 — 태그 하나가 격리를 뚫는다

VLAN은 '태그로 나눈다'가 핵심인데, 트렁크에는 태그를 안 붙이는 예외가 하나 있습니다 — 네이티브 VLAN입니다. 이 예외를 이해하지 못하면, 잘 나눴다고 믿은 망에서 트래픽이 새거나(설정 실수) 공격자가 격리를 뛰어넘는(VLAN hopping) 구멍이 생깁니다.

  • 트렁크의 네이티브 VLAN은 태그 없이 전송됩니다: 802.1Q 트렁크는 여러 VLAN을 태그로 구분하지만, '네이티브 VLAN' 한 개는 관례상 태그 없이(untagged) 흘려보냅니다(기본은 VLAN 1). 받는 쪽은 태그 없는 프레임을 자기 네이티브 VLAN 소속으로 간주합니다.
  • 양단 네이티브 VLAN이 다르면 트래픽이 샙니다: 트렁크 한쪽이 네이티브 VLAN 1, 반대쪽이 99이면, 한쪽의 VLAN 1 트래픽이 태그 없이 건너가 반대쪽 VLAN 99로 섞여 들어갑니다. '나눴는데 새는' 조용한 격리 붕괴이고, CDP/LLDP에서 native VLAN mismatch 경고로 드러납니다.
  • 더블 태깅 VLAN 호핑: 공격자가 네이티브 VLAN 포트에서 802.1Q 태그를 두 개 겹쳐 보내면, 첫 스위치가 바깥(네이티브) 태그를 벗겨 트렁크로 내보내고, 두 번째 스위치가 안쪽 태그를 읽어 피해 VLAN으로 전달합니다 — 격리를 한 방향으로 뛰어넘는 공격입니다.
  • 방어(port security·VLAN filtering): 네이티브 VLAN을 VLAN 1이 아닌 미사용 전용 VLAN으로 바꾸고, 가능하면 네이티브도 태그하도록(vlan dot1q tag native) 강제합니다. 트렁크의 allowed vlan을 필요한 것만 명시(프루닝)하고, 액세스 포트는 미사용 시 블랙홀 VLAN에 넣고 트렁크 자동협상(DTP)을 끕니다.

상황: VLAN 10(개발)·20(운영)으로 분리해 뒀는데, 운영망 서버에서 tcpdump를 걸면 개발망의 브로드캐스트(ARP·DHCP 등)가 간간이 잡힙니다. PVID·Access 포트 설정은 맞고 통신도 정상인데 '보여선 안 될 게 보이는' 상황입니다.

원인: 스위치 간 트렁크의 네이티브 VLAN 불일치입니다. A 스위치는 네이티브 VLAN 1, B 스위치는 다른 VLAN으로 설정돼, 한쪽의 태그 없는(native) 프레임이 반대쪽에서 다른 VLAN으로 흡수되며 두 VLAN이 부분적으로 이어진 것입니다. 태그가 붙는 트래픽은 정상 분리돼 통신은 되지만, 태그 없는 native 트래픽만 새어 격리가 깨졌습니다.

진단: 트렁크 양단의 네이티브 VLAN을 맞대어 확인하고(show interfaces trunk, CDP/LLDP의 native VLAN mismatch 경고), 서버에서 tcpdump -e -n vlan으로 새어 든 프레임이 태그 없이(native로 처리돼) 왔는지 봅니다. 어느 트렁크 구간에서 native가 어긋났는지 링크별로 좁힙니다.

해결: 트렁크 양단의 네이티브 VLAN을 동일한 미사용 전용 VLAN으로 통일하고(운영 트래픽이 실린 VLAN을 native로 두지 않음), 가능하면 vlan dot1q tag native로 네이티브도 태그해 태그 없는 프레임 자체를 없앱니다. 트렁크 allowed vlan을 필요한 것만 남기고(프루닝), 액세스 포트의 DTP 자동협상을 꺼 의도치 않은 트렁크 형성을 막습니다. 이렇게 하면 double-tagging VLAN 호핑 위험도 함께 줄어듭니다.


실무 맥락

💼
실무 맥락
현업 패턴

3티어 네트워크 아키텍처와 VLAN

현대 데이터센터는 보통 코어-디스트리뷰션-액세스 3계층 구조이며, 각 계층 사이는 Trunk 링크로 연결됩니다.

데이터센터 3계층 스위치 구조 — 코어→디스트리뷰션→액세스 스위치를 Trunk로 연결하고, 액세스 스위치가 Access VLAN으로 웹·DB 서버를 수용확대

서버 가상화 환경에서의 VLAN

KVM/VMware 같은 하이퍼바이저 환경에서는 물리 NIC에 VLAN Trunk를 연결하고, 가상 머신별로 다른 VLAN을 할당합니다.

로컬 터미널
# KVM 브릿지에 VLAN 설정 예시
# 물리 NIC: ens3 → Trunk 포트 연결
# VM1: VLAN 10 (개발망)
# VM2: VLAN 20 (운영망)

# libvirt 네트워크 XML 예시 (vlan-10.xml)
# <network>
#   <name>vlan10</name>
#   <forward mode='bridge'/>
#   <bridge name='br10'/>
#   <vlan tag='10'>
#     <interface dev='ens3'/>
#   </vlan>
# </network>

클라우드 환경의 VLAN 대안 — VXLAN

AWS VPC, OpenStack Neutron 등 클라우드 환경에서는 물리 VLAN 대신 **VXLAN(VLAN Extensible)**을 사용합니다. VXLAN은 UDP 터널 위에 L2를 캡슐화하여 수백만 개의 논리적 네트워크를 구성할 수 있습니다.

물리 VLAN: 최대 4094개 (12bit VID)
VXLAN:     최대 16,777,216개 (24bit VNI)

보안 관점 — VLAN은 완벽한 격리가 아님

VLAN은 편리한 논리적 분리지만, VLAN Hopping 공격에 취약할 수 있습니다.

VLAN Hopping 공격 예방 체크리스트:
□ Native VLAN을 사용하지 않는 전용 VLAN으로 설정
□ Trunk 포트에서 불필요한 VLAN 차단 (allowed vlan 명시)
□ DTP(Dynamic Trunking Protocol) 비활성화
□ VLAN 간 라우팅은 반드시 방화벽을 통과하도록 설계

완전한 보안 격리가 필요하다면 VLAN만으로는 부족하고, 물리적 분리 또는 방화벽/SDN을 함께 사용해야 합니다.


정리

VLAN 핵심 개념

  • 브로드캐스트 도메인 분리 → 트래픽 격리 + 보안
  • 802.1Q: 프레임에 4바이트 VLAN 태그 추가 (VID 12bit → 최대 4094개 VLAN)
  • Access 포트: 단일 VLAN, 태그 없이 전달 (PC/서버용)
  • Trunk 포트: 여러 VLAN, 태그 유지 (스위치 간 연결)

리눅스 VLAN 설정

  • modprobe 8021q (커널 모듈 로드)
  • ip link add link eth0 name eth0.10 type vlan id 10
  • ip addr add 192.168.10.10/24 dev eth0.10
  • ip link set eth0.10 up

주요 트러블슈팅

  • PVID 불일치 → ARP 실패 → 통신 단절 (스위치 포트 모드/VLAN 설정 확인)
  • MTU 문제 → 대용량 패킷 드랍 (VLAN 태그 4바이트 오버헤드 고려)

명령어·단축키 빠른 참조

이 모듈에서 다룬 리눅스 VLAN 설정·진단 명령을 실전 옵션과 함께 모았습니다. "예" 열을 그대로 써도 됩니다.

명령어/옵션용도자주 쓰는 예
modprobe 8021qVLAN(802.1Q) 커널 모듈 로드lsmod | grep 8021q || sudo modprobe 8021q
ip link add link <부모> name <이름> type vlan id <N>VLAN 서브인터페이스 생성sudo ip link add link eth0 name eth0.10 type vlan id 10
ip addr add <IP> dev <vlan-if>VLAN 인터페이스에 IP 할당sudo ip addr add 192.168.10.100/24 dev eth0.10
ip link set <if> up인터페이스 활성화sudo ip link set eth0.10 up
ip -d link show <if>VLAN 프로토콜·ID 상세 확인ip -d link show eth0.10
ip link set <if> mtu <N>태그 4B 오버헤드로 MTU 조정sudo ip link set eth0.10 mtu 1496
tcpdump -e -n vlan프레임의 실제 VLAN 태그 캡처sudo tcpdump -i eth0 -e -n vlan
ping -s 1472 -M do <host>단편화 금지 MTU 검증ping -c 4 -s 1472 -M do 192.168.10.1
ip neigh show / arp -nARP 학습 여부(단절 진단)ip neigh show
cat /proc/net/vlan/config구성된 VLAN 인터페이스 일람cat /proc/net/vlan/config

관련 모듈로 더 깊이:

다음 모듈에서는 tcpdump로 네트워크 패킷을 직접 캡처하고 TCP 3-Way Handshake와 재전송 이슈를 분석하는 방법을 다룹니다.

지식 확인

퀴즈 — 8문제

Q1

개발팀(VLAN 10)과 운영팀(VLAN 20)이 같은 스위치에 연결돼 있습니다. 개발팀 서버에서 운영 DB 서버로 ping이 되는 상황을 물리적 변경 없이 차단하려 합니다. 가장 적절한 방법은?

Q2

스위치 A(VLAN 10·20·30 운영)와 스위치 B(VLAN 10·20·30 운영)를 포트 하나로 연결해 세 VLAN 트래픽을 모두 전달하려 합니다. 이 연결 포트를 어떻게 설정해야 하는가?

Q3

리눅스에서 eth0에 VLAN ID 20번 인터페이스를 생성하는 올바른 명령어는?

Q4

신규 서버를 스위치에 연결했는데 VLAN 10 트래픽은 잘 가는데 VLAN 20 서버와는 통신이 안 됩니다. 서버가 연결된 스위치 포트는 Access 포트입니다. 원인은?

Q5

스위치 포트의 PVID(VLAN ID)가 10인데 서버에서 VLAN 20 인터페이스로만 통신을 시도하면 어떤 문제가 발생합니까?

Q6

하나의 물리 스위치에 여러 부서 서버를 연결하면서 VLAN으로 나누는 이유는?

Q7

[심화] 802.1Q 트렁크에서 '네이티브 VLAN'의 특징으로 옳은 것은?

Q8

[심화] VLAN으로 분리한 두 망에서 통신은 정상인데 한쪽 브로드캐스트가 다른 쪽에서 관측됩니다. 원인을 가려낼 진단으로 가장 적절한 것은?

0 / 8 답변

🧪 실습으로 확인하기

포트는 열렸다는데 왜 안 되지? — ss/netstat/telnet으로 TCP 진단

초급

"포트 8080 열었는데요?"와 "왜 안 돼요?" 사이의 간극을 메우는 실습. ss로 바인딩 상태를 확인하고, telnet/nc으로 원격 연결을 테스트하고, iptables 방화벽을 진단하고, 바인딩 주소(0.0.0.0 vs 127.0.0.1)까지 수정하는 4단계 TCP 포트 진단 플로우를 완성한다.

35📋 4단계💻 직접 환경
실습 시작하기 →

이것도 배워보세요