집에서
OpenVPN으로
VPN 서버를 구축하려다가
WireGuard가 더 빠르다기에
도커에 WireGuard로
VPN 서버를 구축해봤습니다.
# 왜 WireGuard?
기본적으로 VPN을 구축한다고 하면,
보안상 안전하고 많이 알려진
OpenVPN을 먼저 고려하게 됩니다.
저도 OpenVPN 구축 방법을 찾던 도중
안전하지만 느린 OpenVPN 대신
최신 암호화 알고리즘을 사용하면서도
속도가 빠른 WireGuard를 알게 되어
구축했습니다.
- 속도
속도 비교를 보니...
확실히 WireGuard가 빠르네요.
(출처: https://restoreprivacy.com/vpn/fastest/)
- 암호화 알고리즘
최신 암호화 방식을 적용해서
안전하면서도 빠른 데이터 암호화를
제공한다고 합니다.
암호화 알고리즘
- Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24, HKDF
- 실사용의 편의성
WireGuard는
자체적으로 Client App이나 프로그램을
만들었기 때문에,
다른 3rd Party App들을 고민할 필요가 없으며,
Client에게 암호화 키를 배포하기 위한
QRCode 또한 제공하기 때문에
쉽게 키를 전달할 수 있으며,
VPN 연결 또한 쉽습니다.
# 설치
기존에 Windows 에 설치한 Docker에
LinuxServer 그룹의 WireGuard 이미지를
이용하여 설치했습니다.
근데...
도커를 사용하다보니...
설치가 너무 쉬워...
- 설치 전 준비
도커로 설치하기 전에
WireGuard 컨테이너에 생성된
QRcode나 설정 파일(.conf)를
외부에서 접근 가능하도록
1. 도커 외부에 디렉토리(폴더)를 하나 생성합니다.
2. 사용 중인 공유기에서 VPN 포트(51820/UDP)를
열어줘야 합니다.
- Docker 설치
도커를 이용해 설치하다보니
간단한 명령어로
쉽게 설치가 가능합니다.
저는 나중에도 사용하기 위해
yml 파일 방식으로 설치했습니다.
아래는 WireGuard 설치를 위한
Docker yml 파일의 예시 입니다.
version: "2.1"
services:
WireGuard:
image: 'linuxserver/wireguard'
container_name: WireGuard
cap_add:
- NET_ADMIN
- SYS_MODULE
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Seoul
- SERVERURL=wireguard.domain.com #optional, 사용 중인 DDNS
- SERVERPORT=51820 #optional, 사용할 포트
- PEERS=1 #optional, Client 수
- PEERDNS=auto #optional, Client DNS
- INTERNAL_SUBNET=10.13.13.0 #optional, VPN 내부 IP 대역
- ALLOWEDIPS=0.0.0.0/0 #optional, 접속 허용 IP 대역
volumes:
- /path/to/appdata/config:/config # 연결할 로컬 디렉토리
- /lib/modules:/lib/modules # 연결할 로컬 디렉토리
ports:
- 51820:51820/udp # WireGuard의 포트와 실제 포트 연결
sysctls:
- net.ipv4.conf.all.src_valid_mark=1
restart: unless-stopped
아래는 이번 글을 쓰면서
사용한 yml 설정 값 입니다.
.yml 을 이용한 설치 명령어 입니다.
# 컨테이너 설치 명령어(.yml 파일):
$ docker-compose -f WireGuard.yml up --build
LinuxServer 그룹의 이미지들은
기본 세팅이 모두 자동화되어
편하게 설치할 수 있습니다.
아래 Client 들이 사용할
QRcode도 보여주네요.
- Client 연결용 키 확인
설치가 끝나면
사용자가 접속할 때
사용할 키들이
conf 폴더에 자동으로 생성됩니다.
(저는 윈도우에서 docker를 사용 중이기 때문에...
Bind한 로컬 디렉토리가 윈도우 폴더입니다.)
사용할 키 폴더를 들어가면
폴더 안에 접속을 위한 파일들이
있습니다.
(사용자 conf, QRcode, 키 파일)
# 사용
Wireguard는 자체적으로
모바일 앱이랑 PC 클라이언트를
제공하고 있습니다.
- 모바일 접속
Play 스토어나 앱 스토어에서
WireGuard 앱을 다운 받습니다.
우측 하단에 (+) 버튼을
클릭하면
VPN을 추가할 방법들이 나옵니다.
VPN 서버를 추가할
3가지 방법이 있지만
이번엔 편하게
QR코드로 추가했습니다.
이제 WireGuard 서버에 생성된
QRcode를 찍고
VPN 이름 아무렇게나
적어주면 됩니다.
이제 폰에 VPN이 생성됩니다.
생성된 VPN 터치만 해도
알아서 연결됩니다. :)
- 컴퓨터 접속
PC 또한 WireGuard의 프로그램으로
VPN에 연결할 수 있습니다.
Windows 용 프로그램은
공식 홈페이지에서
받을 수 있습니다.
WireGuard 프로그램을
설치한 후 실행하면
Import tunnel(s) from file
버튼이 있습니다.
이 버튼을 클릭한 후,
VPN 서버에 생성된
클라이언트용 폴더(peer)의
.conf 파일을 선택하면
VPN이 추가됩니다.
VPN 추가가 완료되었습니다.
Activate 버튼을 클릭하면
VPN에 접속하게 됩니다.
# 끝! 그리고 후기
OpenVPN은 이것저것 해줄게 많은데...
WireGuard는 확실히 편한거 같다.
- VPN 확인
확실히 IP가 바뀐다.
- 속도 테스트
NIA는 클라이언트를 설치해야해서 싫으니
벤치비에서 테스트했다.
http://beta.benchbee.co.kr/home.asp
VPN 연결 전 속도
(Starbucks WiFi 사용 중...)
WireGuard 연결 후 속도
쓰는 데 무리는 없는 데
속도가...
- 참고1: 모바일 연결 문제
사실 어제까지만 해도
폰에서 VPN 연결해도 느리길래
포스팅만 하고 OpenVPN으로
넘어가려고 했었다.
근데 오늘 카페에서 테스트해보니
빠르다.
(위에 속도 측정한게 의문이 들 정도로...
속도 보니 파일 업다운로드나 동영상 보거나
게임은 못할거 같다.)
이것 저것 테스트해보니
모바일에서는
VPN 연결 후
데이터 방식(5G, LTE)을
반대로 바꿔줘야 한다...
(ex: 5G -> LTE, LTE -> 5G)
(참고로...핸드폰은 KT 쓰고 있음...
다른 통신사는 테스트 안해봤어요...)
이유는 잘 모르겠움...
패킷 형태가 바뀌면서
차단되는 건가...;;;
- 참고2: 내 설정에 AllowIP 가 많은 이유
만약 현재 네트워크에
다른 서버가 있고
그 서버에 접속은 해야하는데
VPN은 또 써야한다면,
현재 네트워크의 대역이나,
접속해야할 IP는
AllowIP에서 제외해야한다.
나는 이게 접속지
(VPN 서버가 있는 네트워크)
서버에 있는 IP 대역을
제외해야하는 줄 알고...
즉, 오역해서 잘못 설정했다...
회사에서는 회사내 다른 서버에 붙어야 하니
회사 내부 IP 대역을 제외하고
AllowIP에 추가해줘야하지만
(물론, VPN 서버가 있는 네트워크의 대역대가
회사 내부 네트워크 대역대와 달라야
VPN 서버가 있는 곳의 다른 서버에
접속할 수 있다.)
나처럼 카페같은 외부에서 접속하는 경우엔
그냥 0.0.0.0으로 설정해야한다.
(기본 설정)
아 다시 세팅해야함...
- 계획: Raspberry Pi 4에서 테스트
원래,
라즈베리파이에서 VPN 구축했었는 데
위와 같은 이유로...
초기화 해버렸다.
그 땐 몰랐는 데,
지금은 알았으니
다시 구축해서 테스트해봐야겠다.
(그래도 라즈베리파이라서 느릴 듯....)