개요
개발 서버에 외부에서 안전하게 접속하기 위해 IKEv2 VPN을 구성했다. 서버 측은 hwdsl2/setup-ipsec-vpn 프로젝트를 사용하여 Docker로 운영했다. 이 글에서는 Windows 클라이언트 설정 과정과, 많은 사람들이 겪는 “Policy Match Error” 문제의 해결 방법을 다룬다.
IKEv2를 선택한 이유
VPN 프로토콜 선택지는 여러 가지가 있지만, IKEv2를 선택한 이유는 다음과 같다.
| 프로토콜 | 장점 | 단점 |
|---|---|---|
| OpenVPN | 유연한 설정, 방화벽 우회 용이 | 별도 클라이언트 필요, 설정 복잡 |
| WireGuard | 가볍고 빠름 | Windows 기본 지원 없음 |
| IKEv2 | Windows/macOS/iOS 기본 지원, 빠른 재연결 | 일부 방화벽에서 차단 가능 |
| L2TP/IPsec | 넓은 호환성 | 속도 느림, NAT 환경 문제 |
핵심은 OS 기본 지원이다. 별도 클라이언트 소프트웨어를 설치하지 않아도 Windows 설정에서 바로 VPN 연결을 추가할 수 있다. 팀원들에게 .p12 인증서 파일 하나만 전달하면 되므로 온보딩이 간단하다.
클라이언트 설정 절차
사전 준비
- Windows 8 이상 (10/11 권장)
- VPN 서버에서 생성한
.p12클라이언트 인증서 파일 - 관리자 권한
자동 설정 (권장)
hwdsl2 프로젝트에서 제공하는 헬퍼 스크립트를 사용하면 인증서 가져오기부터 VPN 연결 생성까지 자동으로 처리된다.
- ikev2_config_import.cmd 다운로드
.p12파일을 스크립트와 같은 폴더에 배치- 스크립트를 우클릭 → 속성 → 하단의 “차단 해제” 체크 → 확인
- 스크립트를 우클릭 → “관리자 권한으로 실행”
- 프롬프트에 따라 입력:
- VPN client name:
.p12파일명에서 자동 추출됨 (Enter로 수락) - VPN server address: VPN 서버의 IP 또는 도메인 (서버 설정과 정확히 일치해야 함)
- IKEv2 connection name: Windows에 표시될 VPN 이름
- VPN client name:
주의: VPN server address는 서버에서 IKEv2를 설정할 때 지정한 값과 정확히 일치해야 한다. IP로 설정했으면 IP를, 도메인으로 설정했으면 도메인을 입력해야 한다. 불일치하면 인증서 검증에 실패한다.
수동 설정
자동 스크립트를 사용할 수 없는 환경이라면, 수동으로도 가능하다.
1단계: 인증서 가져오기
# .p12 파일을 로컬 머신 인증서 저장소로 가져오기
certutil -importpfx -f "C:\path\to\client.p12"
비밀번호 입력 프롬프트가 나타나면 .p12 생성 시 설정한 비밀번호를 입력한다. 인증서는 “로컬 컴퓨터 > 개인” 저장소에 설치된다.
2단계: VPN 연결 추가
Windows 설정 → 네트워크 및 인터넷 → VPN → VPN 연결 추가:
- VPN 공급자: Windows(기본 제공)
- 연결 이름: 원하는 이름
- 서버 이름 또는 주소: VPN 서버 주소
- VPN 종류: IKEv2
- 로그인 정보 유형: 인증서
3단계: 연결 테스트
시스템 트레이의 네트워크 아이콘에서 생성한 VPN 연결을 선택하고 “연결”을 클릭한다.
Policy Match Error 해결
증상
VPN 연결 시 다음과 같은 오류가 발생한다.
IKE 인증 자격 증명을 허용할 수 없습니다.
또는 이벤트 뷰어에서 다음과 같은 로그가 기록된다:
Policy match error
원인
이 오류는 Windows 클라이언트와 VPN 서버 간의 암호화 알고리즘 불일치 때문에 발생한다. Windows는 기본적으로 IKEv2에서 약한(legacy) 암호화 설정을 사용하는데, 보안이 강화된 VPN 서버는 이를 거부한다.
구체적으로, VPN 서버가 AES-256 + DH Group 2048bit 이상을 요구하는 반면, Windows 기본값은 이보다 낮은 수준의 암호화를 제안하여 협상(negotiation)에 실패하는 것이다.
해결 방법
레지스트리에 강화된 암호화를 활성화하는 키를 추가하면 된다.
방법 1: .reg 파일 사용
Enable_Stronger_Ciphers_for_IKEv2_on_Windows.reg 파일을 다운로드하여 더블클릭으로 적용한다.
방법 2: 명령 프롬프트에서 직접 실행
관리자 권한 명령 프롬프트에서 다음을 실행한다:
REG ADD HKLM\SYSTEM\CurrentControlSet\Services\RasMan\Parameters /v NegotiateDH2048_AES256 /t REG_DWORD /d 0x1 /f
이 레지스트리 키가 하는 일은 다음과 같다:
NegotiateDH2048_AES256=1: Windows IKEv2 클라이언트가 DH Group 14 (2048-bit) + AES-256 조합을 협상에 포함하도록 설정
적용 후 반드시 PC를 재시작해야 한다. 레지스트리 변경이 RasMan(Remote Access Connection Manager) 서비스에 반영되려면 재부팅이 필요하다.
확인
재부팅 후 VPN 연결을 다시 시도한다. 정상적으로 연결되면 ipconfig로 VPN 인터페이스에 할당된 IP를 확인할 수 있다:
ipconfig | findstr "10.10"
VPN 서버의 내부 네트워크 대역(예: 10.10.x.x)의 IP가 표시되면 성공이다.
추가 팁
자동 재연결
IKEv2의 장점 중 하나는 MOBIKE(Mobility and Multihoming Protocol) 지원이다. 네트워크가 바뀌어도(Wi-Fi → LTE, 네트워크 전환 등) 자동으로 재연결된다. 노트북을 들고 이동하면서 작업하는 환경에서 유용하다.
Split Tunneling
기본 설정에서는 모든 트래픽이 VPN을 통과한다. VPN 서버 측 네트워크만 VPN으로 라우팅하고 나머지는 직접 연결하려면, Windows VPN 연결의 고급 TCP/IP 설정에서 “원격 네트워크에 기본 게이트웨이 사용”을 해제한다.
연결 상태 확인
# VPN 연결 상태 확인
Get-VpnConnection | Select-Object Name, ServerAddress, ConnectionStatus
# 라우팅 테이블에서 VPN 경로 확인
route print | findstr "10.10"
참고 자료
- hwdsl2/setup-ipsec-vpn — IPsec VPN 서버 설치 스크립트