CentOS 7에서 docker로 wireguard 설치하기

IT 등/리눅스 관련 2022. 11. 4. 15:46

wireguard라는 VPN 툴이 있다. 포트를 하나 열어줘야 하는게 문제지만 가장 속도가 빠르다. 비교 예시로 zerotier라는 툴도 있는데, 포트를 열지 않아도 되는 대신에 속도가 느리고 접속이 불안정한 단점이 있다.

이것들을 설치할때, native로 설치해도 되지만 docker로 설치하는게 더 쉽다. native 설치시 모든 세팅을 설치하는 사용자가 세팅을 고쳐주면 좋겠으나, 자동 설치 스크립트를 사용하면 네트워크 본딩 등 특이 상황에서는 동작하지 않는 경우가 있다.

먼저 wireguard 사용을 위한 udp 포트 하나, tcp 포트를 하나 열어준다. 51820 쯤? 그리고 관리 UI를 위해서는 51821 정도를 열어준다. 보안을 위해 타 서비스와 포트가 겹치지 않는 별도의 포트를 사용해도 관계없다.

센트OS 자체의 방화벽은 다음 명령어로 열 수 있다.

firewall-cmd --list-all
firewall-cmd --permanent --zone=public --add-port=51820/udp
firewall-cmd --permanent --zone=public --add-port=51821/tcp 
firewall-cmd --reload 
firewall-cmd --list-all


이 준비가 되면 wireguard docker 실행을 위해 실행라이브러리가 있어야 한다. 우분투라면 이 과정이 필요없이 docker image가 컨테이너로 실행되지만 센트OS의 경우 docker 단독으로는 컨테이너가 실행되는 과정에 에러가 발생한다. 참조 라이브러리를 설치하기 위해 실행 파일을 설치한다.

root 권한으로 다음 명령어를 사용하여 설치한다.

yum install epel-release elrepo-release 
yum install yum-plugin-elrepo 
yum install kmod-wireguard wireguard-tools

그러면 이제 CentOS에서 docker를 통해 wireguard를 올려도 에러가 발생하지 않는 환경이 되었다.

wireguard만을 docker로 올리고자 할 때는 다음 명령어를 한번에 쓰면 된다. peer가 20개 일 때의 예이다.

docker run -d \
--name=wireguard \
--cap-add=NET_ADMIN \
--cap-add=SYS_MODULE \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Seoul \
-e SERVERURL=WIREGUARD_SERVERIP_OR_DOMAIN \
-e SERVERPORT=51820 \
-e PEERS=20 \
-e PEERDNS=8.8.8.8 \
-e INTERNAL_SUBNET=10.10.0.0 \
-p 51820:51820/udp \
-v /home/wa-admin/docker_data/wireguard/config:/config \
-v /lib/modules:/lib/modules \
--sysctl="net.ipv4.conf.all.src_valid_mark=1" \
--restart unless-stopped \
linuxserver/wireguard

이것을 명령어로 실행시킬 수도 있지만 docker-compose라는 걸 쓰면 더 간편하다. 이번에는 peer 추가 UI까지 있는 버전을 올려보자.
docker-compose.yml 파일의 내용이다. 아래 파일 내용 중 서버 IP와 서버 어드민 패스워드만 수정하면 된다.

version: "3.8"
services:
    wg-easy:
        environment:
        # Required:
        # Change this to your host's public address
            - WG_HOST=SERVER_IP_OR__DOMAIN
        #Optional:
            - PASSWORD=ADMIN_PASSWORD
            - WG_PORT=51820
            - WG_DEFAULT_ADDRESS=10.8.0.x
            - WG_DEFAULT_DNS=1.1.1.1
            - WG_MTU=1420
            - WG_ALLOWED_IPS=192.168.0.0/24, 10.8.0.0/24
        image: weejewel/wg-easy
        container_name: wg-easy
        volumes:
            - .:/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

docker-compose 파일로 올릴때는 모든 옵션이 docker-compose.yml 파일에 지정되어 있으므로 올리기도 간단하다.

다음 한 문장으로 다 해결된다.

$ docker-compose up -d

wireguard를 즐겨보세요.

설정

트랙백

댓글