WireGuard 재접속 정책과 연결 유지 전략
WireGuard의 재접속 동작과 Keepalive 정책을 설명하고, 다양한 네트워크 환경에서 연결을 안정적으로 유지하기 위한 설정, 운영 절차 및 문제 진단 권장값
목차
개요
WireGuard는 단순하고 빠른 암호화 VPN이다. 하지만 네트워크 환경이 바뀌거나 휴대단말이 절전 모드로 들어가면 연결이 끊길 수 있다. 이 글에서는 WireGuard 재접속 설정과 WireGuard 연결 유지 전략, WireGuard Keepalive 정책을 중심으로 실제 운영에서 도움이 되는 설정과 점검 포인트를 정리한다.
WireGuard의 재접속 메커니즘
핸드셰이크와 타임아웃
WireGuard는 상태 기반이 아닌 stateless한 핸드셰이크 구조를 사용한다. 각 패킷은 최신 핸드셰이크 메시지로 인증되고, 서로 패킷을 주고받지 않으면 상대 측에서 키를 폐기할 수 있다. 따라서 '활성 통신'이 없으면 양 끝단 간의 연결 유효성이 사라질 위험이 있다.
네트워크 변화와 재연결 시그널
클라이언트의 IP가 변경되거나 NAT 테이블이 만료되면 상대측은 더 이상 패킷을 받을 수 없다. WireGuard는 다음 송신 시점에 자동으로 최신 엔드포인트 주소로 패킷을 보내며, 응답이 오면 새로운 경로로 연결을 복구한다. 즉, 별도의 연결 유지 프로세스가 없으면 유휴 상태에서 복구가 느릴 수 있다.
Keepalive와 PersistentKeepalive
PersistentKeepalive의 역할
PersistentKeepalive는 주기적으로 빈 패킷을 전송해 NAT 세션과 방화벽 상태를 유지하도록 돕는다. 특히 모바일 네트워크나 NAT 뒤의 서버에서 중요하다. 보통 20~25초 주기를 권장한다. 너무 짧으면 불필요한 트래픽이 늘고, 너무 길면 NAT 타임아웃으로 연결이 끊길 수 있다.
권장 설정 예
[Peer]
PublicKey = EXAMPLE_PUBLIC_KEY
Endpoint = vpn.example.com:51820
PersistentKeepalive = 25
위 설정은 모바일 기기나 NAT 환경에서 안정적인 재접속을 돕는다. PersistentKeepalive는 밀리초 단위가 아닌 초 단위로 설정한다.
연결 유지 전략
클라이언트별 전략
- 모바일: PersistentKeepalive 20~30초 권장. 배터리 고려 시 앱 정책과 조합.
- 서버: 일반적으로 Keepalive 불필요. 다만 서버가 NAT 뒤에 있으면 주기 전송 설정 고려.
- IoT/임베디드: 네트워크 안정성에 따라 15~60초 조정.
서버 측 구성
서버는 클라이언트의 최근 엔드포인트를 기반으로 응답한다. 서버에서 방화벽과 NAT 상태를 장기간 보존할 수 없다면 접속 유지는 어렵다. 시스템 모니터링과 로그를 통해 마지막 핸드셰이크 시간을 확인하고, 필요 시 알림을 설정한다.
자동 재연결과 스크립트
wg-quick을 이용한 복구
wg-quick은 인터페이스를 내리고 올리는 방식으로 재연결을 유도한다. 간단한 스크립트를 만들어 주기적 검사와 재시작을 자동화할 수 있다.
#!/bin/sh
IF=wg0
peer_last_handshake=$(wg show $IF latest-handshakes | awk '{print $2}')
# 날짜 비교 또는 빈 값 체크로 재시작 결정
if [ -z "$peer_last_handshake" ] || [ "$peer_last_handshake" = "0" ]; then
systemctl restart wg-quick@${IF}
fi
systemd 타이머 활용
짧은 주기로 체크하면 빠른 복구가 가능하다. 단 false positive로 불필요한 재시작이 많아지지 않도록 조건을 세밀히 설정한다.
문제 진단과 모니터링
핵심 점검 항목
- wg show로 최신 핸드셰이크 시간 확인
- iptables/nftables에서 ESTABLISHED 상태와 NAT 테이블 지속성 점검
- 클라이언트 기기의 전원 관리 정책(절전 모드, 배터리 최적화) 확인
- 네트워크 경로 변경 시 엔드포인트 갱신 여부 확인
로그와 알림
핸드셰이크가 일정 시간 내 발생하지 않으면 경보를 보내도록 설정한다. Prometheus와 exporter를 사용하면 핸드셰이크 타임스탬프를 수집해 시각화할 수 있다.
실무 권장값 요약
- 모바일 클라이언트: PersistentKeepalive 20~30초
- 서버(공개 엔드포인트): Keepalive 미설정 또는 긴 주기
- 임베디드 장치: 장치 특성에 따라 15~60초 조정
- 모니터링: wg show, 로그 수집, 알림 설정
마무리
WireGuard 재접속 설정은 네트워크 특성과 장치 특성에 따라 달라진다. PersistentKeepalive와 자동 복구 스크립트, 모니터링을 조합하면 연결 유지 효율을 크게 높일 수 있다. 제시한 권장값을 출발점으로 환경에 맞춰 조정하면 안정적인 WireGuard 연결 운영에 도움이 된다.