Azure Expressroute Q-in-Q 변환

서문

Azure Expressroute는 S-Tag와 C-Tag 2개의 VLAN Tag를 사용합니다. S-Tag는 Azure에 의해서 할당되며, C-Tag는 Expressroute 공급자에 의해 관리됩니다. 일반적으로 S-Tag는 Expressroute Circuit마다 고유합니다.

하지만 만약 공급자가 둘 이상의 NNI를 가지고 있는 경우 S-Tag 할당이 각 NNI별로 관리됨에 따라 중복이 발생할 가능성이 존재합니다. 예를 들어, Circuit A가 NNI-A에 할당되면서 S-Tag 10을 부여 받았을 때, Circuit B가 NNI-B에 할당되는 과정에서 S-Tag 10을 다시 부여 받을 수 있습니다.

Fig 1

이런 이유로 인해 Azure는 S-Tag 중복 문제를 수용할 수 있도록 Cisco Nexus의 VDC같은 L2 가상화 기능을 요구합니다. 만약 인프라가 그런 기능을 제공하지 않는다면 각 NNI쌍 마다 독립된 집합 스위치를 구성해야 합니다.이는 관리도 복잡할 뿐더러 비용도 많이 발생합니다.

Fig 2-1   Fig 2-2

VLAN 매핑

이 문제를 해결하기 위해 VLAN 매핑 기능을 활용 할 수 있습니다. 필자는 주로 Cisco Catalyst 장비를 사용하였으며, 대부분 동일한 상황일 것이니 Cisco Catalyst 기준으로 설명하겠습니다.

Cisco Catalyst 스위치는 "VLAN 매핑" 기능을 지원하긴 하지만, 모든 장비가 동일하게 지원하는 것은 아닙니다. 일례로 모두 동일한 Catalyst 9500계열이지만 C9500-40X 모델은 1:1 매핑만 지원하는 반면 C9500-48Y4C 모델은 모든 매핑 기능을 지원합니다.

1:1 매핑

1:1 매핑은 이름 만큼 매우 간단합니다. 1:1 매핑은 한 VLAN 번호를 다른 VLAN번호로 변환하며, 이는 양방향으로 이루어집니다. 여기서 한 가지 주의해야 할 점은 가장 바깥의 태그만 변환한다는 것입니다. 예를 들어, 패킷이 3중으로 태깅 된 경우 가장 바깥의 3번째 태그만 변환됩니다.

Fig 3

Q-in-Q

가장 일반적인 이중 태깅입니다. 단일 태깅 된 패킷에 외부 태그를 붙이거나 떼어냅니다. 다만 한 가지 주의사항이 있습니다. Q-in-Q 설정은 내부 태그가 무엇인지 상관하지 않습니다. 다시 말해, 트렁크로 들어오는 모든 패킷은 내부 태그가 무엇이던지 간에 모두 동일한 외부 태그가 붙게 된다는 의미입니다.

Fig 4

선택적 Q-in-Q

선택적 Q-in-Q는 일반 Q-in-Q와 동일하지만 선택적으로 적용됩니다. 스위치에게 특정 내부 태그에 대하여 지정한 외부 태그를 붙이거나 떼어내도록 설정할 수 있습니다. 따라서 하나의 트렁크 포트로 다수의 외부 태그를 관리할 수 있습니다. 또한 선택적 Q-in-Q 설정과 함께 일반 Q-in-Q 설정을 추가하여 기본 동작을 지정할 수도 있습니다.

Fig 5

그렇다면 적용 방법은?

이제 처음의 문제로 돌아갑시다. 복수의 NNI가 존재하는 경우 S-Tag(외부 태그)가 중복될 수 있습니다. 따라서 L2스위치는 동일한 S-Tag가 복수 개의 트렁크에 할당되어 있으므로 혼란을 겪게 됩니다.

Fig 1

하지만 방법이 있습니다.

VLAN 매핑은 패킷이 인터페이스에 도착하거나 나갈 때 적용됩니다. 다시 말해 만약 포트에 매핑 설정이 적용되어 있다면 스위치 프로세서가 인식하는 패킷의 VLAN은 이미 변환된 VLAN이라는 뜻입니다. 따라서 중복된 S-Tag를 각각 다른 VLAN으로 매핑하는 설정을 하게 된다면 집합 스위치에서 혼란이 발생하지 않게 됩니다.

Fig 6

이는 응답 패킷에도 적용됩니다. 집합 스위치 입장에서는 두 패킷은 서로 다른 VLAN이므로 패킷을 각각 지정된 트렁크로 전송합니다. 하지만 이 패킷들이 인터페이스를 떠나는 시점에서 VLAN ID가 원래의 중복된 S-Tag로 다시 변환됩니다. 그렇다 하더라도 이미 이 패킷들은 서로 다른 트렁크에 이미 수용이 되었으며 각각 서로 다른 Azure 엣지 스위치에 의해 처리될 것이므로 중복된 S-Tag는 Azure 네트워크에 의해 정상적으로 처리될 수 있습니다.

Fig 7

상세 설정

이제 실제 적용을 해 보겠습니다. 본 예제에서는 아래의 구성을 기준으로 설명하겠습니다. 아마 대부분 비슷한 구성 일 것입니다.

Fig 8

집합 스위치의 Azure 방향 인터페이스(ER-L2 eth0, eth1)는 트렁크 모드이어야 하며, 1:1 매핑이 설정됩니다. 설정 시 VLAN 지정 순서는 원본 VLAN 다음에 변환된 VLAN 순서입니다.

                
                ER-L2(config)# vlan 1010
                ER-L2(config)# vlan 2010
                ER-L2(config)# interface eth0
                ER-L2(config)# switchport mode trunk
                ER-L2(config)# switchport vlan mapping 10 1010
                ER-L2(config)# interface eth1
                ER-L2(config)# switchport mode trunk
                ER-L2(config)# switchport vlan mapping 10 2010
                
            

다음은 공급자 엣지(PE)측 인터페이스(eth2~3)입니다. 일반적으로는 PE에서부터 C-Tag가 붙은 채로 받은 패킷에 S-Tag를 붙이기 위해 .1Q 터널 설정을 합니다. 다만 이 때 C-Tag 위에 원본 S-Tag가 아닌 변환된 S-Tag가 붙도록 설정하여야 합니다.

                
                ER-L2(config)# interface eth2
                ER-L2(config)# switchport access vlan 1010
                ER-L2(config)# switchport mode dot1q-tunnel
                ER-L2(config)# interface eth3
                ER-L2(config)# switchport access vlan 2010
                ER-L2(config)# switchport mode dot1q-tunnel
                
            

만약 PE측 링크를 통합하기 위해 선택적 Q-in-Q를 사용하는 경우 매핑 설정의 S-Tag를 변환된 S-Tag로 설정합니다.

                
                ER-L2(config)# interface eth2
                ER-L2(config)# switchport mode trunk
                ER-L2(config)# switchport vlan mapping 2000 dot1q-tunnel 1010
                ER-L2(config)# switchport vlan mapping 3000 dot1q-tunnel 2010