정보보안

OPNsense WireGuard 서버 및 클라이언트 구성

yeseong9769 2024. 9. 5. 23:50

WireGuard는 현대적인 암호 기술을 사용하는 빠르고 안전한 VPN 솔루션으로, 간단한 설정으로 고성능의 암호화된 터널을 제공합니다. 본 글에서는 인스턴스 생성, 인터페이스 할당, 방화벽 규칙 설정, 그리고 클라이언트 구성까지 WireGuard VPN을 OPNsense에서 구성하는 방법을 설명합니다. 그리고 아래의 설정들은 거의 공식 문서의 설정을 따라했기 때문에 더 자세한 설명이 필요하시면은 아래의 참고 링크를 통해서 참고하시면 될 것 같습니다.

 

1. WireGuard Instance(서버) 설정

  • VPN > WireGuard > Instances
  • + 버튼을 통해 새로운 Instance 설정
  • Instance 설정은 아래와 같이 진행
Enabled
Name 아무거나 (ex. HomeWireGuard)
PublicKey 톱니바퀴 버튼을 누르면 알아서 PublicKey, PriaveKey 생성 해줌
ListenPort 51820 또는 이외의 다른 포트
Tunnel address Instance가 사용할 주소, 사설 IP 대역 중에 이미 사용중인 대역과 겹치지 않는 주소 중에 선택  (ex. 10.9.0.1/24)

 

위의 설정을 했다면 아래에 Enable WireGuard를 체크해서 적용 및 활성화

 

2. 인터페이스 할당 및 라우팅

2.1. WireGuard Interface 할당

  • Interfaces > Assignments
  • New Interface > WireGuard device 선택
  • Interface 설정은 아래와 같이 진행
Enabled
Lock
Description 아무거나 (ex. HomeWireGuard)
IPv4 Configuration Type None
IPv6 Configuration Type None

 

2.2. Outbound NAT 규칙 생성

  • Firewall > NAT > Outbound
  • 맨 위에 Mode에서 Hybrid outbound NAT rule generation 선택
  • + 버튼을 클릭하여 새로운 rule 생성
  • rule 설정은 아래와 같이 진행
Interface WAN
TCP/IP Version IPv4
Protocol any
Source address 바로 위에서 생성한 Interface Subnet 별칭 선택 (ex. HomeWireGuard net)
Translation / target Interface address

 

3. 방화벽 규칙 지정

방화벽 규칙 설정 단계에서는 아래의 두 가지 주요 규칙을 설정해야 합니다.

  1. WAN 인터페이스 방화벽 규칙: 이 규칙은 외부에서 WireGuard 서버에 접근할 수 있도록 허용합니다. 즉, 외부 클라이언트가 VPN 서버와 연결할 수 있게 해줍니다.
  2. WireGuard 인터페이스 방화벽 규칙: 이 규칙은 WireGuard 클라이언트가 내부 네트워크에 접근할 수 있도록 허용합니다. 즉, VPN 클라이언트가 내부 네트워크 리소스와 통신할 수 있게 해줍니다.

 

3.1. WAN 인터페이스 방화벽 규칙 설정

  • 경로: Firewall > Rules > Wan
  • + 버튼을 클릭해여 새로운 rule 생성
  • 규칙 설정은 아래와 같이 진행합니다.
Action Pass
Quick
Interface WAN
Direction in
TCP/IP Version IPv4
Protocol UDP
Destination WAN address
Destination port range Other 선택 > 1번 목차에서 지정한 Instance ListenPort (ex. 51820)
Description rule에 관한 설명
  • 설정 후, Save 버튼을 클릭하고 Apply Changes를 선택하여 적용합니다

 

3.2. WireGuard 인터페이스 방화벽 규칙 설정

  • 다음으로 두번째 규칙 생성
  • Firewall > Rules > HomeWireGuard
  • + 버튼을 클릭해여 새로운 rule 생성
  • 규칙 설정은 아래와 같이 진행합니다
Action Pass
Quick
Interface HomeWireGuard
Direction in
TCP/IP Version IPv4
Protocol any
Source HomeWireGuard net
Destination any 또는 접근 허용할 특정 IP, subnet 지정
Destination port range any 또는 접근 허용할 할 Port 지정
Description rule에 관한 설명
  • 설정 후, Save 버튼을 클릭하고 Apply Changes를 선택하여 적용합니다.

 

4. Normalization 규칙 설정

  • WireGuard 터널을 설정할 때 정규화 규칙을 만드는 이유는 패킷 조각화 문제를 방지하기 위함
  • 조각화가 발생하면 TCP는 모든 조각을 재전송해야 하여 성능 저하가 발생할 수 있음
  • 터널의 MTU와 암호화로 인해 조각화가 더 빈번하게 일어날 수 있음
  • 정규화 규칙을 통해 터널 내 TCP 세션의 안정성과 성능을 유지할 수 있음
  • 보통 WireGuard Interface는 1420 MTU를 가짐, 그리고 IPv4는 보통 20 bytes, TCP도 20 bytes
  • 따라서 IPv4 트래픽을 wireguard tunnel을 통과하도록 하려면 아래의 설정과 같이 설정
  • Firewall > Settings > Normalization
  • + 버튼을 클릭해여 새로운 rule 생성
Interface WireGuard (Group)
Direction Any
Protocol any
Source any
Destination any
Destination port any
Description 아무거나
Max mss 1380 (Wireguard MTU 보다 40 bytes 적게 설정)

 

5. WireGuard Peer(클라이언트) 설정

5.1. Windows 클라이언트 설정

윈도우 클라이언트 설정은 아래의 포스트 참고

https://blog.adder.pe.kr/11#WireGuard%20Peer%20Configuration%20(Windows)-1

 

Wireguard

WireguardWireguard는 IPv4와 IPv6를 지원하는 오픈소스 Virtual Private Network (VPN)입니다. WireGuard는 서로가 공유하는 개인키와 공개키를 기반으로 하는 암호화를 사용하여 암호화된 터널을 구축합니다.특

blog.adder.pe.kr

 

아래의 사진에서 보이듯이 윈도우 WireGuard 클라이언트에서 Add Tunnel > Add empty tunnel 선택

 

설정은 아래와 같이 진행

[Interface]
PrivateKey = ~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 내가(클라이언트가) 사용할 주소
Address = 10.9.0.2/32

[Peer]
# 연결할 원격지 Peer의 PublicKey
PublicKey = ~~~~~~~~~~~~~~~~~~~~~~~~~~~
# VPN에 연결했을 때 어떤 대역을 VPN으로 보낼껀지 지정
# 모든 트래픽을 VPN으로 보내고 싶을 경우 0.0.0.0/0을 사용
AllowedIPs = 10.9.0.0/24, 192.168.0.0/24
# VPN 서버 주소
Endpoint = 1.2.3.4:51820

 

5.2. Client peer 등록 (서버에서 진행)

마지막 단계로, OPNsense에서 WireGuard 클라이언트를 피어로 등록해야 합니다.

  • VPN > WireGuard > Peers
  • + 버튼을 통해 새로운 Peer 설정 생성
Enabled
Name 아무거나 (ex. Phone)
Public Key 클라이언트에서 생성한 Key 입력, 윈도우 클라이언트는 Name 밑에 생성된 Public Key가 있음
Allowed IPs 클라이언트가 사용할 IP 주소 (예: 10.9.0.2/32). 이 주소는 클라이언트가 VPN을 통해 통신할 때 사용할 IP 주소

 

참고

https://docs.opnsense.org/manual/how-tos/wireguard-client.html

 

WireGuard Road Warrior Setup — OPNsense documentation

Note The steps outlined in Steps 4(a) and 4(b) below may not be required at all in your circumstances. Strictly speaking, if you only intend for your clients to use the tunnel to access local IPs/subnets behind OPNsense, then neither step is actually neces

docs.opnsense.org

https://forum.opnsense.org/index.php?topic=41260.0

 

[SOLVED] Unable to set allowed IPs to '0.0.0.0' for wireguard client

 

forum.opnsense.org