Module 2: Network & Software-Defined Network (SDN)¶
학습 목표¶
이 모듈을 완료하면 다음을 이해하게 됩니다: - Linux Bridge의 동작 원리와 Proxmox VE에서의 역할 - VLAN, Bonding 등 고급 네트워크 구성 - SDN(Software-Defined Network)의 아키텍처와 Zone 유형 - VNet, Subnet, Controller의 관계와 설정 방법
1. 네트워크 아키텍처 개요¶
1.1 Proxmox VE 네트워크 스택¶
Proxmox VE는 표준 Linux 네트워크 스택을 사용합니다. 이는 최대한의 유연성과 안정성을 제공합니다.
┌─────────────────────────────────────────────────────────────────────────┐
│ Proxmox VE Network Stack │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ VM 100 │ │ VM 101 │ │ CT 200 │ │ CT 201 │ │
│ │ (tap) │ │ (tap) │ │ (veth) │ │ (veth) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │ │
│ └────────┬───────┴────────┬───────┴────────┬───────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │
│ │ vmbr0 │ │ vmbr1 │ │ vmbr2 │ │
│ │ (L2 Bridge) │ │ (L2 Bridge) │ │ (L2 Bridge) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ┌──────▼──────┐ │ ┌──────▼──────┐ │
│ │ eno1 │ │ │ bond0 │ │
│ │ (Physical) │ │ │ (Bonding) │ │
│ └──────┬──────┘ │ └──────┬──────┘ │
│ │ │ │ │
└──────────────────┼───────────────┼────────────────┼───────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────────────────┐
│ Physical Network │
│ (Top of Rack Switch) │
└──────────────────────────────────────────┘
1.2 네트워크 인터페이스 계층 구조¶
Layer 4: Application (VM/CT Guest Network)
↓
Layer 3: tap/veth (Virtual Interface per Guest)
↓
Layer 2: vmbr (Linux Bridge - Virtual Switch)
↓
Layer 1: bond/eno (Physical or Bonded Interface)
↓
Layer 0: Physical Cable & Switch
1.3 설정 파일 위치¶
| 파일 경로 | 용도 |
|---|---|
/etc/network/interfaces |
메인 네트워크 설정 |
/etc/network/interfaces.new |
스테이징 설정 (적용 전) |
/etc/pve/sdn/ |
SDN 클러스터 설정 |
/etc/pve/sdn/.running-config |
현재 적용된 SDN 설정 |
2. Linux Bridge (vmbr)¶
2.1 Bridge의 역할¶
Linux Bridge는 소프트웨어로 구현된 Layer 2 스위치입니다. 가상 머신과 물리 네트워크를 연결하는 핵심 컴포넌트입니다.
┌─────────────────────────────────────┐
│ vmbr0 (Bridge) │
│ "Virtual Switch" │
├─────────────────────────────────────┤
│ Port 1: eno1 (Physical Uplink) │
│ Port 2: tap100i0 (VM 100 NIC 0) │
│ Port 3: tap101i0 (VM 101 NIC 0) │
│ Port 4: veth200i0 (CT 200 eth0) │
└─────────────────────────────────────┘
│
MAC Learning Table (FDB):
┌─────────────────────────────────────┐
│ MAC Address │ Port │
├───────────────────┼─────────────────┤
│ AA:BB:CC:DD:EE:01 │ tap100i0 │
│ AA:BB:CC:DD:EE:02 │ tap101i0 │
│ AA:BB:CC:DD:EE:03 │ veth200i0 │
│ 00:11:22:33:44:55 │ eno1 (external) │
└───────────────────┴─────────────────┘
2.2 기본 Bridge 설정¶
기본 설정 예제 (/etc/network/interfaces):
auto lo
iface lo inet loopback
# Physical Interface (no IP, managed by bridge)
iface eno1 inet manual
# Main Bridge for VM/CT networking
auto vmbr0
iface vmbr0 inet static
address 192.168.10.2/24
gateway 192.168.10.1
bridge-ports eno1 # 물리 인터페이스 연결
bridge-stp off # Spanning Tree Protocol 비활성화
bridge-fd 0 # Forward Delay 0초
설정 옵션 설명:
| 옵션 | 설명 | 권장값 |
|---|---|---|
bridge-ports |
Bridge에 연결할 물리 인터페이스 | 실제 NIC 이름 |
bridge-stp |
Spanning Tree Protocol | off (단일 업링크) |
bridge-fd |
Forward Delay (학습 대기 시간) | 0 (빠른 전환) |
bridge-vlan-aware |
VLAN Aware 모드 활성화 | yes (VLAN 사용시) |
2.3 Bridge 명령어¶
# Bridge 목록 조회
brctl show
# 또는 (modern)
bridge link show
# Bridge 상세 정보
bridge -d link show vmbr0
# MAC 학습 테이블 (FDB) 조회
bridge fdb show br vmbr0
# Bridge 통계
ip -s link show vmbr0
# VLAN 정보 (VLAN-aware bridge)
bridge vlan show
출력 예제:
# brctl show
bridge name bridge id STP enabled interfaces
vmbr0 8000.001a2b3c4d5e no eno1
tap100i0
tap101i0
2.4 네트워크 구성 모델¶
2.4.1 Bridged Model (기본)¶
가장 일반적인 구성. 모든 Guest가 물리 네트워크와 동일한 L2 도메인에 위치합니다.
┌──────────────────────────────────────────────────────────────┐
│ Physical Network │
│ 192.168.10.0/24 │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Gateway │ │ Host │ │ VM 100 │ │ VM 101 │ │
│ │ .1 │ │ .2 │ │ .100 │ │ .101 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │ │
│ └────────────┴────────────┴────────────┘ │
│ │ │
│ [Physical Switch] │
└──────────────────────────────────────────────────────────────┘
2.4.2 Routed Model¶
각 Guest가 별도의 IP 블록을 사용. 호스팅 환경에서 사용됩니다.
# /etc/network/interfaces - Routed Setup
auto eno0
iface eno0 inet static
address 198.51.100.5/29
gateway 198.51.100.1
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up echo 1 > /proc/sys/net/ipv4/conf/eno0/proxy_arp
auto vmbr0
iface vmbr0 inet static
address 203.0.113.17/28
bridge-ports none # 물리 포트 없음!
bridge-stp off
bridge-fd 0
Provider Gateway
198.51.100.1
│
┌──────────────────┼──────────────────┐
│ eno0 │ │
│ 198.51.100.5/29 │
│ │ │
│ ip_forward=1, proxy_arp=1 │
│ │ │
│ vmbr0 │ │
│ 203.0.113.17/28 │
│ ┌────────────┼────────────┐ │
│ │ │ │ │
│ VM 100 VM 101 VM 102 │
│ .18 .19 .20 │
└─────────────────────────────────────┘
2.4.3 NAT (Masquerade) Model¶
단일 Public IP로 여러 Guest가 인터넷 접속. 사설 네트워크 사용.
# /etc/network/interfaces - NAT Setup
auto eno1
iface eno1 inet static
address 198.51.100.5/24
gateway 198.51.100.1
auto vmbr0
iface vmbr0 inet static
address 10.10.10.1/24
bridge-ports none
bridge-stp off
bridge-fd 0
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
3. Network Bonding (Link Aggregation)¶
3.1 Bonding 개요¶
Bonding은 여러 물리 NIC를 하나의 논리 인터페이스로 결합하여 대역폭 증가 또는 장애 복구를 제공합니다.
┌─────────────────────────────────────────────────────────────┐
│ bond0 (Logical Interface) │
│ LACP 802.3ad │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │ eno1 │ │ eno2 │ │
│ │ (slave) │ │ (slave) │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ │ │
└─────────┼─────────────────────────────────┼─────────────────┘
│ │
▼ ▼
┌──────────┐ ┌──────────┐
│ Switch │◄────── MLAG ────────►│ Switch │
│ Port 1 │ │ Port 2 │
└──────────┘ └──────────┘
3.2 Bonding Mode 비교¶
| Mode | 이름 | 설명 | 스위치 설정 | 사용 사례 |
|---|---|---|---|---|
| 0 | balance-rr | Round-robin 전송 | 불필요 | 테스트 환경 |
| 1 | active-backup | Active-Standby | 불필요 | Corosync 권장 |
| 2 | balance-xor | XOR 해시 기반 | 불필요 | 로드 밸런싱 |
| 3 | broadcast | 모든 슬레이브로 전송 | 불필요 | 특수 용도 |
| 4 | 802.3ad | LACP 동적 집계 | 필요 | 스토리지 권장 |
| 5 | balance-tlb | 송신 로드 밸런싱 | 불필요 | 일반 용도 |
| 6 | balance-alb | 송수신 로드 밸런싱 | 불필요 | 일반 용도 |
3.3 Bonding 설정 예제¶
3.3.1 LACP Bond (권장 - 스토리지용)¶
# /etc/network/interfaces
auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manual
# LACP Bond for Storage Network
auto bond0
iface bond0 inet static
bond-slaves eno1 eno2
address 192.168.1.2/24
bond-miimon 100 # Link 모니터링 간격 (ms)
bond-mode 802.3ad # LACP 모드
bond-xmit-hash-policy layer2+3 # 해시 정책
# Management Bridge
auto vmbr0
iface vmbr0 inet static
address 10.10.10.2/24
gateway 10.10.10.1
bridge-ports eno3
bridge-stp off
bridge-fd 0
3.3.2 Active-Backup Bond (Corosync용)¶
# Active-Backup for Cluster Network
auto bond1
iface bond1 inet static
bond-slaves eno3 eno4
address 10.10.20.2/24
bond-miimon 100
bond-mode active-backup # 장애 복구 모드
bond-primary eno3 # 기본 인터페이스
3.3.3 Bond를 Bridge 포트로 사용¶
# Bond as Bridge Port (Guest Network Redundancy)
auto bond0
iface bond0 inet manual
bond-slaves eno1 eno2
bond-miimon 100
bond-mode 802.3ad
bond-xmit-hash-policy layer2+3
auto vmbr0
iface vmbr0 inet static
address 10.10.10.2/24
gateway 10.10.10.1
bridge-ports bond0 # Bond를 업링크로 사용
bridge-stp off
bridge-fd 0
3.4 Bonding 상태 확인¶
# Bond 상태 조회
cat /proc/net/bonding/bond0
# 출력 예제:
# Ethernet Channel Bonding Driver: v5.x
# Bonding Mode: IEEE 802.3ad Dynamic link aggregation
# MII Status: up
#
# Slave Interface: eno1
# MII Status: up
# Link Failure Count: 0
#
# Slave Interface: eno2
# MII Status: up
# Link Failure Count: 0
# Bond 요약 정보
ip link show bond0
# 슬레이브 상태
cat /sys/class/net/bond0/bonding/slaves
4. VLAN (802.1Q)¶
4.1 VLAN 개요¶
VLAN(Virtual LAN)은 하나의 물리 네트워크를 여러 개의 논리적 네트워크로 분리합니다.
┌────────────────────────────────────────────────────────────────┐
│ Physical Switch │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ VLAN Trunk Port │ │
│ │ (Tagged: VLAN 10, 20, 30) │ │
│ └────────────────────────┬───────────────────────────────┘ │
└───────────────────────────┼────────────────────────────────────┘
│
802.1Q Tagged │ Frames
│
┌───────────────────────────┼────────────────────────────────────┐
│ Proxmox VE Host │
│ │ │
│ ┌────▼────┐ │
│ │ eno1 │ │
│ │ (trunk) │ │
│ └────┬────┘ │
│ ┌───────────────┼───────────────┐ │
│ │ │ │ │
│ ┌────▼────┐ ┌────▼────┐ ┌────▼────┐ │
│ │ vmbr0 │ │ vmbr0v10│ │ vmbr0v20│ │
│ │ (native)│ │ VLAN 10 │ │ VLAN 20 │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ VM 100 VM 101 VM 102 │
│ (untagged) (VLAN 10) (VLAN 20) │
└────────────────────────────────────────────────────────────────┘
4.2 VLAN 구성 방법¶
4.2.1 VLAN-Aware Bridge (권장)¶
가장 유연하고 효율적인 방법. 단일 Bridge에서 여러 VLAN 처리.
# /etc/network/interfaces - VLAN Aware Bridge
auto vmbr0
iface vmbr0 inet manual
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes # VLAN Aware 활성화
bridge-vids 2-4094 # 허용할 VLAN 범위
# Host Management on VLAN 5
auto vmbr0.5
iface vmbr0.5 inet static
address 192.168.5.2/24
gateway 192.168.5.1
VM 설정에서 VLAN 지정:
# VM 네트워크 설정 (VLAN 10)
qm set 100 --net0 virtio,bridge=vmbr0,tag=10
# 확인
qm config 100 | grep net0
# net0: virtio=AA:BB:CC:DD:EE:FF,bridge=vmbr0,tag=10
4.2.2 전통적 VLAN (Legacy)¶
각 VLAN마다 별도의 인터페이스와 Bridge 생성.
# VLAN 5 인터페이스 생성
auto eno1.5
iface eno1.5 inet manual
# VLAN 5 전용 Bridge
auto vmbr0v5
iface vmbr0v5 inet static
address 192.168.5.2/24
gateway 192.168.5.1
bridge-ports eno1.5
bridge-stp off
bridge-fd 0
4.3 VLAN과 Bond 조합¶
# Bond 생성
auto bond0
iface bond0 inet manual
bond-slaves eno1 eno2
bond-miimon 100
bond-mode 802.3ad
bond-xmit-hash-policy layer2+3
# Bond 위에 VLAN
iface bond0.5 inet manual
# VLAN 5 Bridge (Management)
auto vmbr0v5
iface vmbr0v5 inet static
address 192.168.5.2/24
gateway 192.168.5.1
bridge-ports bond0.5
bridge-stp off
bridge-fd 0
# Native VLAN Bridge (Guest)
auto vmbr0
iface vmbr0 inet manual
bridge-ports bond0
bridge-stp off
bridge-fd 0
4.4 VLAN 확인 명령어¶
# VLAN 인터페이스 목록
cat /proc/net/vlan/config
# Bridge VLAN 정보
bridge vlan show
# 특정 Bridge의 VLAN
bridge vlan show dev vmbr0
# 출력 예제:
# port vlan ids
# vmbr0 1 PVID Egress Untagged
# 10
# 20
# 30
5. Software-Defined Network (SDN)¶
5.1 SDN 개요¶
SDN은 클러스터 전체에서 가상 네트워크를 중앙 집중적으로 관리하는 기능입니다.
┌─────────────────────────────────────────────────────────────────────┐
│ Proxmox VE SDN Architecture │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ /etc/pve/sdn/ │ │
│ │ (Cluster-wide Configuration) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ zones.cfg│ │vnets.cfg │ │subnets. │ │controller│ │ │
│ │ │ │ │ │ │ cfg │ │ s.cfg │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ │ │
│ SDN Apply │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Node 1 │ │ Node 2 │ │ Node 3 │ │
│ │ │ │ │ │ │ │
│ │ /etc/network/ │ │ /etc/network/ │ │ /etc/network/ │ │
│ │ interfaces.d/ │ │ interfaces.d/ │ │ interfaces.d/ │ │
│ │ sdn │ │ sdn │ │ sdn │ │
│ │ │ │ │ │ │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │ │
│ │ │ vnet1 │ │ │ │ vnet1 │ │ │ │ vnet1 │ │ │
│ │ │ (bridge) │ │ │ │ (bridge) │ │ │ │ (bridge) │ │ │
│ │ └───────────┘ │ │ └───────────┘ │ │ └───────────┘ │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────┘
5.2 SDN 구성 요소¶
┌─────────────────────────────────────────────────────────────────┐
│ SDN Hierarchy │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Zone (영역) │
│ │ - 네트워크 격리의 최상위 단위 │
│ │ - 기술 유형 정의 (Simple, VLAN, QinQ, VXLAN, EVPN) │
│ │ │
│ └──► VNet (가상 네트워크) │
│ │ - Zone 내의 가상 브릿지 │
│ │ - 각 노드에 로컬 인터페이스로 생성 │
│ │ │
│ └──► Subnet (서브넷) │
│ - IP 주소 범위 정의 │
│ - Gateway, DHCP, DNS 설정 │
│ │
│ Controller (컨트롤러) │
│ - EVPN Zone의 라우팅 제어 │
│ - BGP/OSPF 설정 관리 │
│ │
│ IPAM (IP 주소 관리) │
│ - IP 할당 자동화 │
│ - DHCP 통합 │
│ │
└─────────────────────────────────────────────────────────────────┘
5.3 Zone 유형 비교¶
| Zone Type | 격리 방식 | 노드 간 연결 | 라우팅 | 사용 사례 |
|---|---|---|---|---|
| Simple | 격리된 Bridge | ❌ 불가 | NAT/Route | 단일 노드 테스트 |
| VLAN | 802.1Q Tag | ✅ L2 | 외부 라우터 | 기존 VLAN 인프라 |
| QinQ | Double Tag | ✅ L2 | 외부 라우터 | 대규모 VLAN |
| VXLAN | UDP Tunnel | ✅ L2 Overlay | 외부 라우터 | 다중 사이트 |
| EVPN | VXLAN+BGP | ✅ L2/L3 | 내장 BGP | 완전한 SDN |
5.4 SDN 설치 및 활성화¶
# SDN 패키지 설치 (8.1+ 기본 설치됨)
apt update
apt install libpve-network-perl
# ifupdown2 확인
apt install ifupdown2
# /etc/network/interfaces 끝에 추가
echo "source /etc/network/interfaces.d/*" >> /etc/network/interfaces
# FRRouting 설치 (EVPN용)
apt install frr-pythontools
systemctl enable frr.service
# DHCP 기능용 (선택)
apt install dnsmasq
systemctl disable --now dnsmasq # 기본 인스턴스 비활성화
6. Zone 유형별 상세 설정¶
6.1 Simple Zone¶
가장 기본적인 Zone. 각 노드에서 독립적인 격리 네트워크를 생성합니다.
┌─────────────────────────────────────────────────────────────────┐
│ Simple Zone │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Node 1 Node 2 │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ simple-vnet │ │ simple-vnet │ │
│ │ (isolated bridge)│ │ (isolated bridge)│ │
│ │ │ │ │ │
│ │ VM100 VM101 │ │ VM200 VM201 │ │
│ │ 10.0.0.1 .2 │ │ 10.0.0.1 .2 │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ │ ❌ No connection │ │
│ └──────────────────────────────┘ │
│ │
│ Note: 동일 IP 사용 가능 (격리됨) │
└─────────────────────────────────────────────────────────────────┘
설정 (Web UI: Datacenter → SDN → Zones → Add → Simple):
- ID: simplezone
- Nodes: 적용할 노드 선택
VNet 생성:
- ID: simplevnet
- Zone: simplezone
6.2 VLAN Zone¶
기존 VLAN 인프라를 활용하여 노드 간 L2 연결을 제공합니다.
┌─────────────────────────────────────────────────────────────────┐
│ VLAN Zone │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Node 1 Physical Switch Node 2 │
│ ┌──────────┐ ┌─────────────┐ ┌──────────┐ │
│ │ vnet10 │ │ VLAN 10 │ │ vnet10 │ │
│ │ (tag:10) │◄────────►│ Trunk │◄────────►│ (tag:10) │ │
│ │ │ │ │ │ │ │
│ │ VM100 │ │ VLAN 20 │ │ VM200 │ │
│ └──────────┘ └─────────────┘ └──────────┘ │
│ │ │
│ ┌──────────┐ │ ┌──────────┐ │
│ │ vnet20 │◄────────────────┴───────────────►│ vnet20 │ │
│ │ (tag:20) │ │ (tag:20) │ │
│ │ │ │ │ │
│ │ VM101 │ │ VM201 │ │
│ └──────────┘ └──────────┘ │
│ │
│ ✅ 동일 VLAN의 VM끼리 L2 통신 가능 │
└───────────────────────────────────────────────────────────────┘
설정:
# Zone 생성
Zone ID: myvlanzone
Type: VLAN
Bridge: vmbr0 # 기존 VLAN-aware bridge
# VNet 생성
VNet ID: vnet10
Zone: myvlanzone
Tag: 10 # VLAN ID
# Subnet 생성 (선택)
Subnet: 10.10.10.0/24
Gateway: 10.10.10.1
6.3 QinQ Zone (VLAN Stacking)¶
이중 VLAN 태깅으로 대규모 격리 네트워크 구성.
┌─────────────────────────────────────────────────────────────────┐
│ QinQ Zone │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Frame Structure: │
│ ┌────────┬────────────┬────────────┬─────────────┐ │
│ │ DA/SA │ Outer VLAN │ Inner VLAN │ Payload │ │
│ │ │ (Service) │ (Customer)│ │ │
│ │ │ VLAN 20 │ VLAN 100 │ │ │
│ └────────┴────────────┴────────────┴─────────────┘ │
│ │
│ Zone: qinqzone1 (Service VLAN: 20) │
│ └── VNet: qvnet1 (Inner VLAN: 100) │
│ └── VNet: qvnet2 (Inner VLAN: 200) │
│ │
│ Zone: qinqzone2 (Service VLAN: 30) │
│ └── VNet: qvnet3 (Inner VLAN: 100) ← 동일 Inner VLAN 가능 │
│ │
│ Note: MTU를 4바이트 줄여야 함 (1500 → 1496) │
└─────────────────────────────────────────────────────────────────┘
설정:
# QinQ Zone 생성
Zone ID: qinqzone1
Type: QinQ
Bridge: vmbr0
Service VLAN: 20
Service VLAN Protocol: 802.1q (또는 802.1ad)
MTU: 1496
# VNet 생성
VNet ID: qvnet1
Zone: qinqzone1
VLAN ID: 100 # Inner VLAN (Customer)
6.4 VXLAN Zone¶
UDP 터널을 통한 L2 오버레이 네트워크. 사이트 간 연결에 적합합니다.
┌─────────────────────────────────────────────────────────────────┐
│ VXLAN Zone │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Site A (192.168.1.0/24) Site B (192.168.2.0/24) │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ Node1: 192.168.1.1 │ │ Node3: 192.168.2.1 │ │
│ │ ┌───────────────┐ │ │ ┌───────────────┐ │ │
│ │ │ vxvnet1 │ │ │ │ vxvnet1 │ │ │
│ │ │ VNI: 10000 │ │ │ │ VNI: 10000 │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ VM100 │ │ VXLAN │ │ VM300 │ │ │
│ │ │ 10.0.100.1 │◄─┼───Tunnel────►│ │ 10.0.100.3 │ │ │
│ │ └───────────────┘ │ UDP:4789 │ └───────────────┘ │ │
│ └─────────────────────┘ └─────────────────────┘ │
│ │
│ VXLAN Header (50 bytes overhead): │
│ ┌────────┬────────┬───────┬────────┬──────────┐ │
│ │Outer IP│Outer │ VXLAN │Inner │ Original │ │
│ │ Header │UDP:4789│ Header│Ethernet│ Payload │ │
│ └────────┴────────┴───────┴────────┴──────────┘ │
│ │
│ MTU: 1450 (1500 - 50) │
└─────────────────────────────────────────────────────────────────┘
설정:
# VXLAN Zone 생성
Zone ID: myvxlanzone
Type: VXLAN
Peers: 192.168.1.1,192.168.1.2,192.168.2.1,192.168.2.2
MTU: 1450
# VNet 생성
VNet ID: vxvnet1
Zone: myvxlanzone
Tag: 10000 # VNI (VXLAN Network Identifier)
6.5 EVPN Zone (BGP EVPN)¶
가장 고급 SDN. VXLAN + BGP로 완전한 L2/L3 라우팅 제공.
┌─────────────────────────────────────────────────────────────────┐
│ EVPN Zone │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ BGP Control Plane │ │
│ │ ASN: 65000 │ │
│ │ Node1 ◄────────► Node2 ◄────────► Node3 │ │
│ │ (BGP Peer) (BGP Peer) (Exit Node) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ VXLAN Data Plane │ │
│ │ │ │
│ │ VNet1 (VNI: 1000) VNet2 (VNI: 2000) │ │
│ │ 10.100.1.0/24 10.100.2.0/24 │ │
│ │ GW: 10.100.1.1 GW: 10.100.2.1 │ │
│ │ (Anycast on all nodes) (Anycast on all nodes) │ │
│ │ │ │
│ │ VRF VXLAN (VNI: 10000) │ │
│ │ Inter-VNet Routing │ │
│ │ │ │
│ │ VM in VNet1 ◄─────── L3 Route ──────► VM in VNet2 │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ Exit Node │
│ │ │
│ External Network │
│ (SNAT/Default Route) │
│ │
└─────────────────────────────────────────────────────────────────┘
설정 순서:
-
EVPN Controller 생성:
-
EVPN Zone 생성:
-
VNet 생성:
-
Subnet 생성:
7. SDN 관리 명령어¶
7.1 SDN 적용 및 상태 확인¶
# SDN 설정 적용 (CLI)
pvesh set /cluster/sdn
# 현재 SDN 상태 확인
pvesh get /cluster/sdn
# Zone 목록
pvesh get /cluster/sdn/zones
# VNet 목록
pvesh get /cluster/sdn/vnets
# 특정 VNet 상태
pvesh get /cluster/sdn/vnets/<vnet-id>
7.2 SDN 설정 파일¶
# SDN 설정 파일 위치
ls -la /etc/pve/sdn/
# zones.cfg 예제
cat /etc/pve/sdn/zones.cfg
# vlan: myvlanzone
# bridge vmbr0
#
# evpn: evpnzone
# controller evpnctl
# vrf-vxlan 10000
# vnets.cfg 예제
cat /etc/pve/sdn/vnets.cfg
# vnet: vnet10
# zone myvlanzone
# tag 10
# 현재 적용된 설정
cat /etc/pve/sdn/.running-config
7.3 로컬 네트워크 확인¶
# SDN에 의해 생성된 인터페이스 확인
ip link show | grep -E "vnet|vxlan"
# SDN Bridge 정보
bridge link show
# FRR 상태 (EVPN)
vtysh -c "show bgp summary"
vtysh -c "show evpn vni"
vtysh -c "show ip route"
8. 네트워크 문제 해결¶
8.1 진단 도구¶
# 인터페이스 상태
ip -br addr show
ip -br link show
# Bridge 연결 상태
brctl show
bridge link show
# 라우팅 테이블
ip route show
ip route get 10.0.0.1
# ARP 테이블
ip neigh show
# 네트워크 통계
netstat -i
ss -tuln
8.2 패킷 캡처¶
# Bridge 트래픽 캡처
tcpdump -i vmbr0 -n
# 특정 VLAN 트래픽
tcpdump -i vmbr0 -n vlan 10
# VXLAN 트래픽 (UDP 4789)
tcpdump -i eno1 -n udp port 4789
# VM 인터페이스 캡처
tcpdump -i tap100i0 -n
8.3 일반적인 문제 해결¶
| 문제 | 원인 | 해결 방법 |
|---|---|---|
| VM이 외부 통신 불가 | Bridge에 물리 포트 없음 | bridge-ports 확인 |
| VLAN 통신 안됨 | Trunk 설정 오류 | 스위치 VLAN 설정 확인 |
| SDN 적용 안됨 | interfaces 소스 누락 | source /etc/network/interfaces.d/* 추가 |
| VXLAN 터널 불통 | 방화벽 차단 | UDP 4789 허용 |
| EVPN 라우팅 실패 | FRR 미설치 | frr-pythontools 설치 |
8.4 네트워크 설정 적용¶
# ifupdown2로 무중단 적용
ifreload -a
# 특정 인터페이스만 재시작
ifdown vmbr0 && ifup vmbr0
# 설정 검증 (적용 전)
ifquery --check vmbr0
# 네트워크 서비스 재시작 (주의!)
systemctl restart networking
9. 베스트 프랙티스¶
9.1 네트워크 설계 권장사항¶
┌─────────────────────────────────────────────────────────────────┐
│ 권장 네트워크 분리 구조 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Management │ │ Storage │ │ VM/CT │ │
│ │ Network │ │ Network │ │ Network │ │
│ │ │ │ │ │ │ │
│ │ • Web UI │ │ • Ceph │ │ • Guest │ │
│ │ • SSH │ │ • iSCSI │ │ Traffic │ │
│ │ • API │ │ • NFS │ │ • VLANs │ │
│ │ │ │ │ │ │ │
│ │ VLAN 1 │ │ VLAN 100 │ │ VLAN 10-99 │ │
│ │ vmbr0 │ │ bond0 │ │ vmbr1 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ │
│ │ Corosync │ • 전용 네트워크 권장 │
│ │ Network │ • active-backup bond │
│ │ │ • 또는 다중 링크 │
│ │ VLAN 200 │ │
│ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
9.2 체크리스트¶
설치 후:
- [ ] ifupdown2 설치 확인
- [ ] /etc/network/interfaces 백업
- [ ] SDN 소스 라인 추가
Bond 설정:
- [ ] 스위치 LACP 설정 확인 (802.3ad 사용시)
- [ ] bond-miimon 설정 (권장: 100ms)
- [ ] Corosync용은 active-backup 사용
VLAN 설정:
- [ ] 스위치 Trunk 포트 설정
- [ ] bridge-vlan-aware yes 확인
- [ ] MTU 고려 (QinQ: -4, VXLAN: -50)
SDN 설정: - [ ] 모든 노드에 패키지 설치 - [ ] FRR 설치 및 활성화 (EVPN) - [ ] 방화벽 규칙 (UDP 4789 for VXLAN)
10. 요약¶
핵심 개념¶
| 구성 요소 | 역할 | 설정 파일 |
|---|---|---|
| Linux Bridge | L2 가상 스위치 | /etc/network/interfaces |
| Bond | NIC 집계/장애복구 | /etc/network/interfaces |
| VLAN | 논리적 네트워크 분리 | /etc/network/interfaces |
| SDN Zone | 클러스터 가상 네트워크 | /etc/pve/sdn/zones.cfg |
| SDN VNet | Zone 내 가상 브릿지 | /etc/pve/sdn/vnets.cfg |
명령어 요약¶
# 네트워크 상태
ip -br addr show
brctl show
bridge vlan show
# 설정 적용
ifreload -a # 무중단 적용
pvesh set /cluster/sdn # SDN 적용
# 문제 해결
tcpdump -i vmbr0 -n
cat /proc/net/bonding/bond0
vtysh -c "show bgp summary" # EVPN
다음 단계¶
- Module 6: Backup & Restore - vzdump를 이용한 백업 전략
- Module 7: Firewall - 네트워크 보안 설정