WireGuard · 2026-04-17

WireGuard 트래픽 셰이핑과 대역폭 관리 방법

WireGuard 환경에서 트래픽 셰이핑과 대역폭 관리를 단계별로 정리한 설명과 예제 모음

작성일 : 2026-04-17 ㆍ 작성자 : 관리자
post
목차

개요

WireGuard는 가볍고 빠른 VPN이다. 기본적으로 터널링과 암호화에 집중한다. 반면 품질 보장(QoS)은 별도 설정이 필요하다. 이 글은 WireGuard QoS 설정과 WireGuard 대역폭 관리, 트래픽 셰이핑 WireGuard 적용 방법을 초보자도 이해하기 쉽게 정리한다. 목적은 특정 사용자나 서비스에 대역폭을 할당하고, 혼잡 시 우선순위를 보장하는 것이다.

기본 개념

큐잉(Qdisc)과 클래스

리눅스에서 트래픽 제어는 tc(traffic control)를 통해 이뤄진다. root qdisc 아래에 클래스를 만들어 대역폭을 분배한다. 대표적인 방식은 HTB(Hierarchical Token Bucket)다. HTB는 상위 클래스 대역폭을 자식 클래스에 분배한다.

마킹과 필터

어떤 트래픽에 정책을 적용할지 표시하려면 패킷을 마킹한다. iptables나 nftables에서 fwmark 또는 DSCP 값을 설정한다. tc 필터는 이 마크를 보고 해당 클래스에 트래픽을 넣는다.

준비 사항

  • WireGuard 인터페이스명(예: wg0)을 확인
  • 서버와 클라이언트의 내부 IP 할당 정보 파악
  • tc, iproute2, iptables(또는 nftables) 설치

실전 예제: egress(송신) 대역폭 제한

서버가 클라이언트로 보내는 데이터(송신)를 제한하는 가장 기본적인 방법이다. 클라이언트 IP 10.0.0.2에 대해 최대 7mbit를 보장하고 전체 회선은 10mbit로 설정한다.

tc qdisc add dev wg0 root handle 1: htb default 20
# 루트 클래스
tc class add dev wg0 parent 1: classid 1:1 htb rate 10mbit
# 클라이언트 전용 클래스
tc class add dev wg0 parent 1:1 classid 1:10 htb rate 7mbit ceil 10mbit
# 기타 기본 클래스
tc class add dev wg0 parent 1:1 classid 1:20 htb rate 1mbit ceil 10mbit
# iptables로 마크 설정
iptables -t mangle -A PREROUTING -s 10.0.0.2 -j MARK --set-mark 10
# tc 필터로 마크에 매핑
tc filter add dev wg0 protocol ip parent 1:0 prio 1 handle 10 fw flowid 1:10

실전 예제: ingress(수신) 셰이핑

수신 트래픽은 인터페이스 상에서 바로 제한하기 어렵다. 이때 ifb(Intermediate Functional Block) 장치를 사용해 수신을 가상 egress로 리디렉션한 뒤 셰이핑한다.

# ifb 모듈 로드 및 장치 생성
modprobe ifb numifbs=1
ip link add ifb0 type ifb
ip link set ifb0 up
# wg0 수신 qdisc 추가 및 리디렉션
tc qdisc add dev wg0 ingress
tc filter add dev wg0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
# ifb0에서 HTB로 셰이핑
tc qdisc add dev ifb0 root handle 1: htb default 20
tc class add dev ifb0 parent 1: classid 1:1 htb rate 10mbit
tc class add dev ifb0 parent 1:1 classid 1:10 htb rate 7mbit ceil 10mbit
# 클라이언트 IP에 대해 필터 적용
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip src 10.0.0.2/32 flowid 1:10

고급: 서비스별 우선순위와 DSCP

비디오 스트리밍, VoIP처럼 민감한 서비스는 높은 우선순위를 부여한다. 패킷의 DSCP 값을 변경하면 네트워크 전반에서 우선 정책을 활용하기 쉽다. 예를 들어 iptables로 DSCP를 설정한 뒤 tc에서 우선 클래스로 매핑한다.

운영 시 고려사항

  • 숫자와 단위는 실제 회선 속도에 맞게 조정
  • 마킹 규칙은 중복되지 않도록 명확히 관리
  • 모니터링 도구로 실제 트래픽 패턴을 관찰하면서 정책을 튜닝
  • nftables를 사용하면 복잡한 규칙을 더 체계적으로 관리 가능

요약

WireGuard 자체에는 QoS 기능이 없다. 대신 tc, HTB, ifb, 그리고 마킹 도구(iptables/nftables)를 조합하면 세밀한 WireGuard 대역폭 관리가 가능하다. 위 절차를 따르면 기본적인 트래픽 셰이핑 WireGuard 환경에 적용할 수 있다. 운영 중에는 모니터링을 통해 정책을 지속적으로 보완하는 것이 중요하다.

WireGuard QoS 설정 WireGuard 대역폭 관리 트래픽 셰이핑 WireGuard HTB tc 명령어 ifb ingress iptables 마킹 nftables