Skip to Content

트렁크(Trunk) 및 DTP

여러 VLAN의 트래픽을 스위치 간에 전송하기 위한 트렁크와 802.1Q 캡슐화, 트렁크 설정 방법, 그리고 DTP(Dynamic Trunking Protocol)의 동작 및 보안 대책을 다룹니다.

핵심 요약

  • 표준 이더넷 프레임에는 VLAN 정보가 없으므로, 802.1Q 태그를 삽입하여 VLAN을 식별
  • 트렁크는 802.1Q(업계 표준) 또는 ISL(Cisco 독점)을 사용하여 단일 링크로 여러 VLAN을 전달
  • ISL과 802.1Q 모두 지원하는 스위치에서는 switchport trunk encapsulation dot1q를 먼저 설정
  • show interfaces trunk 명령으로 트렁크 상태, 캡슐화 유형, 네이티브 VLAN, 허용 VLAN 확인
  • **DTP(Dynamic Trunking Protocol)**는 스위치포트 모드를 자동 협상하지만, 보안 위험이 있으므로 운영 환경에서는 비활성화 필수
  • 운영 환경에서는 항상 switchport mode trunk명시적으로 설정

802.1Q 캡슐화

일반 이더넷 프레임

먼저 일반 이더넷 프레임을 살펴보겠습니다:

03_802.1Q Encapsulation Explained_img_p02_01

이더넷 프레임이 어느 VLAN에 속하는지 지정하는 필드가 보이나요? 없습니다! 그래서 스위치가 이더넷 프레임이 어느 VLAN에 속하는지 알 수 없으며, VLAN 정보를 추가하기 위한 별도의 프로토콜이 필요합니다.

트렁크의 필요성

스위치 간에 VLAN 트래픽을 전달하려면 트렁크(Trunk) 를 사용해야 합니다. 트렁크 연결은 기본적으로 일반 링크와 같지만, 서로 다른 VLAN의 트래픽을 전달할 수 있고 VLAN 간 트래픽을 분리하는 방법을 가지고 있습니다.

03_802.1Q Encapsulation Explained_img_p03_01

양쪽에 컴퓨터가 있고 서로 다른 VLAN에 속해 있을 때, 트렁크를 사용하면 모든 VLAN 트래픽을 스위치 간에 전송할 수 있습니다.

트렁킹 프로토콜

두 가지 트렁킹 프로토콜이 있습니다:

  • 802.1Q: 가장 일반적인 트렁킹 프로토콜로, 표준이며 많은 벤더가 지원합니다.
  • ISL: Cisco 독점 트렁킹 프로토콜로, 모든 스위치가 지원하지는 않습니다.

802.1Q 프레임 구조

03_802.1Q Encapsulation Explained_img_p03_02

802.1Q 이더넷 프레임은 일반 이더넷 프레임과 동일하지만, 중간에 태그(Tag) 가 추가됩니다. 이 태그에는 다음 필드가 포함됩니다:

필드설명
Ethertype0x8100 — 802.1Q 태그가 있음을 식별
Priority3비트 — 트래픽 우선순위 (QoS용)
CFI1비트 — Canonical Format Indicator
VLAN Identifier (VID)12비트 — VLAN ID (0~4095)

태그 안의 VLAN Identifier를 통해 스위치는 이 이더넷 프레임이 어느 VLAN에 속하는지 알 수 있습니다.

Priority 필드를 사용하면 서로 다른 트래픽 유형에 다른 우선순위를 부여할 수 있습니다. 예를 들어 VoIP(Voice over IP) 트래픽용 VLAN과 데이터 트래픽용 VLAN이 있을 때, VoIP 트래픽에 높은 우선순위를 부여하지 않으면 통화 품질이 저하될 수 있습니다.

스위치는 프레임이 트렁크 포트를 통해 나갈 때 태그를 삽입합니다. 스위치 내부에서는 태그가 필요 없으며, MAC 주소 테이블에서 MAC 주소, 인터페이스, VLAN 정보를 함께 관리합니다.


트렁크 설정

토폴로지

04_Trunking on Cisco IOS Switch_img_p02_01

각 스위치에 컴퓨터가 하나씩 연결되어 있습니다. 컴퓨터들을 같은 VLAN에 넣고, 두 스위치 사이에 트렁크를 생성하겠습니다.

  • H1: 192.168.1.1/24 — SW1의 Fa0/1에 연결
  • H2: 192.168.1.2/24 — SW2의 Fa0/2에 연결
  • SW1과 SW2: Fa0/14로 연결

VLAN 생성 및 포트 할당

먼저 양쪽 스위치에 VLAN을 생성하고 컴퓨터가 연결된 포트를 할당합니다:

SW1(config)#vlan 50 SW1(config-vlan)#name Computers SW1(config-vlan)#exit SW2(config)#vlan 50 SW2(config-vlan)#name Computers SW2(config-vlan)#exit
SW1(config)#interface fa0/1 SW1(config-if)#switchport access vlan 50 SW2(config)#interface fa0/2 SW2(config-if)#switchport access vlan 50

트렁크 캡슐화 및 모드 설정

SW1(config)#interface fa0/14 SW1(config-if)#switchport mode trunk Command rejected: An interface whose trunk encapsulation is "Auto" can not be configured to "trunk" mode.

스위치 모델에 따라 이와 같은 오류가 발생할 수 있습니다. 트렁크 모드로 변경하기 전에 트렁크 캡슐화 유형을 먼저 지정해야 합니다:

SW1(config-if)#switchport trunk encapsulation dot1q SW1(config-if)#switchport mode trunk SW2(config)#interface fa0/14 SW2(config-if)#switchport trunk encapsulation dot1q SW2(config-if)#switchport mode trunk

트렁크 확인

SW1#show interfaces fa0/14 switchport Name: Fa0/14 Switchport: Enabled Administrative Mode: trunk Operational Mode: trunk Administrative Trunking Encapsulation: dot1q Operational Trunking Encapsulation: dot1q

show interfaces trunk

SW2#show interface fa0/14 trunk Port Mode Encapsulation Status Native vlan Fa0/14 on 802.1q trunking 1 Port Vlans allowed on trunk Fa0/14 1-4094 Port Vlans allowed and active in management domain Fa0/14 1,50 Port Vlans in spanning tree forwarding state and not pruned Fa0/14 50

show interface trunk 명령으로 트렁크 모드, 캡슐화 프로토콜, 네이티브 VLAN을 확인할 수 있습니다. VLAN 1~4094가 허용되며, 현재 VLAN 1(네이티브)과 VLAN 50만 활성 상태입니다.

show vlan 명령은 액세스 모드 인터페이스만 표시하며 트렁크 인터페이스는 나타나지 않습니다. 트렁크 정보는 show interfaces trunk로 확인해야 합니다.

스위치포트 모드 조합 결과 표

TrunkAccessDynamic AutoDynamic Desirable
TrunkTrunk제한적TrunkTrunk
Access제한적AccessAccessAccess
Dynamic AutoTrunkAccessAccessTrunk
Dynamic DesirableTrunkAccessTrunkTrunk

최종 설정

SW1

hostname SW1 ! vlan 50 name Computers ! interface FastEthernet0/1 switchport access vlan 50 ! interface FastEthernet0/14 switchport mode trunk switchport trunk encapsulation dot1q ! end

SW2

hostname SW2 ! vlan 50 name Computers ! interface FastEthernet0/2 switchport access vlan 50 ! interface FastEthernet0/14 switchport mode trunk switchport trunk encapsulation dot1q ! end

DTP(Dynamic Trunking Protocol) 협상

DTP(Dynamic Trunking Protocol)는 스위치포트가 액세스 포트가 될지 트렁크가 될지 자동으로 협상하는 Cisco 독점 프로토콜입니다. 편리해 보이지만 보안 위험이 있습니다. 스위치 모델과 버전에 따라 DTP가 기본적으로 활성화되어 있으므로, 공격자가 스위치에 연결하여 트렁크를 협상하고 모든 VLAN에 접근할 수 있습니다.

토폴로지

05_Cisco DTP (Dynamic Trunking Protocol) Negotiation_img_p02_01

두 대의 스위치(SW1, SW2)가 Fa0/24로 연결되어 있습니다.

기본 설정 확인

아무 설정도 하지 않은 상태에서 기본값을 확인합니다:

SW1#show interfaces fa0/24 switchport Name: Fa0/24 Switchport: Enabled Administrative Mode: dynamic auto Operational Mode: static access Administrative Trunking Encapsulation: negotiate Operational Trunking Encapsulation: native Negotiation of Trunking: On

설정 없이도 dynamic auto 모드가 사용되며, 결과적으로 액세스 모드로 동작합니다. Negotiation of TrunkingOn인 것을 확인할 수 있습니다.

스위치 모델과 IOS 버전에 따라 기본값이 “dynamic auto” 또는 “dynamic desirable”일 수 있습니다.

VLAN 호핑(VLAN Hopping) 공격

DTP가 활성화되어 있으면 공격자가 VLAN 호핑 공격을 수행할 수 있습니다:

  1. 스위치 포트가 기본값인 dynamic auto 또는 dynamic desirable 상태
  2. 공격자가 DTP 패킷을 보내 트렁크 협상을 시도
  3. 트렁크가 형성되면 모든 VLAN의 트래픽을 수신 가능
  4. 서버 VLAN, 관리 VLAN 등 민감한 네트워크에 무단 접근 가능

DTP 비활성화 방법

방법 1: 액세스 모드로 설정

SW1(config)#interface fastEthernet 0/24 SW1(config-if)#switchport mode access

확인:

SW1#show interfaces fastEthernet 0/24 switchport Name: Fa0/24 Switchport: Enabled Administrative Mode: static access Operational Mode: static access Negotiation of Trunking: Off

액세스 모드로 설정하면 Negotiation of TrunkingOff로 변경됩니다.

방법 2: switchport nonegotiate (트렁크 인터페이스용)

트렁크 모드로 설정해도 DTP는 여전히 활성 상태입니다:

SW1(config-if)#switchport trunk encapsulation dot1q SW1(config-if)#switchport mode trunk SW1#show interfaces fastEthernet 0/24 switchport | include Negotiation Negotiation of Trunking: On

트렁크 인터페이스에서 DTP를 비활성화하려면 switchport nonegotiate 명령을 사용해야 합니다:

SW1(config)#interface fastEthernet 0/24 SW1(config-if)#switchport nonegotiate
SW1#show interfaces fastEthernet 0/24 switchport | include Negotiation Negotiation of Trunking: Off

DTP 비활성화 요약

방법설명
switchport mode access액세스 포트에서 DTP 자동 비활성화
switchport nonegotiate트렁크 포트에서 DTP 수동 비활성화
switchport mode trunk (단독)DTP가 비활성화되지 않음 — 별도 조치 필요

GNS3 랩 환경 참고: STP Dispute 문제

증상

GNS3에서 IOU L2 이미지를 사용하여 트렁크 설정 후 핑 테스트를 하면, 처음에는 통신이 되다가 갑자기 끊기는 현상이 발생할 수 있습니다.

PC1> ping 192.168.1.2 84 bytes from 192.168.1.2 icmp_seq=1 ttl=64 time=0.679 ms 84 bytes from 192.168.1.2 icmp_seq=2 ttl=64 time=0.925 ms PC1> ping 192.168.1.2 192.168.1.2 icmp_seq=1 timeout 192.168.1.2 icmp_seq=2 timeout

원인 확인

show spanning-tree vlan 50 명령으로 확인하면, 트렁크 포트가 BLK(Blocking) 상태이고 Dispute 표시가 나타납니다:

SW1#show spanning-tree vlan 50 Interface Role Sts Cost Prio.Nbr Type ------------------- ---- --- --------- -------- -------------------------------- Et0/0 Desg FWD 100 128.1 Shr Et3/3 Desg BLK 100 128.16 Shr Dispute

show interfaces trunk에서도 포워딩 중인 VLAN이 없음:

Port Vlans in spanning tree forwarding state and not pruned Et3/3 none

Dispute는 양쪽 스위치가 모두 자신이 Designated 포트라고 주장할 때 발생합니다. GNS3 IOU L2 이미지의 알려진 버그입니다.

STP(스패닝 트리 프로토콜)란?

스위치 간에 루프(Loop) 가 발생하는 것을 방지하는 프로토콜입니다. 스위치 간 링크가 여러 개 있을 때, 하나의 링크를 Blocking 상태로 만들어 루프를 차단합니다. 루프가 발생하면 브로드캐스트 폭풍(Broadcast Storm)이 일어나 네트워크가 다운됩니다.

해결 방법

방법 1: 포트 shutdown/no shutdown (임시)

SW1(config)#interface e3/3 SW1(config-if)#shutdown SW1(config-if)#no shutdown

STP가 재수렴되면서 일시적으로 해결될 수 있지만, 다시 Dispute가 발생할 수 있습니다.

방법 2: 해당 VLAN에서 STP 비활성화 (권장 - 랩 환경)

양쪽 스위치 모두에서 실행:

SW1(config)#no spanning-tree vlan 50 SW2(config)#no spanning-tree vlan 50

no spanning-tree vlan 50VLAN 50에서 STP를 비활성화하는 명령입니다. 스위치 2대에 링크 1개뿐인 랩 환경에서는 루프가 발생할 수 없으므로 STP를 꺼도 문제없습니다.

주의: 운영 환경에서는 STP를 끄면 안 됩니다. 루프 발생 시 네트워크가 다운됩니다. 이 해결법은 GNS3 랩 환경에서만 사용하세요.