WireGuard · 2026-02-08

PersistentKeepalive로 WireGuard NAT 문제 해결

WireGuard의 PersistentKeepalive 설정과 NAT 트래버설 문제를 초보자도 이해하기 쉽게 정리한 기술해설

작성일 : 2026-02-08 ㆍ 작성자 : 관리자
post
목차

개요

WireGuard는 단순하고 빠른 VPN이다. 그러나 NAT 환경에서는 피어간 연결이 끊기는 문제가 자주 발생한다. 이 글은 WireGuard PersistentKeepalive 설정을 중심으로 NAT 트래버설 문제 원인과 해결 절차를 설명한다. 처음 접하는 사람도 따라올 수 있도록 단계별로 정리한다.

NAT 트래버설과 연결 끊김의 원인

NAT 동작 방식

가정용 공유기나 ISP의 NAT는 내부 호스트와 외부 간 통신을 위해 포트 매핑을 생성한다. 이 매핑은 유효시간이 있어 일정 시간 통신이 없으면 제거된다. 결과적으로 피어 간 패킷이 라우팅되지 않아 연결이 끊기는 현상이 발생한다.

WireGuard 연결 유지 문제의 특징

  • 초기 연결은 성공하지만 일정 시간 이후 패킷이 오지 않음
  • re-establish 없이 통신이 되지 않음
  • 모바일 네트워크나 CGNAT 환경에서 더 자주 발생

PersistentKeepalive의 역할

PersistentKeepalive는 주기적으로 작은 UDP 패킷을 보내 NAT 매핑을 유지한다. 이로써 원격 피어가 언제든 도달할 수 있는 상태를 유지한다. 일반적으로 25초 간격이 권장된다. 너무 짧으면 불필요한 트래픽이 증가하고, 너무 길면 매핑이 만료될 수 있다.

설정의 원리

WireGuard 설정 파일의 Peer 섹션에 PersistentKeepalive = <값> 형태로 추가한다. 값은 초 단위다. 이 옵션은 패킷을 보내는 쪽에만 필요하다. 서버와 클라이언트 양쪽에 넣을 필요는 없다. NAT 뒤에 있는 쪽에 설정하면 충분한 경우가 많다.

실제 설정 예

아래 예시는 클라이언트가 NAT 뒤에 있고 서버가 고정 IP를 가진 경우의 Peer 설정 예시다. 코드는 WireGuard 구성 파일 형식이다.

[Interface]
PrivateKey = <클라이언트_개인키>
Address = 10.0.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <서버_공개키>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

위 설정은 클라이언트가 25초마다 서버로 빈 패킷을 보내 NAT 매핑을 갱신하게 한다. 서버 측은 별도 설정 없이 응답 가능 상태를 유지한다.

권장 값과 고려사항

  • 권장 간격: 15~30초. 대부분의 NAT 타임아웃을 커버한다.
  • 배터리 영향: 모바일 기기에서는 간격을 늘리거나 필요 시만 활성화한다.
  • 데이터 요금: 모바일 데이터 환경에서는 추가 트래픽을 고려한다.

문제 발생 시 점검 항목

1. 기본 연결 확인

  • wg show 명령으로 인터페이스 상태 확인
  • Endpoint와 PublicKey가 올바른지 확인

2. 네트워크 경로와 NAT 확인

  • 클라이언트가 CGNAT 뒤에 있는지 확인
  • 공유기에서 UDP 포트 필터링 여부 확인

3. 로깅과 패킷 캡처

tcpdump 또는 tshark로 패킷이 실제로 전송되는지 확인한다. PersistentKeepalive 설정 후 주기적으로 UDP 패킷이 나가는지 체크한다.

추가 NAT 트래버설 기법

PersistentKeepalive로 해결되지 않는 경우가 있다. 그럴 때 사용할 수 있는 보완 기법은 다음과 같다.

  • 포트 포워딩: 공유기에서 서버의 포트를 고정 포워딩
  • STUN/TURN 사용: 복잡한 NAT 환경에서 중계 서버 활용
  • 중앙 리레이 서버: 양측 모두 NAT인 경우 리레이 서버로 연결 유도

실전 점검 절차

  1. 서버의 WireGuard 상태 확인: wg show
  2. 클라이언트에서 PersistentKeepalive 적용 후 tcpdump로 패킷 확인
  3. NAT 장비 로그와 포트 매핑 상태 확인
  4. 필요 시 포워딩 또는 리레이 도입 검토

자주 묻는 질문

PersistentKeepalive를 양쪽에 둘 필요가 있는가?

일반적으로 NAT 뒤에 있는 쪽에만 설정하면 된다. 양쪽 모두 NAT라면 양쪽에 설정해도 무방하다.

간격을 0으로 설정하면 어떻게 되는가?

0은 비활성화를 의미한다. 즉 Keepalive가 전송되지 않아 NAT 매핑이 만료될 수 있다.

마무리

WireGuard PersistentKeepalive 설정은 NAT 환경에서 연결 유지 문제를 해결하는 가장 간단하고 효과적인 방법이다. 권장 간격을 적용하고 문제 발생 시 단계별 점검을 따르면 대부분의 NAT 트래버설 문제를 해소할 수 있다. 또한 네트워크 환경 특성에 따라 포트 포워딩이나 리레이 서버 도입을 고려하면 안정성이 크게 높아진다. 추가로 WireGuard NAT Traversal 해결과 WireGuard 연결 유지 문제 관련 로그를 주기적으로 확인하면 운영 안정성이 개선된다.

WireGuard PersistentKeepalive NAT Traversal VPN 연결 유지 WireGuard 설정 NAT 문제 해결 UDP 포트 포워딩 WireGuard 트러블슈팅