이 문서에서 구축하는 구성
⇄
⇄
- 프로토콜: WireGuard / UDP
- 용도: 원격 액세스
- 방침: split tunnel
- 클라이언트: 공식 WireGuard for Windows
Overview
개요 및 전제 #
OPNsense에서 WireGuard는 Instance(서버 측 가상 인터페이스 설정)와
Peer(접속을 허용할 상대)를 조합하여 구성합니다. OPNsense 공식에서는 터널용 주소를
물리적으로 별도의 인터페이스가 존재하는 것처럼 독립된 네트워크로 설계하는 것을 권장합니다.[1][2]
이 문서의 목표 #
Windows PC에서 WireGuard로 OPNsense에 접속하여, LAN 내 NAS·RDP·SSH·업무 시스템에 안전하게 액세스할 수 있는 상태를 만듭니다.
전제로 하는 접속 방식 #
클라이언트의 인터넷 전체를 VPN으로 보내지 않고, LAN 방향 통신만 터널로 보내는 split tunnel을 채택합니다.
다만, Instance / Peer / General / Firewall이라는 구성 개념은 공통입니다.
- OPNsense 관리 UI에 로그인할 수 있을 것
- WAN 측에서 UDP 51820을 사용할 수 있을 것
- 상위 라우터 하위에 OPNsense가 있는 경우, UDP 51820을 OPNsense WAN으로 포워딩할 수 있을 것
- 접속 대상 LAN 세그먼트와 중복되지 않는 WireGuard 전용 네트워크를 준비할 수 있을 것
- Windows 클라이언트에 공식 WireGuard for Windows를 도입할 수 있을 것
Sample Design
샘플 구성 #
문서 내 설명은 다음 예시로 통일합니다. 수치는 어디까지나 샘플이므로, 실제 환경에서는 자사의 주소 체계로 변경하십시오.
| 항목 | 값 | 의미 |
|---|---|---|
| LAN | 192.168.10.0/24 | 사내·자택 측 내부 네트워크 |
| WireGuard 네트워크 | 10.10.10.0/24 | VPN 터널 전용 세그먼트 |
| OPNsense 터널 IP | 10.10.10.1/24 | Instance에 설정할 주소 |
| Windows 클라이언트 IP | 10.10.10.2/32 | Peer에 할당할 고유 주소 |
| 공개 호스트명 | vpn.example.jp | WAN의 글로벌 IP 또는 DDNS명 |
| Listen Port | 51820/UDP | WireGuard 대기 포트 |
10.10.10.2/32
10.10.10.0/24
10.10.10.1/24
192.168.10.0/24
10.10.10.1/24와 같이 네트워크를 포함한 CIDR로 설정하고, 서버 측 Instance에/32나 /128을 사용하지 않도록 안내하고 있습니다.[1]Step 1
OPNsense 측에서 WireGuard Instance 생성하기 #
| 항목 | 설정 예시 | 보충 설명 |
|---|---|---|
| Enabled | Checked | 활성화 |
| Name | HomeWireGuard | 임의의 식별명 |
| Public Key / Private Key | 자동 생성 | 톱니바퀴 아이콘으로 새로 생성 |
| Listen Port | 51820 | 다른 서비스와 중복되지 않는 UDP 포트 |
| MTU | 1420 | PPPoE의 경우 1412 검토[1] |
| Tunnel Address | 10.10.10.1/24 | WireGuard 전용 세그먼트 |
| Peers | 공란 | 먼저 Peer를 생성하므로 이 시점에서는 미지정 |
| DNS Server | 공란 | Advanced mode에서도 기본적으로 공란. 설정하면 OPNsense 자체의 DNS 설정을 덮어쓰게 됩니다.[1] |
저장 후 다시 Instance를 열어 Public Key를 메모해 둡니다.
이 공개 키는 나중에 Windows 클라이언트 설정에 입력할 서버 측 공개 키입니다.[1]
Step 2
클라이언트용 Peer 생성하기 #
OPNsense의 현행 문서에서는 여러 클라이언트를 배포하는 용도로
Peer generator 사용을 안내하고 있습니다. 인스턴스 선택, Endpoint 저장,
주소 자동 할당, Config 텍스트 생성이 가능하며, 공개 키만 OPNsense 측에 저장됩니다. 개인 키는
OPNsense에 보관되지 않으므로 생성한 설정을 안전하게 보관하시기 바랍니다.[2][3]
권장 절차: Peer generator 사용하기 #
VPN > WireGuard > Peer generator를 엽니다.- 대상 Instance를 선택하고 클라이언트명, 접속 대상 FQDN/포트, 필요한 네트워크, DNS를 입력합니다.
- Address는
10.10.10.2/32와 같은 클라이언트 전용 주소를 할당합니다. 현재 구현에서는 주소 자동 할당도 사용할 수 있습니다.[3] - Keepalive interval은 25초 권장(NAT나 FW 통과 시 접속성 관점에서)
- DNS는 일반적으로 공란으로 두지만, VPN 대상의 DNS 서버에서 호스트명을 조회하려면 여기서 지정해야 합니다.
- Enable WireGuard를 체크
- Store and generate next로 공개 정보를 저장하고, 생성된 Config를 복사해
client-windows.conf로 안전하게 저장합니다. 이어서Peers화면에서 Apply를 실행합니다.[2]
다시 생성한 경우 Windows 측에서도 설정 파일을 재등록해야 합니다.[2]
수동으로 Peer를 생성하는 경우 #
Peer generator를 사용하지 않는 경우 VPN > WireGuard > Peers에서 새 Peer를 생성하고,
클라이언트 공개 키와 클라이언트용 /32 주소를 설정합니다.[1]
| 항목 | 설정 예시 | 보충 설명 |
|---|---|---|
| Enabled WireGuard | Checked | 활성화 |
| Name | Windows-Laptop-01 | 단말을 식별할 수 있는 명칭 |
| Public Key | 클라이언트 공개 키 | Windows 측에서 생성한 키 |
| Allowed IPs | 10.10.10.2/32 | 이 클라이언트에 할당할 고유 주소 |
| Pre-shared Key | 임의 | 추가 보안 조치로 사용 가능[2] |
수동으로 Peer를 생성한 후, 원래 Instance로 돌아가서 생성된 Peer를 연결하고 저장한 다음 Apply합니다.[1]
수동 생성 시 client-windows.conf 템플릿
[Interface]
PrivateKey = <Windows클라이언트의 비밀 키>
Address = 10.10.10.2/32
DNS = 10.10.10.1
[Peer]
PublicKey = <OPNsense Instance의 공개 키>
Endpoint = vpn.example.jp:51820
AllowedIPs = 192.168.10.0/24, 10.10.10.0/24
DNS를 터널을 통해 사용하는 경우, 해당 DNS 대상이 AllowedIPs에 포함되어 있는지 확인하세요.[1]
Step 3
인터페이스 할당 및 활성화 #
| 항목 | 설정 예 | 보충 |
|---|---|---|
| Enable(활성화) | Checked | 인터페이스 활성화 |
| Description | HomeWireGuard | 규칙 생성 시 구별하기 쉽게 함 |
| IPv4 Configuration Type | None | 수동으로 IP를 설정하지 않음 |
| IPv6 Configuration Type | None | 필요 시에만 설정 |
OPNsense 공식에서는 할당된 인터페이스에 IP를 직접 설정할 필요가 없으며,
Instance에 입력한 터널 주소가 WireGuard 재시작 후 자동으로 반영된다고 안내하고 있습니다.[1]
Gateway / Outbound NAT는 필수가 아닙니다. 외부 인터넷까지 터널로 보내는 full tunnel로 구성하려는 경우에만
추가 NAT / Gateway 설정을 진행합니다.[1]
Step 4
방화벽 규칙 생성 #
공식 절차에서는 WAN 측에서 터널 수립용 UDP를 허용하고, 이어서
WireGuard 인터페이스 측에서 허용할 대상을 허용하는 2단계 구성입니다.[1][2]
WAN 측 규칙 #
| 항목 | 설정 예시 | 보충 설명 |
|---|---|---|
| Action | Pass | 수신 허용 |
| Interface | WAN | WAN 수신측 |
| Protocol | UDP | WireGuard는 UDP |
| Destination | WAN address | 자체 WAN |
| Destination Port | 51820 | Instance의 Listen Port와 일치 |
| Description | Allow WireGuard | 임의 |
WAN 규칙의 Source를 해당 IP 또는 세그먼트로 제한하면 공개 범위를 더욱 줄일 수 있습니다.
WireGuard 인터페이스측 규칙 #
| 항목 | 설정 예시 | 보충 설명 |
|---|---|---|
| Action | Pass | 터널 내 통신 허용 |
| Interface | HomeWireGuard | 할당한 WireGuard 인터페이스 |
| Protocol | any | 처음에는 통신 확인이 쉬운 설정으로 가능 |
| Source | HomeWireGuard net | 터널 네트워크 |
| Destination | 192.168.10.0/24 | 우선 LAN만 허용 |
OPNsense 공식에서는 WireGuard측 규칙의 대상을 any로도 설정할 수 있지만,
실제 운용에서는 필요한 서브넷·필요한 서버만 허용하는 것을 권장합니다.[1]
PPPoE 환경이나 일부 TCP 통신에서 문제가 생기는 경우 MTU / MSS 조정
공식 절차에서는 PPPoE 환경에서 Instance MTU를 1412로 낮추는 예시가 제시되며,
필요에 따라 Firewall > Settings > Normalization에서 MSS clamping을 추가하는 방법이 안내되어 있습니다.
TCP만 불안정하거나, 웹만 열리지 않는 증상이 있는 경우 유효합니다.[1]
| 항목 | 설정 예시 |
|---|---|
| Interface | WireGuard (Group) |
| Description | WireGuard MSS Clamping IPv4 |
| Max MSS | 1380(PPPoE라면 1372) |
Step 5
Windows 클라이언트에 설정 적용하기 #
Windows측은 공식 WireGuard for Windows를 사용하는 것이 가장 간단합니다. 설치 프로그램은
WireGuard 공식 사이트에서 받을 수 있습니다.[4]
- WireGuard for Windows를 설치합니다.
- OPNsense의 Peer generator에서 저장한
client-windows.conf를 준비합니다. 수동으로 작성하는 경우 앞서 설명한 템플릿을 사용합니다. - WireGuard for Windows에 설정 파일을 가져옵니다.
- 대상 터널을 활성화하고 연결을 시작합니다.
OPNsense 공식에서도 NAT / firewall traversal을 유지하고 싶은 경우 Keepalive interval이 효과적이라고 설명하고 있습니다.[2]
client-windows.conf
[Interface]
PrivateKey = <클라이언트 비밀키>
Address = 10.10.10.2/32
DNS = 10.10.10.1
[Peer]
PublicKey = <OPNsense 공개키>
Endpoint = vpn.example.jp:51820
AllowedIPs = 192.168.10.0/24, 10.10.10.0/24
AllowedIPs에 192.168.10.0/24와 같은 LAN 세그먼트를 입력하면,
해당 목적지만 터널로 전송됩니다. 클라이언트의 모든 통신을 VPN으로 보내려면,
공식 절차대로 0.0.0.0/0이나 ::/0을 사용하지만, 이 경우 OPNsense 측의 NAT / 라우팅 설계도 추가로 필요합니다.[1]
Step 6
연결 확인 #
- Windows 클라이언트에서 터널을 활성화한다
10.10.10.1(OPNsense 측 터널 IP)로 통신 확인을 한다- LAN 측의 대표 호스트(예:
192.168.10.10)로ping, RDP, SSH 등을 시도한다 - 필요에 따라 이름 확인을 시도하고, DNS가 통하는지 확인한다
VPN > WireGuard > Status에서 handshake와 송수신량을 확인한다[2]
Operations
공개 전에 적용할 강화 조치 #
Troubleshooting
연결되지 않을 때 확인 항목 #
Handshake가 나타나지 않음
먼저 WAN 측 UDP 51820 허용, 상위 라우터의 포트 포워딩, Endpoint의 FQDN/포트, 클라이언트 시간의 큰 차이를 확인합니다.
Handshake는 나타나지만 LAN에 도달하지 않음
Peer의 Allowed IPs, 클라이언트 측의 AllowedIPs, WireGuard 인터페이스 측 규칙의 목적지를 다시 확인하십시오. OPNsense 공식에서도 Allowed IPs가 잘못되면 패킷이 조용히 폐기된다고 안내하고 있습니다.[2]
ICMP는 통하지만, 일부 Web이나 TCP 통신만 불안정
MTU / MSS의 영향을 의심합니다. PPPoE라면 Instance MTU 1412와 Normalization의 MSS clamping을 시도하십시오.[1]
DNS만 실패
클라이언트에서 지정한 DNS 목적지가 AllowedIPs에 포함되어 있는지 확인합니다. Unbound DNS를 모든 인터페이스 등록으로 운영하는 경우, 새로운 WireGuard 인터페이스 추가 후 Unbound의 reload가 필요합니다.[1]
WireGuard 메뉴를 찾을 수 없음 / 화면이 다름
버전 차이를 확인하십시오. Peer generator 주변은 24.1 계열에서 단계적으로 개선되었으며, UI의 모양이나 항목 배치는 버전에 따라 조금씩 다릅니다.[3]
Sources
참고 정보 #
- OPNsense Documentation, WireGuard Road Warrior Setup
https://docs.opnsense.org/manual/how-tos/wireguard-client.html - OPNsense Documentation, Virtual Private Networking > WireGuard
https://docs.opnsense.org/manual/vpnet.html - OPNsense Documentation, 24.1 “Savvy Shark” Series(Peer generator 관련 업데이트 포함)
https://docs.opnsense.org/releases/CE_24.1.html - WireGuard Official, Installation
https://www.wireguard.com/install/






