안녕하세요 대무무입니다.
이번엔 비교적 최근에 출시된 Open source 기반 VPN 인 WireGuard 를 소개해 드리려 합니다.
이건 뭔가요?
WireGuard: fast, modern, secure VPN tunnel
WireGuard® is an extremely simple yet fast and modern VPN that utilizes state-of-the-art cryptography. It aims to be faster, simpler, leaner, and more useful than IPsec, while avoiding the massive headache. It intends to be considerably more performant th
www.wireguard.com
WireGuard 은 오픈 소스 기반 VPN 프로토콜이며 OpenVPN 보더 더 나은 성능을 목표로 개발이 시작되었고 GPL v2 라이센스로 배포되었습니다. WireGuard 는 Peer to Peer(P2P) 기반 VPN 으로 구축하고 싶은 환경에 다라 다양하게 구성이 가능합니다. 기본적 구성인 서버/클라이언트 관계, Mesh VPN, Site to Site 방식 또한 가능합니다. 해당 WireGuard는 리눅스 커널 5.6 버전부터 포함되어 동작하고 UDP 기반이며 IPv4, IPv6 모두에 대해 Layer 3 로 지원합니다.
특징
- 코드베이스의 간결함: 약 4000 줄의 코드로만 구성되어 있어 다른 VPN 프로토콜에 비해 코드가 간결합니다. 이는 코드 관리와 보안성을 더 용이하게 합니다.
- 빠른 속도: 최신 암호화 기술을 사용하여 다른 VPN 프로토콜에 비해 더 빠른 속도를 제공합니다. 모바일 환경에서 더 강점을 가지는데 배터리 사용 시간을 절약할 수 있고 더 빠른 연결 속도를 제공합니다.
- 최신 암호화 기술 채택
- 설정의 간편함: WireGuard 는 인프라 관리자 입장에서 설정 내용 자체도 간편하지만 사용자 입장에서 또한 OpenVPN 과 같은 방식인 QR Code 나 설정 파일로 내보내기가 가능하고 불러오는 것이 가능하여 간편합니다.
- 보안성 강화: 특정 IP 대역에 대한 패킷만 VPN 으로 라우팅 설정이 가능합니다. 이는 모든 패킷을 VPN 으로 라우팅하지 않아 VPN 부하 또한 감소하여 속도의 강점을 가질 수 있습니다.
- 암호화된 터널: 특정 IP 대역에 대한 패킷만 암호화된 터널을 통해 전송합니다. 이는 데이터의 기밀성과 무결성을 보장합니다.
Mesh VPN?
기존의 VPN 설계는 중앙 집중식 이었습니다. 서버/클라이언트 구조로 구성되어 있으며 클라이언트는 서버를 통해 모든 트래픽을 주고 받습니다. 그러나 Mesh 방식은 각 노드가 서로 직접 연결되는 방식으로 구성(분산 네트워크) 되며 네트워크 내 데이터 경로는 동적으로 결정되므로 네트워크 변화에 신속하게 대응하도록 합니다. 이 VPN 방식 또한 일부만 보면 서버/클라이언트 구조로도 매칭이 되므로 기존 전통적인 구조를 품고 있습니다.
설치 방법은?
최신 리눅스 커널을 사용하고 있다면 대부분 설치가 가능할 것으로 보입니다. docker 기반으로 설치하는 방법을 소개하겠습니다.
docker-compose
version: "3.8"
services:
wg-easy:
environment:
# ⚠️ Required:
# Change this to your host's public address
- WG_HOST=[YOUR_SERVER_DOMAIN]
#Optional:
- PASSWORD=[YOUR_ADMIN_PASSWORD]
- WG_MTU=1420
- WG_ALLOWED_IPS=[COMMA SEPERATED]
- WG_PERSISTENT_KEEPALIVE=25
image: ghcr.io/wg-easy/wg-easy:latest
container_name: wg-easy
volumes:
- ./data:/etc/wireguard
ports:
- 51820:51820/udp
- 51821:51821/tcp
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
설정 설명
- WG_HOST: 외부 IP 혹은 외부 도메인(WAN IP or DOMAIN)
- PASSWORD: 해당 Web UI 에 접속할 관리 페이지 패스워드
- WG_ALLOWED_IPS: 해당 VPN 으로 패킷을 보낼 IP 대역 리스트, 콤마(,) 로 여러 대역을 표현할 수 있고 CIDR 표기법을 따르며 형태는 다음과 같습니다. 만일 모든 패킷을 VPN 으로 전송하고 싶다면 0.0.0.0/0 으로 입력
- CIDR 표기법 참고: https://namu.wiki/w/CIDR#toc
192.168.0.0/24, 10.0.1.0/24
- WG_PERSISTENT_KEEPALIVE: WireGuard VPN 터널을 유지하기 위해 정기적으로 keepalive 패킷을 보내는 기능
- 51820 포트: WireGuard VPN 통신 포트
- 51821 포트: WireGuard 설정을 위한 관리 페이지(Web UI) 포트
해당 설정으로 대부분 환경에서 설치 및 운영이 가능합니다. 더 자세한 설정은 github 참고 바랍니다.
관리 방법은?
사용자 추가
관리페이지(http://[서버주소]:51821) 접속 후 PASSWORD 입력하여 들어가면 + New 버튼으로 사용자를 추가할 수 있습니다. 이후 사용자명을 적고 Create 버튼을 클릭하면 사용자 추가가 완료됩니다.
WireGuard VPN 접속
사용자 추가를 완료하면 Clients 목록에 추가 된 모습을 확인할 수 있습니다. 해당 목록의 오른쪽을 보면 QR Code 로 볼 수 있는 버튼이 있고 설정파일을 다운로드 받을 수 있는 버튼이 있습니다. QR Code 는 주로 모바일 기기들에 대해 설정을 Import 할 경우에 사용하면 되고 설정 파일 다운로드는 데스크탑이나 랩탑 환경에서 Import 하실 경우 사용하시면 됩니다.
이후 WireGuard 클라이언트를 다운로드하여 설치를 진행합니다. 다운로드는 다음 링크를 통해 하시길 바랍니다. 설치된 WireGuard 클라이언트를 실행하고 Import Tunnel(s) from FIle 을 클릭한 후 다운로드 받았던 설정 파일을 선택하여 Import 합니다. 이후 Activate 버튼을 클릭하여 접속합니다.
Reference
'인프라' 카테고리의 다른 글
[인프라 / Docker] MongoDB (with Replica-Set) (0) | 2024.01.08 |
---|---|
[인프라 / Docker] 나만의 전자 도서관 Calibre-Web (1) | 2024.01.04 |
[인프라 / VPN] Tailscale 유사 Site-to-Site 설정(Subnet Router) (1) | 2024.01.03 |
[인프라 / VPN] Tailscale 설명 및 간단 사용 방법 (1) | 2024.01.01 |
[인프라 / Docker] Nginx Proxy Manager(NPM) (1) | 2023.12.29 |