728x90
반응형
Overview
가상화 환경에서 네트워킹을 이해하려면 다양한 기술과 용어들을 알아야 한다. 특히 KVM/QEMU 기반의 가상화 환경에서는 물리 네트워크와 가상 네트워크가 어떻게 연결되고 상호작용하는지 이해하는 것이 중요하다.
이 글에서는 가상화 네트워킹의 핵심 개념들을 실제 사례와 함께 설명하며, Cockpit을 통한 VM 관리 시 마주치는 네트워크 용어들을 체계적으로 정리해보겠다.
다룰 주요 개념들
- 가상화 네트워킹 기본 구조
- libvirt 네트워크 모드와 특징
- Linux 브리지와 가상 인터페이스
- macvtap과 veth의 차이점
- 네트워크 가상화 기술들

1. 가상화 네트워킹 기본 구조
물리 네트워크 vs 가상 네트워크
물리 네트워크 계층
Internet ←→ Physical Switch ←→ Physical NIC (eno1) ←→ Host OS
↓
[Physical Network Layer]
가상 네트워크 계층
VM1 ←→ Virtual NIC ←→ Virtual Switch ←→ Physical NIC ←→ Physical Switch
VM2 ←→ Virtual NIC ←→ ↑ ←→ ↑ ←→ ↑
VM3 ←→ Virtual NIC ←→ [Virtual Layer] [Bridge Layer] [Physical Layer]
네트워크 스택의 이해
전체 네트워크 스택
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ VM1 (Guest) │ │ VM2 (Guest) │ │ VM3 (Guest) │
│ eth0/enp1s0 │ │ eth0/enp1s0 │ │ eth0/enp1s0 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────────────────────────────────────────────┐
│ Virtual Network Layer │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ vnet1 │ │ vnet2 │ │ vnet3 │ │ virbr0 │ │
│ │(tap/tun)│ │(tap/tun)│ │(tap/tun)│ │(bridge) │ │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Host OS Network │
│ eno1 (Physical NIC) │
└─────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────┐
│ Physical Network │
│ (Switch, Router, Internet) │
└─────────────────────────────────────────────────────────┘
2. libvirt 네트워크 모드 완전 분석
NAT 모드 (Network Address Translation)
기본 개념
- VM들이 사설 네트워크(192.168.122.0/24)를 사용한다
- 외부 통신 시 호스트의 IP로 NAT 변환된다
- 가장 일반적이고 안전한 모드다
네트워크 구조
Internet (Public) ←→ Host (10.10.10.15) ←→ virbr0 (192.168.122.1) ←→ VM (192.168.122.17)
↑ ↑
[NAT Gateway] [Private Network]
특징
- VM 간 통신 가능하다
- 외부 접근 시 포트 포워딩이 필요하다
- 보안성이 높다 (내부 네트워크 숨김)
- ❌ 외부에서 직접 접근하기 어렵다
libvirt XML 설정
<network>
<name>default</name>
<forward mode='nat'/>
<bridge name='virbr0' stp='on' delay='0'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'/>
</dhcp>
</ip>
</network>
Bridge 모드 (브리지)
기본 개념
- VM들이 물리 네트워크에 직접 연결된 것처럼 동작한다
- 같은 네트워크 세그먼트에서 IP를 할당받는다
- L2 레벨에서 투명한 연결을 제공한다
네트워크 구조
Physical Switch ←→ br0 (Linux Bridge) ←→ eno1 (Physical NIC)
↑ ↓
[L2 Domain] ┌─────────┐
│ VM1 │ 10.10.10.17
│ VM2 │ 10.10.10.18
│ VM3 │ 10.10.10.19
└─────────┘
특징
- VM들이 물리 네트워크의 일부처럼 동작한다
- 외부에서 직접 접근이 가능하다
- 성능이 우수하다 (NAT 오버헤드 없음)
- ❌ IP 주소 관리가 필요하다
- ❌ 네트워크 보안 설정이 중요하다
libvirt XML 설정
<network>
<name>br0-network</name>
<forward mode='bridge'/>
<bridge name='br0'/>
</network>
Route 모드 (라우팅)
기본 개념
- 호스트가 라우터 역할을 수행한다
- VM들은 별도 서브넷을 사용한다
- 라우팅 테이블로 트래픽을 제어한다
네트워크 구조
External Network (10.10.10.0/24) ←→ Host Router ←→ VM Network (192.168.100.0/24)
↑
[Routing Table]
192.168.100.0/24 → virbr1
특징
- 네트워크 분리와 제어가 가능하다
- 다중 서브넷 관리가 용이하다
- ❌ 라우팅 설정이 복잡하다
- ❌ 외부 라우터에 경로 추가가 필요하다
Isolated 모드 (격리)
기본 개념
- VM들끼리만 통신이 가능하다
- 외부 네트워크와 완전히 차단된다
- 개발/테스트 환경에 적합하다
네트워크 구조
Internet ✗ Host ✗ Isolated Bridge ←→ VM1, VM2, VM3
↑
[Internal Only]
특징
- 완전한 네트워크 격리가 가능하다
- 보안 테스트에 적합하다
- ❌ 외부 접근이 불가능하다
- ❌ 인터넷을 사용할 수 없다
3. 가상 네트워크 인터페이스 심화
TAP/TUN 인터페이스
TUN (Network Tunnel)
- L3 (Network Layer) 인터페이스다
- IP 패킷 단위로 동작한다
- VPN에서 주로 사용된다
TAP (Network Tap)
- L2 (Data Link Layer) 인터페이스다
- Ethernet 프레임 단위로 동작한다
- VM 네트워킹에서 주로 사용된다
동작 방식
# TAP 인터페이스 생성 예시
sudo ip tuntap add dev tap0 mode tap
sudo ip link set tap0 up
sudo ip addr add 192.168.100.1/24 dev tap0
# VM에서 TAP 사용
qemu-system-x86_64 -netdev tap,id=net0,ifname=tap0,script=no \
-device virtio-net,netdev=net0 [other options]
veth (Virtual Ethernet) 쌍
기본 개념
- 가상 이더넷 케이블과 같은 역할을 한다
- 항상 쌍으로 생성된다 (veth0 ↔ veth1)
- 컨테이너 네트워킹에서 주로 사용된다
생성과 사용
# veth 쌍 생성
sudo ip link add veth0 type veth peer name veth1
# 네임스페이스 연결 예시
sudo ip netns add ns1
sudo ip link set veth1 netns ns1
sudo ip netns exec ns1 ip addr add 192.168.1.2/24 dev veth1
sudo ip netns exec ns1 ip link set veth1 up
macvtap 심화 분석
macvtap 모드별 상세 특징
1. VEPA (Virtual Ethernet Port Aggregator) 모드
VM1 → macvtap1 → Physical NIC → External Switch → Physical NIC → macvtap2 → VM2
↑ ↑
[Hair-pin 필요] [External Switching]
- 모든 트래픽이 외부 스위치를 거쳐야 한다
- 스위치가 hair-pin 모드를 지원해야 VM 간 통신이 가능하다
- 트래픽 모니터링과 정책 적용에 유리하다
2. Bridge 모드
VM1 → macvtap1 ↘
→ Internal Switch → External Network
VM2 → macvtap2 ↗
- VM 간 직접 통신이 가능하다
- 호스트와는 통신이 불가능하다 (보안 격리)
- 성능이 좋지만 관리가 복잡하다
3. Private 모드
VM1 → macvtap1 → Physical NIC → External Network
VM2 → macvtap2 → Physical NIC → External Network
↑ ↗
[Isolated] [No Inter-VM Communication]
- VM 간 완전히 격리된다
- 각 VM이 독립적으로 외부 통신한다
- 멀티테넌트 환경에 적합하다
4. Passthrough 모드
VM → Direct Hardware Control → Physical NIC
↑
[Exclusive Access]
- VM이 물리 NIC를 독점 사용한다
- 최고 성능과 하드웨어 기능을 완전히 활용한다
- 한 번에 하나의 VM만 사용 가능하다
macvlan vs macvtap 비교
macvlan
- 커널 기능으로 네트워크 네임스페이스와 함께 사용된다
- 컨테이너에서 주로 활용된다
- 여러 MAC 주소를 하나의 물리 인터페이스에 할당한다
macvtap
- macvlan + TAP 기능이 결합되어 있다
- VM에서 직접 사용이 가능하다
- QEMU/KVM에 최적화되어 있다
# macvlan 생성 예시
sudo ip link add macvlan0 link eno1 type macvlan mode bridge
sudo ip addr add 10.10.10.100/24 dev macvlan0
# macvtap 확인
ip link show type macvtap
ls /dev/tap*
4. Linux 브리지 네트워킹 심화
브리지 동작 원리
MAC 주소 학습
- VM1이 패킷을 전송한다 → 브리지가 MAC 주소를 학습한다
- 브리지 FDB (Forwarding Database)에 저장한다
- 이후 해당 MAC으로 오는 패킷을 정확한 포트로 전달한다
브리지 테이블 확인
# FDB (Forwarding Database) 확인
bridge fdb show br br0
# MAC 주소 테이블
brctl showmacs br0
# 브리지 통계
cat /sys/class/net/br0/statistics/rx_packets
cat /sys/class/net/br0/statistics/tx_packets
STP (Spanning Tree Protocol)
STP의 역할
- 루프를 방지한다
- 중복 경로를 관리한다
- 네트워크 토폴로지 변경 시 재구성한다
STP 상태
# STP 정보 확인
brctl showstp br0
# 포트별 STP 상태
# Disabled, Blocking, Listening, Learning, Forwarding
STP 설정
# STP 활성화/비활성화
sudo brctl stp br0 on
sudo brctl stp br0 off
# 브리지 우선순위 설정 (낮을수록 루트 브리지)
sudo brctl setbridgeprio br0 4096
# 포트 우선순위 설정
sudo brctl setportprio br0 eno1 10
VLAN과 브리지
VLAN 태깅
# VLAN 인터페이스 생성
sudo ip link add link eno1 name eno1.100 type vlan id 100
sudo ip link set eno1.100 up
# 브리지에 VLAN 인터페이스 추가
sudo brctl addif br0 eno1.100
브리지 VLAN 필터링
# VLAN 인식 브리지 생성
sudo ip link add name br-vlan type bridge vlan_filtering 1
# VLAN 설정
bridge vlan add vid 100 dev eno1 master
bridge vlan add vid 100 dev vnet1 master
5. 네트워크 가상화 고급 개념
SR-IOV (Single Root I/O Virtualization)
기본 개념
- 물리 NIC를 여러 가상 기능(VF)으로 분할한다
- VM이 하드웨어에 직접 접근한다 (Passthrough)
- 최고 성능과 낮은 지연시간을 제공한다
구조
Physical NIC (PF: Physical Function)
├── VF1 → VM1 (Direct Hardware Access)
├── VF2 → VM2 (Direct Hardware Access)
├── VF3 → VM3 (Direct Hardware Access)
└── VF4 → VM4 (Direct Hardware Access)
설정 예시
# SR-IOV 지원 확인
lspci | grep -i ethernet
cat /sys/class/net/eno1/device/sriov_totalvfs
# VF 생성
echo 4 > /sys/class/net/eno1/device/sriov_numvfs
# VF 확인
ip link show
lspci | grep "Virtual Function"
DPDK (Data Plane Development Kit)
특징
- 유저스페이스 네트워킹이다
- 커널 바이패스로 극한 성능을 제공한다
- 패킷 처리 전용 CPU 코어를 할당한다
vs 전통적 네트워킹
Traditional: Hardware → Kernel → Userspace Application
DPDK: Hardware → Userspace Application (Direct)
OVS (Open vSwitch)
기능
- 프로그래밍 가능한 가상 스위치다
- OpenFlow 프로토콜을 지원한다
- SDN (Software Defined Networking)을 구현한다
libvirt와 OVS
<network>
<name>ovs-network</name>
<forward mode='bridge'/>
<bridge name='ovsbr0'/>
<virtualport type='openvswitch'/>
</network>
OVS 명령어
# 브리지 생성
sudo ovs-vsctl add-br ovsbr0
# 포트 추가
sudo ovs-vsctl add-port ovsbr0 eno1
# Flow 규칙 확인
sudo ovs-ofctl dump-flows ovsbr0
6. 네트워크 성능과 최적화
성능 측정 도구
iperf3 - 대역폭 측정
iperf3 -s -B 10.10.10.17
# 클라이언트 모드 (다양한 테스트)
iperf3 -c 10.10.10.17 -t 30 -P 4 # 30초, 4개 병렬 스트림
iperf3 -c 10.10.10.17 -u -b 1G # UDP, 1Gbps 테스트
iperf3 -c 10.10.10.17 -R # 역방향 테스트
hping3 - 지연시간 측정
# ICMP 지연시간
sudo hping3 -c 100 -i u1000 10.10.10.17
# TCP 지연시간
sudo hping3 -c 100 -S -p 80 -i u1000 10.10.10.17
netperf - 종합 네트워크 성능
# TCP 스트림 테스트
netperf -H 10.10.10.17 -t TCP_STREAM
# UDP 스트림 테스트
netperf -H 10.10.10.17 -t UDP_STREAM
# 요청-응답 테스트
netperf -H 10.10.10.17 -t TCP_RR
성능 최적화 기법
1. CPU 친화성 (CPU Affinity)
# 네트워크 인터럽트를 특정 CPU에 바인딩
echo 2 > /proc/irq/24/smp_affinity
# VM의 vCPU를 특정 물리 CPU에 고정
virsh vcpupin vm-name 0 1
virsh vcpupin vm-name 1 2
2. 큐 최적화
# 네트워크 인터페이스 큐 수 확인
ethtool -l eno1
# 큐 수 조정
ethtool -L eno1 combined 4
# 링 버퍼 크기 조정
ethtool -G eno1 rx 4096 tx 4096
3. 가상 네트워크 최적화
<!-- VM XML에서 멀티큐 활성화 -->
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
<driver name='vhost' queues='4'/>
</interface>
7. 보안과 네트워크 정책
iptables와 가상화
브리지 트래픽 제어
# 브리지 트래픽이 iptables를 거치도록 설정
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
# VM 간 통신 차단
iptables -I FORWARD -i br0 -o br0 -j DROP
# 특정 VM만 허용
iptables -I FORWARD -s 10.10.10.17 -d 10.10.10.18 -j ACCEPT
libvirt 네트워크 필터
<interface type='bridge'>
<source bridge='br0'/>
<filterref filter='clean-traffic'/>
</interface>
네트워크 네임스페이스와 격리
네임스페이스 생성과 관리
# 네트워크 네임스페이스 생성
sudo ip netns add secure-ns
# 인터페이스를 네임스페이스로 이동
sudo ip link set veth1 netns secure-ns
# 네임스페이스 내에서 명령 실행
sudo ip netns exec secure-ns ip addr show
sudo ip netns exec secure-ns ping 8.8.8.8
8. 모니터링과 트러블슈팅
네트워크 상태 모니터링
실시간 트래픽 모니터링
# 인터페이스별 트래픽
watch -n1 "cat /proc/net/dev"
# iftop - 실시간 대역폭 사용량
sudo iftop -i br0
# vnstat - 네트워크 통계
vnstat -i br0 -l # 실시간
vnstat -i br0 -d # 일별 통계
패킷 캡처와 분석
# tcpdump - 패킷 캡처
sudo tcpdump -i br0 -w capture.pcap
sudo tcpdump -i br0 host 10.10.10.17
# Wireshark용 캡처
sudo dumpcap -i br0 -w wireshark.pcapng
일반적인 문제 진단
연결 테스트 순서
# 1. 물리적 연결 확인
ethtool eno1 | grep "Link detected"
# 2. IP 설정 확인
ip addr show br0
# 3. 라우팅 테이블 확인
ip route show
# 4. DNS 해결 확인
nslookup google.com
# 5. 방화벽 확인
iptables -L -n -v
브리지 문제 진단
# 브리지 연결 상태
brctl show
# MAC 학습 확인
brctl showmacs br0
# STP 상태 (문제 시)
brctl showstp br0
마무리
가상화 네트워킹은 물리 네트워크의 확장이면서 동시에 완전히 새로운 추상화 계층이다. 이해해야 할 개념들이 많지만, 각각의 기술이 어떤 문제를 해결하기 위해 만들어졌는지 파악하면 전체적인 그림을 그릴 수 있다.
핵심 정리
- 계층적 이해: Physical → Virtual → Application 순으로 네트워크 스택을 이해해야 한다
- 모드별 특징: NAT(보안), Bridge(성능), Route(제어), Isolated(격리)의 용도를 구분해야 한다
- 인터페이스 타입: tap/tun, veth, macvtap의 차이점과 사용 사례를 알아야 한다
- 성능 고려: SR-IOV, DPDK 등 고성능 기술의 필요성과 트레이드오프를 고려해야 한다
- 보안과 격리: 네트워크 정책과 방화벽의 중요성을 인식해야 한다
학습 순서 권장
- 기초: Linux 네트워킹 기본 (ip, route, iptables)을 익혀야 한다
- 가상화: KVM/QEMU 기본과 libvirt 네트워크를 학습해야 한다
- 실습: Cockpit으로 다양한 네트워크 모드를 테스트해봐야 한다
- 고급: OVS, SR-IOV 등 고급 기술을 탐구해야 한다
- 자동화: Ansible, Terraform 등으로 네트워크 인프라를 코드화해야 한다
이러한 개념들을 체계적으로 이해하면, 단순한 VM 관리를 넘어서 복잡한 클라우드 인프라를 설계하고 운영할 수 있는 기반을 마련할 수 있다.
Reference
- KVM 공식 문서
- QEMU 네트워킹 가이드
- libvirt 네트워킹 문서
- Red Hat Cockpit 가상화 가이드
- Ubuntu Netplan 설정
- Linux Bridge 관리
- Linux 네트워크 네임스페이스
- iproute2 사용법
- iptables 가이드
- TAP/TUN 인터페이스 가이드
- macvlan vs macvtap 비교
- veth 쌍 사용법
- SR-IOV 기술 개요
- Open vSwitch 공식 문서
- DPDK 프로그래밍 가이드
- SR-IOV 설정 가이드
- VLAN 태깅과 트렁킹
- Linux 네트워크 성능 튜닝
- virtio 네트워크 최적화
- CPU 친화성 설정
- iperf3 사용법
- tcpdump 가이드
- Wireshark 문서
- vnstat 네트워크 모니터링
- libvirt 보안 가이드
- 네트워크 필터링
- 브리지 방화벽 설정
- KVM 네트워킹 튜토리얼
- libvirt 네트워크 예제
- Linux 컨테이너 네트워킹
- IEEE 802.1Q VLAN 표준
- STP RFC 802.1D
- OpenFlow 프로토콜
- libvirt 메일링 리스트
- KVM 포럼
- QEMU 위키
- Stack Overflow KVM 태그
728x90
반응형
'Network' 카테고리의 다른 글
| Bridge 모드 심화 분석: L2 투명성과 네트워크 세그먼트 (3) | 2025.08.11 |
|---|---|
| SSH 터널링이란? 개념부터 활용까지 알아보자! (0) | 2025.04.24 |
| Reverse Proxy(역방향 프록시)란? (2) | 2024.11.13 |
| haproxy 개념 및 구성 가이드 (0) | 2024.04.09 |
| Curl(Client URL)이란? (0) | 2023.05.26 |