개발망과 운영망을 분리했다고 들었는데 실제로는 같은 브로드캐스트 도메인에 섞여 있었습니다. 한쪽의 실험 트래픽이 다른 망까지 영향을 주며 장애 범위가 커졌습니다.
VLAN은 물리 스위치를 더 사지 않고도 논리적으로 망을 나누는 방법입니다. 어디까지 같은 L2인지 알아야 장애 전파를 막을 수 있습니다.
VLAN과 논리적 망 분리
물리적인 네트워크 장비 하나로 여러 개의 독립된 네트워크처럼 운영할 수 있다면 어떨까요? VLAN(Virtual LAN)은 바로 이것을 가능하게 합니다. 개발망, 운영망, 관리망을 물리적으로 완전히 분리하지 않아도, VLAN 태그 하나로 논리적인 분리와 보안을 동시에 달성할 수 있습니다.
- 1브로드캐스트 도메인 개념과 VLAN이 필요한 이유를 설명할 수 있다
- 2VLAN의 동작 방식인 Access 포트와 Trunk 포트를 구분할 수 있다
- 3개발망/운영망/관리망을 논리적으로 분리하는 설계 패턴을 적용할 수 있다
- 4클라우드에서 VPC 서브넷과 보안 그룹이 VLAN을 대체하는 방식을 이해할 수 있다
ip link showlsmod | grep 8021q || sudo modprobe 8021qsudo apt-get install -y vlan가상 환경(KVM, VirtualBox, VMware)에서 스위치 포트를 Trunk 모드로 설정하면 실제 태깅 동작을 확인할 수 있습니다.
VLAN 기본 개념
브로드캐스트 도메인과 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 프레임 구조
802.1Q 표준은 이더넷 프레임에 4바이트의 VLAN 태그를 삽입합니다.
확대
VID(VLAN Identifier)는 12비트이므로 최대 4094개의 VLAN을 구성할 수 있습니다.
Access 포트 vs Trunk 포트
확대
- 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 장애가 각각 어느 단계의 고장인지 보입니다.
[스위치] 프레임 수신 (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 같은 클라우드에서는 같은 개념이 다른 이름으로 구현됩니다.
확대
| 온프레미스 | AWS |
|---|---|
| VLAN (L2 분리) | VPC 서브넷 (IP 범위 분리) |
| 스위치 ACL | Security Group (포트 기반 허용/차단) |
| VLAN 간 라우터 | VPC Route Table |
| 방화벽 | Network ACL (NACL) |
실제 대응 예시:
| 온프레미스 | AWS |
|---|---|
| 개발망 VLAN 10 | 10.0.1.0/24 (dev-subnet) |
| 운영망 VLAN 20 | 10.0.2.0/24 (prod-subnet) |
| 관리망 VLAN 100 | 10.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 인터페이스를 직접 생성해보고, 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 설정 불일치로 발생하는 상황입니다.
확대
해결 방법
해결책 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 링크로 연결됩니다.
확대
서버 가상화 환경에서의 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 10ip addr add 192.168.10.10/24 dev eth0.10ip link set eth0.10 up
주요 트러블슈팅
- PVID 불일치 → ARP 실패 → 통신 단절 (스위치 포트 모드/VLAN 설정 확인)
- MTU 문제 → 대용량 패킷 드랍 (VLAN 태그 4바이트 오버헤드 고려)
명령어·단축키 빠른 참조
이 모듈에서 다룬 리눅스 VLAN 설정·진단 명령을 실전 옵션과 함께 모았습니다. "예" 열을 그대로 써도 됩니다.
| 명령어/옵션 | 용도 | 자주 쓰는 예 |
|---|---|---|
modprobe 8021q | VLAN(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 -n | ARP 학습 여부(단절 진단) | ip neigh show |
cat /proc/net/vlan/config | 구성된 VLAN 인터페이스 일람 | cat /proc/net/vlan/config |
관련 모듈로 더 깊이:
- ARP 캐시 원리와 네트워크 IP 충돌 추적 및 해결 — VLAN 내 PVID 불일치가 ARP 실패로 이어지는 메커니즘
- tcpdump 사용법과 Wireshark 연동 트러블슈팅 — VLAN 태그가 프레임에 실제로 붙는지 캡처로 확인하는 법
다음 모듈에서는 tcpdump로 네트워크 패킷을 직접 캡처하고 TCP 3-Way Handshake와 재전송 이슈를 분석하는 방법을 다룹니다.