WireGuard로 멀티 사이트 자동 복구 VPN 구성
여러 지사와 데이터센터를 WireGuard로 연결하면서 장애 발생 시 자동으로 복구되도록 구성하는 원리와 실무 설정 예제, 운영 시 고려사항을 정리한 기술자료
목차
개요
멀티 사이트 환경에서 VPN 연결 문제는 업무 중단으로 이어진다. WireGuard는 경량성과 성능으로 널리 쓰인다. 다만 장애 발생 때 자동 복구가 없다면 수동 대응이 필요하다. 본문은 WireGuard 자동 복구 구성의 개념, 아키텍처, 구현 예제와 운영 검증 절차를 초보자도 이해하기 쉽게 설명한다.
필요 조건 및 용어
필수 요소
- 각 사이트에 WireGuard 설치된 리눅스 서버
- 공인 IP 또는 안정적인 역방향 터널(포트 포워딩) 환경
- 간단한 헬스 체크 스크립트와 systemd 서비스 사용 권장
주요 용어
- Peer: WireGuard 터널의 한쪽 끝
- Endpoint: 원격 Peer의 IP:포트 정보
- Keepalive: NAT 트래버설을 위한 지속 신호
- Failover: 대체 경로로 전환하는 동작
아키텍처 개념
멀티 사이트 연결은 여러 Peer들을 메시나 스타 토폴로 구성할 수 있다. 자동 복구 목적은 다음 두 가지다.
- 로컬 인터페이스 이상 시 서비스 재시작
- 특정 Peer 장애 시 대체 Peer로 경로 전환
핵심은 상태 감시(헬스 체크)와 자동화 스크립트다. 헬스 체크는 단순 ICMP, TCP 포트 확인, 혹은 실제 경로를 통한 패킷 전송으로 구현할 수 있다. 감지 시 WireGuard 인터페이스를 재시작하거나, 라우팅 우선순위를 수정해 트래픽을 다른 Peer로 유도한다.
구성 순서
- 기본 WireGuard 인터페이스 생성 및 Peer 설정
- 헬스 체크 스크립트 작성
- systemd 서비스 또는 cron으로 주기 실행 및 이벤트 처리
- 라우트 우선순위 관리(Policy-based routing 필요 시 별도 구성)
- 테스트와 모니터링 설정
예제 설정
1) 기본 wg0 설정 예
[Interface]
PrivateKey =
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey =
Endpoint = 203.0.113.10:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
위 예제는 단일 Peer 연결이다. 멀티 사이트라면 여러 Peer 블록을 추가하거나 별도 인터페이스로 분리한다.
2) 간단 헬스 체크 스크립트
#!/bin/bash
# wg-healthcheck.sh
WG_IF=wg0
TARGET=8.8.8.8
PING_COUNT=3
if ping -c ${PING_COUNT} -I ${WG_IF} ${TARGET} >/dev/null 2>&1; then
exit 0
else
logger -t wg-health "ping failed on ${WG_IF}, restarting"
/usr/bin/systemctl restart wg-quick@${WG_IF}
sleep 5
fi
이 스크립트는 인터페이스를 통해 외부로 핑이 가능한지 확인한다. 실패하면 wg-quick 서비스를 재시작해 인터페이스를 재생성한다.
3) Peer 장애 시 라우팅 전환 예
복수 Peer를 사용할 때는 우선순위가 낮은 라우트를 준비해 두고, 주 Peer 장애 시 우선순위를 변경한다. 예를 들어 테이블을 분리해 정책 라우팅을 적용한다.
# 우선순위 테이블 추가 예
ip rule add from 10.0.0.1 table 100
ip route add default via 10.0.0.2 dev wg0 table 100
# 장애 시 다른 Peer로 전환
ip route replace default via 10.0.0.3 dev wg1 table 100
운영과 모니터링
운영 중에는 다음 항목을 점검한다.
- PersistentKeepalive 값으로 NAT 유지 여부
- 로그: systemd와 logger로 재시작 횟수와 실패 원인 기록
- 모니터링: Prometheus exporter 또는 간단한 상태 페이지로 연결 상태 수집
특히 자동 복구는 과도한 재시작 루프를 일으킬 수 있다. 재시작 횟수에 대한 임계값을 두고, 반복 실패 시 알람을 발생시키는 정책을 권장한다.
테스트 절차
- 정상 상태에서 라우트와 핑 통과 확인
- 주 Peer의 엔드포인트 차단(네트워크 차단)으로 장애 유도
- 헬스 체크가 실패하는지 확인
- 자동 복구 동작(인터페이스 재시작 또는 라우팅 전환) 확인
- 서비스 복구 후 정상 복귀 여부 확인
문제 발생 시 점검 포인트
- 키와 엔드포인트 정보 불일치 여부
- NAT 경로가 변경되어 Keepalive가 차단되는 경우
- 라우팅 테이블 충돌으로 트래픽이 잘못 전달되는 경우
- 헬스 체크 대상이 올바른지(내부 vs 외부) 확인
정리
WireGuard 자동 복구 구성은 헬스 체크와 자동화가 핵심이다. 단순 인터페이스 재시작부터 라우팅 전환까지 여러 방법을 조합하면 멀티 사이트 환경에서 높은 가용성을 확보할 수 있다. 구현 시에는 재시작 루프 방지와 로그 기반 알람 체계를 함께 설계하는 것이 바람직하다.