[wg-easy ; wireguard] 우분투, portainer, docker 환경에서 작동시키기
상황
- 서버가 3대 있지만, VPN의 필요성은 느끼지 못했다. (보안을 위해 하는 사람들이 많았다)
이번에 필요하게 된 이유는, 오라클 프리티어 서버의 ip 를 바꿔야 하는 상황이 발생했다.
(youtube dl 을 사용했는데, ip 가 ban 당했다. 최근 유튜브가 데이터 센터 ip 를 ban 시킨다고 한다)
- 보통 언급되는 서비스는 wireguard, pivpn, openvpn, tailscale, headscale 등이 있다.
이중에서 openvpn 제외하면, 모두 wireguard 기술을 기반으로 한다.
tailscale 은 vpn 설정을 쉽게 해준다. 이를 위해 영리목적 기업이 프로젝트를 주도하고 있다.
headscale 은 테일스케일을 오픈소스화 했다.
결국, 와이어가드가 최신 프로토콜이며, 속도도 빠르다.
wg-easy 선택이유
- 주로 모든 앱 설치 삭제에 도커를 이용하다보니, 도커 기반을 제공하는 wg-easy 를 선택했다.
- cli 모드에서 세팅하는 wireguard 보다 많이 쉬웠다.
sudo docker run -d \
--name=wg-easy \
-e LANG=en \
-e WG_HOST=152.***.234.23 \ #설치 서버의 IP
-e PASSWORD_HASH='$2a$12$jUZVR2cx0svLUJG13wDYKFYhJJNS' \ #비번, 아래 만드는법 참조
-e PORT=51821 \ #ui (웹) 접속 포트
-e WG_PORT=51820 \
-v /vo2/docker/wg-easy:/etc/wireguard \
-p 51820:51820/udp \
-p 51821:51821/tcp \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--sysctl="net.ipv4.ip_forward=1" \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy
한줄명령어
sudo docker run -d --name=wg-easy -e LANG=en -e WG_HOST=158.***.***.244 -e PASSWORD_HASH='$2a$12$Ctd7tjJnjZDA3jL6cMBR.y2r8VSBwqZDFxIILcij2' -e PORT=51821 -e WG_PORT=51820 -v /vo2/docker/wg-easy:/etc/wireguard -p 51820:51820/udp -p 51821:51821/tcp --cap-add=NET_ADMIN --cap-add=SYS_MODULE --sysctl="net.ipv4.conf.all.src_valid_mark=1" --sysctl="net.ipv4.ip_forward=1" --restart unless-stopped ghcr.io/wg-easy/wg-easy
PASSWORD_HASH 만드는 법
sudo docker run ghcr.io/wg-easy/wg-easy wgpw YOUR_PASSWORD
#만일, wg-easy 설치 전이라면, 위 명령어를 실행해서, PASSWORD_HASH 값을 얻은 후, 설치한다.
# wg-easy 를 설치했다면, 명령어를 실행하면 이미지 다운로드 없이, 바로 해시값을 받을 수 있다.
# 아래 예는 'YOUR_PASSWORD' 를 변환한 해시값이다.
hos@hcp:~$ sudo docker run ghcr.io/wg-easy/wg-easy wgpw YOUR_PASSWORD
[sudo] password for hos:
Unable to find image 'ghcr.io/wg-easy/wg-easy:latest' locally
latest: Pulling from wg-easy/wg-easy
c6a83fedfae6: Pull complete
d9aac50bc34e: Pull complete
0150f131fd2f: Pull complete
c0ce3bd8f303: Pull complete
8feb6cf49e61: Pull complete
c2198b3a313e: Pull complete
aca230b5559d: Pull complete
4f4fb700ef54: Pull complete
94d0b733a7f6: Pull complete
f758c8747cfc: Pull complete
Digest: sha256:f6c2587da3fdc9d5927743fb4a92cff42d690b182396ffd0cdad034becb41053
Status: Downloaded newer image for ghcr.io/wg-easy/wg-easy:latest
PASSWORD_HASH='$2a$12$GRGsypzmfzaYnz5ziDk9hed3C8yebZFXUO31orXvufPcV8jeLdUKC'
wg-easy를 설치 했으면, 일단 폰에 wireguard 앱을 설치 후, wg-easy 에 접속해 본다.
접속이 안되면, 뭔가 문제가 발행한 것이다.
포트에 대해서
- wg-easy 설치된 곳의 공유기에서 udp 포트를 열어 줘야 한다.
- 클라이언트는 포트를 신경쓰지 않아도 된다.
oracle free tier 에 설치 하기
- 위 도커 스크립트를 수정해서 사용하면 간단히 설치 가능
- 설치 후, 폰으로 접속해 봤는데, 실패했다.
네트워크 방화벽에서 51820 udp 를 열어줘야 한다. 그런데, 세팅에 실수가 있었다.
source port range 에 51820 을 입력했다. 그래서 wireguard 작동이 되지 않았다.
All 을 입력해 줘야 한다.