Trunk
스위치 포트는 동작 방식에 따라 크게 Access와 Trunk 두 가지 모드로 나뉜다. Access 포트는 하나의 VLAN에만 속해 단말을 연결하는 용도지만, Trunk 포트는 여러 VLAN의 트래픽을 하나의 물리 링크로 동시에 전달하는 데 쓰인다. 스위치 간 연결, 스위치-라우터 간 연결, 스위치-가상화 호스트 연결 등에서 거의 항상 등장한다.
트렁크가 필요한 이유
VLAN은 한 스위치 안에서 여러 브로드캐스트 도메인을 만들지만, 같은 VLAN을 여러 스위치에 연결하려면 스위치끼리 트래픽을 주고받아야 한다. 이때 단순 링크로 연결하면 다음 문제가 생긴다.
- 받는 쪽 스위치는 들어오는 프레임이 어느 VLAN 소속인지 알 수 없다.
- VLAN별로 별도 케이블을 깔면 VLAN 수만큼 포트와 케이블이 필요해 비효율적이다.
트렁크는 프레임에 VLAN 태그를 붙여 보냄으로써 하나의 링크로 여러 VLAN을 구분 가능한 형태로 동시에 운반한다.
Access vs Trunk
Access 포트는 단 하나의 VLAN에만 소속되어 단말을 연결하는 포트이다. 들어오고 나가는 프레임은 모두 태그가 없는 일반 이더넷 프레임이며, 스위치 내부에서만 해당 포트의 VLAN으로 구분된다.
Trunk 포트는 여러 VLAN의 트래픽을 하나의 물리 링크로 동시에 실어 나르는 포트이다. 프레임마다 802.1Q VLAN 태그를 붙여 보내므로, 받는 쪽 스위치가 이 프레임이 어느 VLAN 소속인지 구분할 수 있다.
| 구분 | Access 포트 | Trunk 포트 |
|---|---|---|
| 소속 VLAN 수 | 1개 | 여러 개 (Allowed VLAN 목록) |
| 프레임 태깅 | 없음 (untagged) | 802.1Q 태그로 VLAN ID 표시 |
| 주요 용도 | 단말(PC, 서버, IP폰) 연결 | 스위치 간, 스위치-라우터 간, 가상화 호스트 연결 |
| 기준 VLAN 개념 | 단일 access VLAN | Native VLAN + Allowed VLAN |
쉽게 비유하면, Access 포트는 단독주택 우편함, Trunk 포트는 아파트 단지의 공동 우편함에 가깝다. 단독주택은 한 가구만 살기 때문에 도로명 주소만 적혀 있으면 우편물이 정확히 도착하지만, 아파트는 같은 건물에 수많은 세대가 모여 있으므로 동·호수(=VLAN ID) 를 반드시 명시해야 올바른 집으로 전달된다. 트렁크에서 프레임에 붙이는 802.1Q 태그가 바로 이 "동·호수"에 해당하며, 같은 링크를 공유하는 여러 VLAN의 트래픽을 받는 쪽 스위치가 정확히 구분해 처리할 수 있게 해 준다.
이 둘은 하나의 스위치 안에서 역할이 분리되어 함께 동작한다. 단말(PC, 서버 등)은 Access 포트에 연결되어 자신이 어떤 VLAN에 속하는지 모른 채 그냥 일반 이더넷 프레임을 주고받는다. 그 프레임이 다른 스위치로 넘어가야 할 때, 스위치는 Trunk 포트로 내보내는 순간 VLAN ID를 태그로 붙인다. 반대편 스위치는 태그를 보고 어느 VLAN인지 판단한 뒤, 다시 해당 VLAN의 Access 포트로 내보낼 때는 태그를 떼어내 원래 형태로 복원한다. 즉 태그는 스위치와 스위치 사이에서만 존재하며, 단말은 VLAN의 존재를 의식하지 않는다.
802.1Q 태깅
IEEE 802.1Q는 트렁크에서 사용하는 표준 태깅 방식이다. 일반 이더넷 프레임의 출발지 MAC 뒤에 4바이트의 VLAN 태그를 끼워 넣는다.
| 필드 | 크기 | 의미 |
|---|---|---|
| TPID (Tag Protocol ID) | 16 bit | 항상 0x8100. 802.1Q 태그가 들어 있음을 알린다 |
| PCP (Priority Code Point) | 3 bit | 802.1p QoS 우선순위 |
| DEI (Drop Eligible Indicator) | 1 bit | 혼잡 시 폐기 가능 표시 |
| VID (VLAN Identifier) | 12 bit | VLAN 번호 (0~4095, 실제 사용은 1~4094) |
받는 쪽 스위치는 태그의 VID를 보고 해당 VLAN 도메인으로 프레임을 처리한다. Access 포트로 내보낼 때는 다시 태그를 떼어 일반 이더넷 프레임으로 복원한다.
과거 Cisco는 ISL(Inter-Switch Link)이라는 독자 트렁킹 방식을 사용했지만, 현재는 거의 모든 환경에서 802.1Q가 표준이다.
Native VLAN
트렁크에서도 모든 프레임이 태그를 달고 다니는 것은 아니다. Native VLAN으로 지정된 VLAN의 프레임은 태그 없이 전달된다.
이 동작은 802.1Q를 지원하지 않는 구형 장비나 일부 무선 AP, 단말 호환을 위해 남겨진 설계이다. 기본 Native VLAN은 VLAN 1이며, 양쪽 스위치의 Native VLAN이 일치하지 않으면 잘못된 VLAN으로 프레임이 흘러가는 운영·보안상의 문제가 발생한다.
운영 환경에서 흔히 권장되는 베스트 프랙티스는 다음과 같다.
- 양쪽 트렁크의 Native VLAN을 명시적으로 동일하게 맞춘다.
- Native VLAN을 VLAN 1이 아닌, 사용하지 않는 별도 VLAN(예: 999)으로 바꾼다.
- 가능하다면
vlan dot1q tag native로 native VLAN까지 태깅을 강제해 untagged 프레임을 없앤다.
Allowed VLAN List
트렁크는 기본적으로 모든 VLAN(1~4094) 트래픽을 전달한다. 하지만 필요하지 않은 VLAN까지 흘러가면 대역폭 낭비와 보안 위험이 생긴다. 이를 막기 위해 Allowed VLAN 목록을 명시적으로 지정할 수 있다.
Switch(config-if)# switchport trunk allowed vlan 10,20,30
Switch(config-if)# switchport trunk allowed vlan add 40
Switch(config-if)# switchport trunk allowed vlan remove 20
이렇게 하면 해당 트렁크로는 명시된 VLAN의 프레임만 통과한다. VTP Pruning이 동적인 가지치기라면, Allowed VLAN은 정적인 화이트리스트라고 볼 수 있다.
DTP (Dynamic Trunking Protocol)
DTP는 Cisco 독자 프로토콜로, 두 스위치 포트가 access와 trunk 중 어느 모드로 동작할지 자동으로 협상하게 해준다.
| 모드 | 동작 |
|---|---|
access | 항상 access. 협상하지 않는다. |
trunk | 항상 trunk. 협상하지 않는다. |
dynamic auto | 상대가 trunk를 요청하면 trunk가 된다. 먼저 요청하지는 않는다. |
dynamic desirable | 적극적으로 trunk 협상을 시도한다. |
자동 협상은 편리해 보이지만 의도치 않게 trunk가 만들어지면 공격자가 모든 VLAN에 접근할 수 있어 VLAN hopping 공격의 통로가 된다. 그래서 운영 환경에서는 DTP를 비활성화(switchport nonegotiate)하고 모드를 명시적으로 고정하는 방식이 권장된다.
정리
- Access 포트는 단일 VLAN에 속해 단말을 연결하고, Trunk 포트는 여러 VLAN을 하나의 링크로 운반한다.
- 802.1Q는 트렁크 표준 태깅 방식으로, 4바이트 태그(TPID/PCP/DEI/VID)를 프레임에 삽입한다.
- Native VLAN은 태그 없이 전달되는 VLAN으로, 양쪽 일치와 VLAN 1 회피가 베스트 프랙티스다.
- Allowed VLAN 목록으로 트렁크에 흐를 VLAN을 정적으로 제한할 수 있다.
- DTP는 trunk 모드를 자동 협상하지만, 보안 측면에서 비활성화하는 것이 일반적이다.