4 min read

OPNsense로 NordVPN 연결

NordVPN은 WireGuard 프로토콜을 기반으로 NordLynx를 제공합니다.

즉, NordLynx를 통해 WireGuard를 사용할 수 있으며, OPNsense 라우터와 결합하면 특정 IP 또는 사이트 접속 시 자동으로 VPN을 사용하는 환경을 구성할 수 있습니다.

이 글에서는 NordVPN API로 Private Key 얻기부터 OPNsense WireGuard 설정, 특정 사이트 VPN 자동 연결까지 단계별로 설명합니다.

1. 준비물

  1. OPNsense 라우터 (WireGuard 플러그인 설치 필요)
  2. NordVPN 계정
  3. Shell 환경 (Linux, macOS, WSL 등)
  4. jq (JSON 파싱 도구, Linux/macOS 기본 설치 가능)

2. NordVPN Private Key 발급

  1. Nord Account Access Token 페이지

아래 사이트에 들어가 access-token을 얻습니다. 저같은 경우는 만료없음을 선택했습니다.

https://my.nordaccount.com/dashboard/nordvpn/access-tokens/

엑세스 토큰을 얻었다면 아래의 쉘 명령어에서 accessToken을 변경하여 private key를 얻습니다.

#!/bin/bash

# Access token 설정
accessToken="<copy-your-token>"

echo "Getting the Private key..."

# NordVPN API 요청 (curl 사용)
response=$(curl -s -u "token:${accessToken}" "https://api.nordvpn.com/v1/users/services/credentials")

# private key 추출 (jq 사용)
privateKey=$(echo "$response" | jq -r '.nordlynx_private_key')

# 결과 출력
echo "Private Key:"
echo "$privateKey"
  • 출력된 Private Key는 안전하게 보관합니다.
  • 이 키는 OPNsense WireGuard 설정에서 필요합니다.

3. NordVPN 서버 구성 파일 다운로드

  1. NordVPN 구성 파일 제공 사이트
  2. 원하는 서버 선택 (예: 일본 jp429)
  3. 다운로드 후 파일 내용 확인:

그 후 https://nord-configs.selfhoster.nl/ 에 들어가 원하는 프로필을 다운받으면 됩니다.

제가 받은것 일본 429서버이며 아래와 같습니다.

[Interface]
PrivateKey=
Address=10.5.0.2/16
DNS=103.86.96.100

[Peer]
PublicKey=SAio0Z0suFlRfmydzPdcn6MamqS7Mq4pSOm2YmJkLSs=
AllowedIPs=0.0.0.0/0,::/0
Endpoint=jp429.nordvpn.com:51820
PersistentKeepalive=25

이 값들은 추후 opnsense에 입력을 해줄겁니다.

4-2. WireGuard 인터페이스 추가

  1. VPN → WireGuard → Local 클릭 → + Add
  2. Interface 설정:
    • Tunnel Address: 10.5.0.2/16 (프로필 InterFace의 Address)
    • Private Key: NordVPN API로 발급받은 Private Key

4-3. Peer 설정 추가

  1. VPN → WireGuard → Peers 클릭 → + Add
  2. NordVPN Peer 정보 입력:
    • PublicKey: SAio0Z0suFlRfmydzPdcn6MamqS7Mq4pSOm2YmJkLSs=
    • AllowedIPs: 0.0.0.0/0,::/0
    • Endpoint: jp429.nordvpn.com:51820
    • PersistentKeepalive: 25

4-4. 인터페이스 할당

  1. Interfaces → Assignments → WireGuard 인스턴스 선택 → +Add
  2. 새 인터페이스로 추가 → 활성화

4-5. 게이트웨이 설정

  1. System → Gateways → Configuration+Add
  2. 인터페이스로 방금 생성한 WireGuard 인터페이스 선택

이로써 기본적인 WireGuard의 기본적인건 끝났습니다.

이제 구글이나 특정 사이트에 접속하면 VPN 접속하게 만들어야합니다.

5. 특정 사이트 접속 시 VPN 사용

5-1. 사이트 IP 범위 Aliases 생성

  1. Firewall → Aliases → Add
  2. 이름 설정: GoogleIPs
  3. Content type: URL
  4. Content: https://www.gstatic.com/ipranges/goog.json
  5. Path expression: .prefixes[] | .ipv4Prefix // .ipv6Prefix
    → 이 방법으로 구글 IP 자동 업데이트 가능
Content : https://www.gstatic.com/ipranges/goog.json
Path expression : .prefixes[] | .ipv4Prefix // .ipv6Prefix

5-2. LAN 방화벽 규칙 설정

  1. Firewall → Rules → LAN
  2. 새 규칙 추가:
    • Source: LAN subnet
    • Destination: AliasGoogleIPs
    • Gateway: 방금 만든 WireGuard 게이트웨이
  3. 규칙 위치: 일반적으로 기존 LAN allow 위쪽에 배치

이제 LAN 내부에서 구글 서비스 접속 시 NordVPN으로 자동 연결됩니다.

개인적으로 NordVPN을 사용 중인데, 지금 샵백에서 캐시백 이벤트가 진행되고 있어 조금이나마 비용을 절약할 수 있습니다.
관심 있으신 분은 확인해 보세요: NordVPN 이벤트 페이지