VXLAN과 VRF를 활용한 네트워크 격리
Linux 커널은 VXLAN(Virtual eXtensible Local Area Network)을 네이티브로 지원하므로, 별도의 외부 소프트웨어 없이도 오버레이 네트워크를 직접 구축할 수 있습니다. 호스트의 기존 네트워크 환경에 영향을 주지 않고 실험 및 구성을 진행하기 위해 VRF(Virtual Routing and Forwarding)를 활용하여 라우팅 테이블을 격리하는 방식을 사용합니다. VRF는 네트워크 네임스페이스와 유사하게 작동하지만, 3계층 라우팅 스택만 가상화한다는 점에서 더轻量적입니다. (단, VRF 기능은 Linux Kernel 4.3 이상부터 지원됩니다.)
1. 포인트 투 포인트(Point-to-Point) VXLAN 구성
가장 기본적인 형태인 1:1 VXLAN 토폴로지는 두 호스트 간에 단일 터널을 형성합니다. 각 호스트의 VTEP(VXLAN Tunnel Endpoint)는 서로의 언더레이 IP 주소를 통해 직접 통신합니다.
호스트 A (언더레이 IP: 10.0.1.10) 설정:
# VXLAN 인터페이스 생성
ip link add vxlan-overlay type vxlan id 5000 dstport 4789 local 10.0.1.10 remote 10.0.1.20
# VRF 생성 및 인터페이스 바인딩
ip link add vrf-blue type vrf table 100
ip link set vrf-blue up
ip link set vxlan-overlay master vrf-blue
# 오버레이 IP 할당 및 인터페이스 활성화
ip addr add 172.20.10.10/24 dev vxlan-overlay
ip link set vxlan-overlay up
주요 파라미터 설명:
- id 5000: VXLAN 네트워크를 식별하는 VNI(VXLAN Network Identifier)입니다.
- dstport 4789: VTEP 간 통신에 사용되는 UDP 포트입니다. IANA 표준 포트는 4789이며, 미지정 시 Linux는 기본적으로 8472를 사용합니다.
- remote / local: 각각 상대편 VTEP의 언더레이 IP와 현재 노드의 언더레이 IP를 지정합니다.
호스트 B (언더레이 IP: 10.0.1.20) 설정:
ip link add vxlan-overlay type vxlan id 5000 dstport 4789 local 10.0.1.20 remote 10.0.1.10
ip link add vrf-blue type vrf table 100
ip link set vrf-blue up
ip link set vxlan-overlay master vrf-blue
ip addr add 172.20.10.20/24 dev vxlan-overlay
ip link set vxlan-overlay up
설정이 완료되면 VRF 라우팅 테이블과 FDB(Forwarding Database)가 자동으로 업데이트됩니다. 호스트 A에서 호스트 B로 핑 테스트를 수행하고 패킷을 캡처해 보면, 내부 ARP/ICMP 패킷이 VXLAN 헤더(VNI 5000)와 외부 UDP/IP 헤더(목적지 10.0.1.20)로 캡슐화되어 전송되는 것을 확인할 수 있습니다.
통신 프로세스 분석:
- 호스트 A에서 172.20.10.20으로 패킷 전송 시, 라우팅 테이블에 의해 vxlan-overlay 인터페이스로 전달됩니다.
- 동일 서브넷 내 통신이므로 ARP 요청이 발생하며, 이 브로드캐스트 패킷은 VXLAN 헤더가 추가되어 언더레이 네트워크를 통해 호스트 B의 VTEP로 전송됩니다.
- 호스트 B의 VTEP는 패킷을 디캡슐화하여 내부 ARP 요청을 처리하고, 동시에 송신측의 MAC 및 VTEP IP 정보를 FDB에 학습합니다.
- ARP 응답이 단방향 터널을 통해 호스트 A로 반환되며, 이후 실제 ICMP 패킷은 학습된 FDB 정보를 기반으로 단播 통신을 수행합니다.
2. Linux Bridge를 활용한 다중 엔드포인트 연결
실제 프로덕션 환경에서는 단일 호스트 내에서 수십 개의 컨테이너나 가상머신이 동시에 통신해야 합니다. 이를 위해 Linux Bridge를 사용하여 로컬의 여러 네트워크 네임스페이스를 VXLAN 터널에 연결합니다.
호스트 A 구성 (컨테이너 네임스페이스 연결):
# VXLAN 및 브리지 생성
ip link add vxlan-overlay type vxlan id 5000 dstport 4789 local 10.0.1.10 remote 10.0.1.20
ip link add br-vxlan type bridge
ip link set vxlan-overlay master br-vxlan
# VRF 설정
ip link add vrf-blue type vrf table 100
ip link set br-vxlan master vrf-blue
ip link set vxlan-overlay up
ip link set br-vxlan up
ip link set vrf-blue up
# 네트워크 네임스페이스 및 veth pair 구성
ip netns add container-ns
ip link add veth-host type veth peer name veth-ns netns container-ns
ip link set veth-host master br-vxlan
ip link set veth-host up
# 네임스페이스 내부 네트워크 설정
ip -n container-ns addr add 172.20.10.10/24 dev veth-ns
ip -n container-ns link set veth-ns up
ip -n container-ns link set lo up
호스트 B에서도 동일한 방식으로 브리지와 네임스페이스를 구성하고, veth-ns 인터페이스에 172.20.10.20 IP를 할당합니다. 이 구조에서는 컨테이너에서 발생한 ARP 브로드캐스트가 로컬 브리지(br-vxlan)를 거쳐 vxlan-overlay 인터페이스로 전달된 후, 커널에 의해 캡슐화되어 원격 호스트로 전송됩니다. 논리적으로 서로 다른 물리 호스트에 있는 컨테이너들이 단일 L2 브리지에 연결된 것과 동일하게 동작합니다.
3. 멀티캐스트(Multicast) 기반 VXLAN
포인트 투 포인트 방식은 확장성에 한계가 있습니다. 다중 노드 환경에서 오버레이 네트워크의 ARP 브로드캐스트를 처리하려면 언더레이 네트워크의 멀티캐스트 기능을 활용해야 합니다. 이 방식을 사용하면 특정 멀티캐스트 그룹에 가입한 모든 VTEP가 브로드캐스트/멀티캐스트 트래픽을 수신할 수 있습니다.
멀티캐스트 그룹을 이용한 VXLAN 설정:
# 호스트 A 및 B 공통 설정 (remote 대신 group 파라미터 사용)
ip link add vxlan-overlay type vxlan id 5000 dstport 4789 local [자신의_언더레이_IP] group 239.0.0.1
# 이후 브리지, VRF, 네임스페이스 설정은 이전과 동일하게 진행
이 구성에서 FDB 테이블의 기본 목적지(dst)는 특정 VTEP IP가 아닌 멀티캐스트 주소(239.0.0.1)로 기록됩니다. VTEP는 IGMP 프로토콜을 통해 해당 멀티캐스트 그룹에 가입하게 됩니다.
멀티캐스트 통신 흐름:
ARP 요청과 같은 브로드캐스트 패킷이 발생하면, VTEP는 이를 멀티캐스트 주소로 캡슐화하여 전송합니다. 언더레이 네트워크의 라우터는 이 패킷을 동일한 멀티캐스트 그룹에 가입된 모든 호스트로 복제하여 전달합니다. 각 호스트의 VTEP는 패킷을 수신하여 디캡슐화한 후, 자신의 네임스페이스에 속한 패킷인지 확인하고 FDB를 학습합니다. 불필요한 패킷은 드롭되며, 대상 노드만 응답을 생성합니다.
멀티캐스트 방식은 다중 노드 VXLAN 구성을 단순화하지만, 언더레이 네트워크 장비의 멀티캐스트 지원이 필수적이며 불필요한 패킷 복제로 인한 트래픽 오버헤드가 발생할 수 있습니다. 이러한 한계로 인해 현대의 대규모 클라우드 환경에서는 멀티캐스트 대신 SDN 컨트롤러를 활용하여 MAC 및 VTEP 매핑 정보를 중앙에서 분배하는 방식이 주로 사용됩니다.