Opnsense에서 Wireguard VPN 구성하기.

안녕하세요. 달소입니다.

주말을 겸해서 오늘은 Xpenology 부터 Proxmox, ghost 마지막으로 Opnsense 글까지 마무리 해보려고합니다 ㅎㅎ

머리속으로는 하고싶은게 많은데 실제로 이것들을 다 하기에는 시간적으로나 체력적으로나 여러모로 부족합니다 ㅠㅠ

아무튼 이번글은 오픈소스방화벽 Opnsense에서 Wireguard VPN을 구성하는글 입니다.

작성하면서 느꼈지만.. Docker와 WG-Easy는 사용용도의 제한은있겠지만. 편의성은 정말... 신이였습니다..
물론 Opnsense도 한번해보니 크게 어렵지는 않지만 처음하시는분들이라면 꽤나 고전(?) 하시겠지만 차근차근하시면 금방하실 수 있으니 걱정마시고 따라와주시면 되겠습니다.

Wireguard란?

꽤나 오래전부터 제가 여러글들을 통해 소개시켜드렸던 VPN 입니다.
Open VPN 보다 빠르고 코드도 작으면서 보안성도 강화한 VPN이라고 보시면 되겠습니다. 장점만 써놓은것 같은데.. 저도 약 1년정도 쓰면서 속도향상부터 꽤나 만족하면서 사용했던 경험이 있어서 자신있게 추천드립니다.

지원하는 플랫폼 역시 Windows, Linux 및 각종 방화벽 OS 까지 지원하지않는 분야를 찾는게 쉬울정도로 모든 플랫폼에서 지원해주는것 역시 큰 장점이라고 생각합니다.

기존에는 Docker를 이용해서 구축해서 사용하고 있다가 Opnsense를 사용하면서 Plugin으로 변경해서 사용하기 위해 구성을 진행해보겠습니다.

더 자세한 내용은 공식홈페이지를 확인해주시기 바랍니다.
https://www.wireguard.com/

Wireguard VPN 플러그인 설치하기.

먼저 Opnsense의 관리자페이지로 접속해준뒤
System -> Firmware -> Plugin -> Wireguard를 검색해서 +로 설치해줍니다.

설치는 원클릭이면 가능합니다

설치 후 새로고침을 한번해주면 VPN메뉴에 Wireguard가 보이는데 가서 Enable 해주시면됩니다.

Wirdguard VPN 구성하기

이제 Wireguard VPN을 구성할 차례입니다.
Local 탭으로 이동해서 + 버튼으로 구성을 시작합니다.

이제 설정창입니다. 기본적으로 아래 3가지 항목만 입력해주시면 되고 Key쪽은 생성후에
Listen Port의 경우 Wireguard 기본포트인 51820을 적었지만 상황에 맞게 변경하시는걸 추천드립니다.(기본포트의 경우 스캔이나 공격이 들어오기때문에 보통 추천드리지 않습니다.)

Tunnel Address는 Wireguard VPN이 연결되었을때 할당받는 IP입니다.
내부망 IP랑 다르게 설정만해주시면 되고 보통 VPN의 경우 10.0.0.1/24 정도에서 운영되는편 입니다.

나머지는 기본설정으로 두고 Save로 저장해주세요.

저장하고 다시 들어가면 Public Key와 Private Key를 모두 확인하실 수 있습니다.

여기서는 Public Key를 미리 저장해주세요.
(마지막 클라이언트 연결에 사용)

Wireguard 인터페이스 추가 및 방화벽 설정

방화벽이다보니 절차가 꽤나 복잡합니다 ㅠ
기존의 Wg-easy 가 그립군요..

저장 후 Wireguard 를 누르면 아래처럼 나올텐데 아래 두항목을 체크하고 Save -> Apply 해줍니다.

Firewall -> Rule -> Wireguard로 가서 아래처럼 in/out any/any 정책을하나만들어주셔아합니다.

WAN 방화벽 규칙 추가

외부에서 Wireguard VPN에 접근하기 위한 정책을 추가로 해줘야합니다.
기본적으로 Opnsense vpn의 경우 웬만한 포트는 기본정책에서 다 짜릅니다.

간단하게 외부에서 공인ip의 51820 udp 포트를 any로 오픈해주기만 하면 됩니다.

NAT 규칙 생성하기

마지막으로 VPN을 연결했을때 외부로 통신하기위한 NAT규칙입니다.

Save를 하면 아래와같이 창이 하나가 더생기는데 룰을 추가해줍시다.

Sourece address 와 Description 정도만 수정해주면 되고 외부 목적지나 포트를 제한하고 싶으면 Destination 쪽을 수정해주면 됩니다.

클라이언트(PC/Mobile) 연결하기

이제 다 끝났습니다 ㅠㅠ 험난하고 험난했던.. 길..
여기서는 Windows와 안드로이드 기준으로하겠습니다.

윈도우

윈도우의 클라이언트 프로그램을 먼저 설치해주세요.

https://download.wireguard.com/windows-client/wireguard-installer.exe

설치파일을 실행시키고 Add Empty tunnel을 눌러주세요.

아래와같이 나올텐데 여기서 Public key를 복사해주세요.

그리고 Opnsense의 Wireguard -> Endpoint 로 가서 add를 하나 해줍니다.

그리고 Public key를 붙여넣기 해주고 사용할 ip를 Allowed IPs에 넣어줍니다.
나머지는 안채워줘도 됩니다.

그리고 Apply를 해주고 Local 탭으로갑니다.
아까 만들어준 인터페이스에 Public key를 복사해주고 Peers에 Endpoint에서 만든기기를 할당해주세요.

이제 다시 클라이언트 설정부분입니다.
아까 빈칸에서 아래 부분만 채워주세요.

그리고 Activate를 누르면 VPN이 활성화됩니다.
반드시 Sent 와 Received 가 둘다 나와야합니다. 여기서 문제가있다면 방화벽의 log에서 Liveview를 보며 어디가 문제인지 찾아야합니다.

모바일도 간단합니다.

안드로이드 설정

먼저 플레이스토어에서 Wireguard VPN 앱을 설치해주고 하단의 + 키를 눌러주세요.

그리고 윈도우에서 했던것 처럼 진행해줍니다.
Public Key를 복사해서 Opnsense의 Endpoint에 또 기기를 넣어주고 ip도 아래처럼 넣어주세요.

그리고 안드로이드 하단에 Peer + 를 눌러서 서버정보를 넣어줍니다.

Opnsense 서버의 공개키와 Endpoint 쪽은 서버의 ip 입니다.

이렇게 저장 후 활성화를 시켜주면 아래처럼 연결이 잘되는것을 볼 수 있습니다.

Opnsense의 Wireguard 관리탭에서도 연결을 확인할 수 있는데

아래처럼 연결된 Peer의 공인ip와 할당된 사설 ip
데이터 전송량, Handshake 정보등이 나옵니다.

후.. 사실 하면서 Peers에 Endpoint 넣는 가이드가 없어서 엄청 힘들었습니다 ㅠㅠ
한시간 이상의 노가다를 하면서 결국 성공했는데요..

막히는 부분이 생긴다면 Live Log에서 꽤나 힌트를 많이 얻어서 어떻게 결국 성공한거 같습니다.

그동안 Wg-easy 로 꿀빨았으니 한번 고생했다고 생각해야죠 ㅠ
여러분들도 모두 Opnsense 설치후에 Wireguard VPN을 꼭 구성하셨으면 합니다.(화이팅...!)