시작하기
VPP를 처음 돌려보는 분을 위한 단계별 실습 가이드입니다. 설치, 첫 실행, TAP 인터페이스로 그래프 통과 확인, 트레이스 분석, 플러그인 확장까지 한 번의 세션으로 체험합니다.
시작 전 준비물
다음 환경을 권장합니다. VM/컨테이너에서도 대부분 동작하지만 성능 측정은 베어메탈이 필요합니다.
- OS: Ubuntu 22.04 / 24.04 LTS (Debian · RHEL/Rocky · Fedora 도 지원)
- CPU: x86_64 또는 ARM64, 최소 4코어
- RAM: 최소 4 GB (Hugepage 2GB + 운영체제 여유분)
- 권한:
sudo가능한 계정 - 네트워크: 호스트 네트워크와 분리된 실험 인터페이스 1개 권장
1단계 — 설치
가장 빠른 설치 방법은 FD.io 패키지 저장소를 등록하고 apt로 받는 것입니다.
# VPP 26.02 릴리스 저장소 등록
$ curl -s https://packagecloud.io/install/repositories/fdio/release/script.deb.sh | sudo bash
# 핵심 패키지 설치
$ sudo apt-get install -y vpp vpp-plugin-core vpp-plugin-dpdk
# 설치 확인
$ vpp -v
vpp v26.02-release built by root on ...
소스 빌드가 필요한 경우(예: 개발 브랜치 추적)는 운영 페이지의 설치 섹션을 참고하시기 바랍니다.
2단계 — 첫 실행
설치 직후 VPP는 vpp systemd 서비스로 자동 기동됩니다. 상태를 확인하고 CLI에 접속합니다.
$ sudo systemctl status vpp
$ sudo vppctl
vpp# show version
vpp# show interface
vpp# quit
여기서 show interface는 보통 local0만 보일 것입니다. 아직 실제 네트워크 인터페이스를 VPP에 붙이지 않았기 때문입니다.
vppctl은 인자 없이 실행하면 대화형 세션으로 진입하고, 뒤에 명령을 붙이면 한 번만 실행 후 빠져나옵니다. 예: sudo vppctl show version.
3단계 — TAP 인터페이스로 놀이터 만들기
실제 물리 NIC를 붙이면 이후 시스템 네트워크가 끊길 수 있으므로, 첫 실습은 커널 TAP 인터페이스를 사용합니다. VPP가 TAP를 만들면 리눅스 네임스페이스 쪽에서도 같은 이름이 보입니다.
vpp# create tap id 0 host-ip4-addr 10.10.1.2/24
vpp# set interface state tap0 up
vpp# set interface ip address tap0 10.10.1.1/24
# 리눅스 측 TAP에 주소 설정
$ sudo ip addr add 10.10.1.2/24 dev tap0
$ sudo ip link set tap0 up
이제 리눅스 → VPP 방향으로 핑을 쏩니다.
$ ping -c 3 10.10.1.1
PING 10.10.1.1 (10.10.1.1) 56(84) bytes of data.
64 bytes from 10.10.1.1: icmp_seq=1 ttl=64 time=0.2 ms
...
패킷이 성공적으로 오갔다면 VPP가 처음으로 사용자 트래픽을 처리한 것입니다.
4단계 — 내부 들여다보기
방금 지나간 패킷이 VPP 그래프를 어떻게 통과했는지 확인합니다.
vpp# show interface
vpp# show ip fib
vpp# show runtime
show runtime은 노드별 처리량·벡터 크기·클럭 사이클을 보여 주는 VPP의 핵심 성능 뷰입니다. ip4-input, ip4-lookup, ip4-rewrite, tap0-output 같은 노드가 등장합니다.
그래프 트레이스로 실제 경로를 확인해 봅니다.
vpp# clear trace
vpp# trace add tap-rx 10
# (리눅스 측에서 다시 ping 실행)
vpp# show trace
출력은 패킷 1건의 노드 경로와 각 노드에서 본 헤더·메타데이터를 순서대로 보여 줍니다. 이 트레이스는 VPP 학습의 가장 강력한 도구입니다. 트레이스 필터링·노드별 출력 해석·운영 환경에서의 사용 패턴은 디버깅 — 패킷 트레이싱에서 자세히 다룹니다.
5단계 — 플러그인으로 NAT 한 줄 추가
VPP의 기능 확장은 플러그인으로 이뤄집니다. NAT 플러그인은 기본 설치에 포함되어 있으므로, CLI만으로 간단한 정적 NAT를 추가할 수 있습니다.
vpp# nat44 plugin enable
vpp# set interface nat44 in tap0 out tap0 output-feature
vpp# nat44 add static mapping tcp local 10.10.1.2 80 external 10.10.1.1 8080
여기서 목표는 정확한 운영 구성이 아니라 플러그인이 얼마나 가볍게 끼워지는지를 체감하는 것입니다. 실전 NAT 구성은 보안과 터널링 — NAT 섹션을 참고하시기 바랍니다.
6단계 — 정리
vpp# delete tap tap0
vpp# quit
$ sudo systemctl stop vpp
다음 단계로
튜토리얼이 끝났습니다. 다음은 카테고리별 추천 경로입니다.
| 관심사 | 다음에 읽을 문서 |
|---|---|
| VPP가 왜 빠른가 | 기초와 아키텍처 · 그래프 노드 내부 구현 |
| L2/L3 실전 구성 | 데이터 경로 (L2~L4) · 오버레이 · 실전 시나리오 |
| 보안 · 방화벽 · VPN | 보안과 터널링 |
| HTTP/TLS/QUIC 서빙 | 호스트 스택 개요 · TLS · QUIC · HTTP/3 |
| 운영 · 성능 튜닝 | 운영 · 플랫폼 · 확장 · 디버깅 · 성능 측정 |
| 문제가 생기면 | 디버깅 · 성능 측정 |
| 용어가 낯설면 | 용어 요약 |
show runtime과 show trace 두 명령에 익숙해지는 것을 목표로 하시는 것을 권합니다. 이 둘만으로 VPP에서 벌어지는 일의 90%를 읽을 수 있습니다.