Wireguard 를 위용한 VPN 구축하기 (Docker 기반)
- WireGuard는 무료 오픈소스 소프트웨어 애플리케이션 및 통신 프로토콜이다. 이 프로토콜은 라우팅 되거나 브리지 된 구성에서 안전한 지점 대 지점 연결을 생성하기 위해 VPN 기법을 구현한다. WireGuard는 VPN 업계에서 시장의 판도를 바꾸는 제품이 될 수 밖에 없다. 이 터널링 프로토콜은 최첨단 암호 기술과 매우 깔끔한 구조를 활용해 구축되었다. 따라서 다른 프로토콜보다 100배 적은 4,000줄의 코드만 있으면 비교적 쉽게 배포 및 감사, 버그 제거가 가능하며 일반적으로
OpenVPN등의 기술보다 효율적인 동작이 가능하기에 공유기등에 WireGuard 방식의 VPN을 구축시 OpenVPN 대비 속도가 10~15% 가량 높아지는 경향을 보인다.
이는 최적화 문제와 별개로 OpenVPN의 경우 싱글 스레드만 지원 하지만 WireGuard는 멀티 스레드를 지원하는 영향이 더 크다. - 먼저 OS 에 Docker 를 설치합니다.
curl -fsSL https://get.docker.com/ | sudo sh
- Docker 로 wireguard 컨테이너를 생성합니다.
docker create \ --name=wireguard \ --cap-add=NET_ADMIN \ --cap-add=SYS_MODULE \ -e PUID=$UID \ -e PGID=$(id -g $USER) \ -e TZ=Asia/Seoul \ -e SERVERURL=au.zzori.com \ -e SERVERPORT=51820 \ -e PEERS=10 \ -e PEERDNS='1.1.1.1' \ -e INTERNAL_SUBNET=10.13.13.0 \ -p 51820:51820/udp \ -v /data/wireguard/config:/config \ -v /lib/modules:/lib/modules \ --sysctl="net.ipv4.conf.all.src_valid_mark=1" \ --restart unless-stopped \ linuxserver/wireguard
–name : 컨테이너명
-e SERVERURL : VPN서버 주소 혹은 IP로 설정
-e SERVERPORT : 사용할 포트, default 51820
-e PEERS : 피어 개수
-e PEERDNS : DNS 주소 지정 1.1.1.1, 8.8.8.8 혹은 자신이 원하는대로 설정 - wireguard 컨테이너가 부팅시에 자동 실행될 수 있도록 설정
vi /etc/systemd/system/wireguard.service[Unit] Wants=docker.service After=docker.service [Service] RemainAfterExit=yes ExecStart=/usr/bin/docker start wireguard ExecStop=/usr/bin/docker stop wireguard [Install] WantedBy=multi-user.target
저장하고 쉘로 나옵니다.
그리고 아래의 명령어를 실행하여 기동합니다.systemctl enable wireguard systemctl start wireguard # QR 코드 확인을 위해서 docker logs -f wireguard
처음 실행시 필요한 패키지를 설치하고 gcc 로 컴파일 하는 과정을 거치기 때문에 약간의 시간이 소요됩니다. 그리고 QR 코드가 나오게 됩니다. PEERS 에서 설정한 수만큼 QR 코드도 나오게 됩니다.
- 방화벽 설정은 51820 udp 포트를 열어주면 됩니다.
- iOS, Android 등의 기기에서 Wireguard 앱을 설치하고 + 를 터치하여 QR코드로 추가하여 주고 연결하면 됩니다.