WireGuard · 2026-05-10

WireGuard MTU와 Fragmentation 문제 디버깅 방법

WireGuard 환경에서 MTU와 패킷 분할 관련 문제의 원인 분석, 단계별 진단 절차, 주요 명령어와 실무 적용 가능한 해결 전략을 정리한 기술 자료

작성일 : 2026-05-10 ㆍ 작성자 : 관리자
post
목차

소개

WireGuard를 운영하면서 패킷 손실이나 성능 저하가 발생하는 경우, MTU와 fragmentation 이슈가 흔한 원인이다. 본문은 WireGuard MTU 문제 해결과 WireGuard 패킷 분할 디버그를 위한 기본 개념, 진단 절차, 실무 적용 방안을 단계별로 정리한다. 이 내용은 처음 접하는 사람도 이해하기 쉽도록 구성되었다.

기본 개념

MTU와 경로 MTU

MTU(Maximum Transmission Unit)는 한 번에 전송 가능한 최대 프레임 크기다. 경로 MTU(Path MTU)는 출발지에서 목적지까지의 경로에서 허용되는 최소 MTU를 의미한다. 경로 상에 작은 MTU가 있으면 그 값에 맞춰 패킷이 분할되거나 전송이 차단될 수 있다.

WireGuard와 캡슐화 오버헤드

WireGuard는 UDP로 캡슐화된다. 이로 인해 원래 IP 패킷보다 더 큰 크기의 패킷이 전송된다. 따라서 WireGuard 인터페이스의 MTU를 적절히 설정하지 않으면 외부 경로 MTU보다 큰 패킷이 생성되어 fragmentation 또는 ICMP "fragmentation needed" 상황이 발생한다.

증상

  • 대용량 패킷 전송 시 연결 지연 또는 끊김
  • 특정 서비스(예: HTTP 업로드, VPN으로 연결된 원격 서비스)에서 패킷 손실
  • ping에서 일정 크기 이상 패킷이 전송되지 않음

진단 절차

1. 인터페이스와 MTU 값 확인

먼저 로컬 및 원격 인터페이스의 MTU를 확인한다. WireGuard 인터페이스의 MTU는 필요시 조정 가능하다.

ip link show dev wg0
ip addr show dev wg0
ip link show

2. 경로 MTU 확인 (tracepath)

tracepath는 중간 MTU를 출력하여 경로상의 제한을 확인하는 데 유용하다.

tracepath 198.51.100.10

3. PMTU 테스트 (ping)

ICMP를 이용해 PMTU를 직접 확인한다. Linux ping의 -M do 옵션으로 분할 금지를 설정하고, -s로 페이로드 크기를 지정한다. IP 헤더(20바이트)와 ICMP 헤더(8바이트)를 고려해서 크기 지정이 필요하다.

ping -M do -s 1472 198.51.100.10
# 1472는 일반적으로 1500 MTU에서 ICMP 헤더를 뺀 값 예시

4. 패킷 캡처로 캡슐화 확인

tcpdump로 WireGuard 인터페이스와 외부 인터페이스 양쪽을 캡처하면 외부 UDP 패킷의 크기와 DF(Do Not Fragment) 플래그를 확인할 수 있다.

tcpdump -i wg0 -n -vv
tcpdump -i eth0 host 198.51.100.10 and udp

5. WireGuard 설정 확인

wg show로 키와 피어 상태를 확인하고, 필요하면 인터페이스 MTU를 설정한다.

wg show
ip link set dev wg0 mtu 1420

6. 방화벽과 ICMP

경로 MTU 탐색에는 ICMP "fragmentation needed" 메시지가 필요하다. 방화벽에서 해당 ICMP 유형을 차단하면 PMTU가 정상 동작하지 않아 문제가 발생한다. 방화벽 규칙에서 ICMP 타입 3 코드 4를 허용하는지 확인한다.

7. TCP MSS 클램프

TCP 트래픽에 한해 MSS를 조정하면 캡슐화로 인한 MTU 문제를 우회할 수 있다. iptables 또는 nftables를 사용한 MSS 클램핑이 일반적인 해결책이다.

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

해결 전략

  • WireGuard 인터페이스 MTU를 경로 MTU에 맞춰 조정한다. 일반적으로 1500 MTU 환경에서 1420 정도로 설정하는 사례가 많다. 다만 경로에 따라 값은 달라진다.
  • 네트워크 경로 상의 방화벽에서 ICMP "fragmentation needed" 메시지 허용을 확인한다. PMTU 탐색이 정상 동작하면 조정 부담이 줄어든다.
  • TCP 서비스에는 MSS 클램프를 적용하여 세션 생성 시 적절한 MSS가 협상되도록 한다.
  • UDP 기반 애플리케이션은 애플리케이션 레벨에서 MTU에 맞는 패킷 크기 제어가 필요할 수 있다.

실무 예시

일반적인 문제 해결 흐름은 다음과 같다. 먼저 tracepath로 경로 MTU를 확인하고, ping으로 PMTU를 검증한다. 그 다음 WireGuard 인터페이스 MTU를 적절히 조정하고, 필요 시 MSS 클램프를 적용한다. 마지막으로 tcpdump로 캡슐화된 패킷 크기와 ICMP 응답을 확인하면 문제 원인 규명이 완료된다.

요약

WireGuard fragmentation 문제는 대부분 MTU 불일치, 캡슐화 오버헤드, 또는 ICMP 차단으로 발생한다. 단계별 진단(인터페이스 확인, tracepath, ping, tcpdump)과 조정(인터페이스 MTU, MSS 클램프, 방화벽 정책 수정)을 통해 문제를 해결할 수 있다. 필요 시 각 단계에서 수집한 로그와 패킷 캡처를 근거로 추가 조치를 검토한다.

WireGuard WireGuard MTU 문제 해결 WireGuard 패킷 분할 디버그 WireGuard fragmentation 해결 MTU fragmentation 네트워크 디버깅 TCP MSS 클램핑