[WireGuard] 7. WireGuard를 사용할 때의 주의사항과 팁
VPN 이용시 주의할 점
7. WireGuard를 사용할 때의 주의사항과 팁
WireGuard의 기본 구성과
AllowedIPs, Split Tunnel, Full Tunnel까지 살펴보았다. 이번 글에서는 여러 Peer를 운영하면서 주의해야 할 점과 팁들을 정리해 보았다.
1. Peer 관리 시 주의사항
1.1 Peer마다 키와 VPN 주소를 분리한다
여러 장치를 운영할 때는 기본적으로 하나의 Peer마다 별도의 키 쌍과 VPN 주소를 부여하는 것이 좋다. 예를 들어 서버 역할 Peer에서 여러 장치를 관리한다면 다음과 같이 구분할 수 있다.
1
2
3
4
5
6
7
8
9
[Peer]
# Laptop Peer
PublicKey = LAPTOP_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
[Peer]
# Mobile Peer
PublicKey = MOBILE_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32
여러 장치가 하나의 Private Key를 공유하면 한 장치를 분실하거나 폐기했을 때 다른 장치의 키까지 함께 교체해야 한다. 반대로 Peer마다 별도의 키를 사용하면 문제가 발생한 Peer만 제거하면 된다.
VPN 주소와 AllowedIPs 역시 Peer 간 충돌이 발생하지 않도록 관리해야 한다. Peer 수가 많아진다면 최소한 다음 정도의 정보를 별도로 관리해두는 것이 좋다.
| 항목 | 예시 |
|---|---|
| Peer | Work Laptop |
| Public Key | ... |
| VPN 주소 | 10.0.0.2/32 |
| 용도 | 원격 개발 |
| 상태 | 사용 중 |
1.2 Peer를 폐기할 때는 런타임과 설정 파일을 모두 확인한다
아래의 명령어로 실행 중인 WireGuard 인터페이스에서 Peer를 즉시 제거할 수 있다.
1
wg set wg0 peer PEER_PUBLIC_KEY remove
하지만 wg set은 현재 실행 중인 상태만 변경하는 것이므로, Peer를 완전히 폐기하려면 런타임에서 제거한 뒤 wg0.conf에서도 해당 [Peer]를 삭제해야 한다.
장치 분실이나 Private Key, WireGuard 설정 파일, QR 코드가 외부에 노출된 경우에는 기존 키를 키를 폐기한 뒤 새로운 키 쌍을 발급하는 것이 좋다.
1.3 QR 코드도 Private Key와 동일하게 취급한다
QR 코드로 WireGuard 설정을 가져올 수 있는데, 모바일 Peer에서 설정값을 등록할 때 특히나 편리하다.
1
qrencode -t ansiutf8 < mobile.conf
하지만 일반적인 WireGuard 설정 QR에는 Private Key가 포함된다. 따라서 QR 코드는 단순한 접속 정보가 아니라 해당 Peer의 인증 정보를 포함한 비밀 정보다.
QR 코드 화면을 캡처해 장기간 보관하거나, 메신저·이메일 등으로 전달하거나, 생성한 QR 이미지 파일을 그대로 남겨두는 것은 피하는 것이 좋으며, 가능하면 필요한 순간에만 QR 코드를 표시하고 장치 등록이 끝나면 제거하는 것을 권장한다. QR 코드가 외부에 노출되었다면 이미지 삭제만으로 끝내지 말고 해당 Peer의 키도 교체하는 것이 안전하다.
2. 운영 중 설정 변경 시 주의사항
2.1 wg set과 영구 설정을 구분한다
Peer 하나를 추가하거나 제거하기 위해 WireGuard 인터페이스 전체를 다시 구성할 필요는 없다. 실행 중인 인터페이스에는 다음과 같이 Peer를 추가할 수 있다.
1
wg set wg0 peer PEER_PUBLIC_KEY allowed-ips 10.0.0.5/32
제거할 때는 다음과 같이 한다.
1
wg set wg0 peer PEER_PUBLIC_KEY remove
wg set은 다른 Peer의 연결을 유지한 상태에서 설정을 변경할 수 있다는 장점이 있지만, 현재 실행 중인 WireGuard 인터페이스의 런타임 설정만 변경한다.
따라서 영구적으로 유지할 설정이라면 /etc/wireguard/wg0.conf에도 동일한 내용을 반영해야 한다.
2.2 NAT 환경에서는 필요할 때 PersistentKeepalive를 사용한다
모바일 Peer나 공유기 뒤의 Peer는 NAT의 UDP 매핑이 일정 시간 후 사라질 수 있다. 이 때문에 한동안 통신하지 않은 뒤 상대 Peer에서 먼저 접근하려고 하면 통신이 되지 않는 경우가 있다. 이러한 환경에서는 NAT 뒤에 있는 Peer에서 PersistentKeepalive 설정을 사용할 수 있다.
1
PersistentKeepalive = 25
주로 LTE·5G 모바일 환경, 공유기나 공용 Wi-Fi 뒤의 Peer, 상대 Peer가 먼저 통신을 시작해야 하는 환경에서 유용하다. 다만 모든 Peer에 기본적으로 설정할 필요는 없다.
3. 운영 상태 확인과 장애 대응
3.1 wg show
운영 중 문제가 발생했을 때 가장 먼저 확인할 명령은 wg show 이다. 이 명령어는 현재 WireGuard의 설정 현황을 보여준다. 주요 항목은 아래와 같다.
| 항목 | 확인 내용 |
|---|---|
endpoint |
상대 Peer의 현재 외부 주소와 포트 |
allowed ips |
해당 Peer에 연결된 주소와 네트워크 |
latest handshake |
최근 Handshake 시점 |
transfer |
실제 송수신량 |
3.2 Handshake 성공과 실제 통신 성공을 구분한다
latest handshake가 최근 시점으로 일어난다고 해서 VPN을 통한 모든 통신이 정상이라는 의미로 받아들이면 안된다. Handshake가 정상이라는 것은 기본적으로 Peer 간에 WireGuard 암호화 세션이 성립했다는 의미다.
하지만 이후의 VPN 내부 라우팅, 다른 네트워크 접근, IP Forwarding, NAT, DNS까지 정상이라는 의미는 아니다. 예를 들어 다음과 같은 상황이 있을 수도 있다.
1
2
3
4
Handshake 정상
VPN 내부 통신 정상
원격 LAN 접근 실패
인터넷 접근 실패
따라서 Handshake가 정상인데 원하는 목적지에 접근할 수 없다면 WireGuard 연결 자체보다 그 이후의 라우팅과 패킷 전달 경로를 확인해야 한다.
3.3 장애는 통신 경로를 따라 범위를 좁힌다
WireGuard 장애를 확인할 때는 설정 전체를 한꺼번에 살펴보기보다 다음 순서로 범위를 좁히는 편이 효율적이다.
1
인터페이스 → Handshake → VPN 내부 통신 → 목적지 라우팅 → Forwarding/NAT → DNS
Handshake가 없다면 우선 Endpoint, Public Key, UDP 포트, 방화벽 등을 확인한다.
Handshake는 정상인데 VPN 내부 주소로 통신할 수 없다면 AllowedIPs, VPN 주소 중복, 라우팅, 호스트 방화벽 등을 확인한다.
VPN 내부 통신은 되지만 원격 LAN이나 인터넷에만 접근할 수 없다면 WireGuard 자체보다는 Forwarding, NAT, 반환 경로 등의 문제일 가능성이 높다.
IP 주소로는 인터넷 통신이 되지만 도메인만 접속되지 않는다면 DNS를 확인한다.
마치며
특히 다음 사항은 기억해두자.
- Peer마다 별도의 키와 VPN 주소를 사용한다.
- Peer를 폐기할 때는 런타임과
wg0.conf에서 모두 제거한다. wg set으로 변경한 내용이 필요한 경우wg0.conf에도 반영한다.- QR 코드와 설정 파일은 Private Key가 포함된 비밀 정보로 취급한다.
- NAT 환경에서는 필요한 Peer에만
PersistentKeepalive를 사용한다. - Handshake 성공과 실제 목적지까지의 통신 성공은 다르다는 점을 명심한다.
// reading compass
이 글과 이어지는 경로
시리즈, 카테고리, 태그 겹침, 최신도를 점수화해 가까운 글일수록 중심에 배치합니다.
댓글 남기기