Network

가상화 네트워킹 핵심 개념: Linux, KVM, libvirt

Somaz 2025. 11. 19. 06:46
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 주소 학습

  1. VM1이 패킷을 전송한다 → 브리지가 MAC 주소를 학습한다
  2. 브리지 FDB (Forwarding Database)에 저장한다
  3. 이후 해당 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

 

 

 

 

 

 


 

 

 

 

 

 

마무리

가상화 네트워킹은 물리 네트워크의 확장이면서 동시에 완전히 새로운 추상화 계층이다. 이해해야 할 개념들이 많지만, 각각의 기술이 어떤 문제를 해결하기 위해 만들어졌는지 파악하면 전체적인 그림을 그릴 수 있다.

 

핵심 정리

  1. 계층적 이해: Physical → Virtual → Application 순으로 네트워크 스택을 이해해야 한다
  2. 모드별 특징: NAT(보안), Bridge(성능), Route(제어), Isolated(격리)의 용도를 구분해야 한다
  3. 인터페이스 타입: tap/tun, veth, macvtap의 차이점과 사용 사례를 알아야 한다
  4. 성능 고려: SR-IOV, DPDK 등 고성능 기술의 필요성과 트레이드오프를 고려해야 한다
  5. 보안과 격리: 네트워크 정책과 방화벽의 중요성을 인식해야 한다

 

학습 순서 권장

  1. 기초: Linux 네트워킹 기본 (ip, route, iptables)을 익혀야 한다
  2. 가상화: KVM/QEMU 기본과 libvirt 네트워크를 학습해야 한다
  3. 실습: Cockpit으로 다양한 네트워크 모드를 테스트해봐야 한다
  4. 고급: OVS, SR-IOV 등 고급 기술을 탐구해야 한다
  5. 자동화: Ansible, Terraform 등으로 네트워크 인프라를 코드화해야 한다

 

 

 

이러한 개념들을 체계적으로 이해하면, 단순한 VM 관리를 넘어서 복잡한 클라우드 인프라를 설계하고 운영할 수 있는 기반을 마련할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 


Reference

728x90
반응형