Wireguard 를 위용한 VPN 구축하기 (Docker 기반)

Zzori/ 12월 27, 2020/ VPN/ 0 comments

  1. WireGuard는 무료 오픈소스 소프트웨어 애플리케이션 및 통신 프로토콜이다. 이 프로토콜은 라우팅 되거나 브리지 된 구성에서 안전한 지점 대 지점 연결을 생성하기 위해 VPN 기법을 구현한다. WireGuard는 VPN 업계에서 시장의 판도를 바꾸는 제품이 될 수 밖에 없다. 이 터널링 프로토콜은 최첨단 암호 기술과 매우 깔끔한 구조를 활용해 구축되었다. 따라서 다른 프로토콜보다 100배 적은 4,000줄의 코드만 있으면 비교적 쉽게 배포 및 감사, 버그 제거가 가능하며 일반적으로
    OpenVPN등의 기술보다 효율적인 동작이 가능하기에 공유기등에 WireGuard 방식의 VPN을 구축시 OpenVPN 대비 속도가 10~15% 가량 높아지는 경향을 보인다.
    이는 최적화 문제와 별개로 OpenVPN의 경우 싱글 스레드만 지원 하지만 WireGuard는 멀티 스레드를 지원하는 영향이 더 크다.
  2. 먼저 OS 에 Docker 를 설치합니다.
    curl -fsSL https://get.docker.com/ | sudo sh
  3. 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 혹은 자신이 원하는대로 설정

  4. 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 코드도 나오게 됩니다.

  5. 방화벽 설정은 51820 udp 포트를 열어주면 됩니다.
  6. iOS, Android 등의 기기에서 Wireguard 앱을 설치하고 + 를 터치하여 QR코드로 추가하여 주고 연결하면 됩니다.
Share this Post

Leave a Comment

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*