반응형

라즈베리파이4 도커(docker)에 WireGuard를 이용하여 VPN 서버 만들기

 

먼저 제 라즈베리파이4의 OS는 ubuntu(우분투) 21.04 데스크톱 64bit 상태입니다.

라즈베리파이 OS(구 라즈비안)를 사용하지 않게 된 이유는 docker로 설치한 ubuntu 컨테이너에서 apt update 명령어가 먹히지 않아서 우분투로 OS를 갈아타게 되었습니다.

라즈베리파이4에 우분투 설치방법은 아래 이전 포스팅을 통해 확인하시기 바랍니다.

https://reddb.tistory.com/190

 

라즈베리파이4 우분투(ubuntu) 21.04 OS 설치

라즈베리파이4 우분투(ubuntu) 21.04 OS 설치 기존에 사용하고 있던 라즈베리파이 OS는 32bit입니다. 64bit가 나오긴 했지만 정식 릴리즈는 아니고, 저장소에도 호환 가능한 프로그램들이 많지 않다는

reddb.tistory.com

 

VPN으로 WireGuard를 선택한 이유는 최신 기술이기에 속도와 보안 안정성에서 openVPN보다 더 높은 성능을 보여주기 때문입니다. 사용법 또한 매우 간단하게 되어 있어서 선택했습니다.

 

먼저 도커 WireGuard컨테이너의 config 폴더와 공유할 폴더를 하나 만들어 주어야 합니다.

저의 홈 폴더는 /home/pi 입니다. (계정명이 pi입니다)

그 아래에 wireguard/config라는 폴더를 하나 만들어 줍니다.

계정 홈폴더에 컨테이너 공유용 폴더 생성

 

다음은 라즈베리파이4에 도커 이미지를 다운로드하여주어야 합니다.

제가 받을 도커는 아래 링크에 자세히 설명이 되어 있습니다.

https://hub.docker.com/r/linuxserver/wireguard

 

Docker Hub

 

hub.docker.com

 

도커허브에서 다운로드하는 명령어와 이미지는 아래와 같습니다.(x86-64, arm64, armhf 모두 지원합니다)

docker pull linuxserver/wireguard

이미지 다운로드 확인

 

그리고 받은 도커 이미지를 아래 명령어를 입력하여 컨테이너로 실행해 줍니다.

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=123.345.678.9 \
  -e SERVERPORT=51820 \
  -e PEERS=5 \
  -e PEERDNS=8.8.8.8 \
  -e INTERNAL_SUBNET=10.10.0.0 \
  -p 51820:51820/udp \
  -v /home/pi/wireguard/config:/config \
  -v /lib/modules:/lib/modules \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --restart unless-stopped \
  linuxserver/wireguard

 

위 도커 실행 내용 변경이 필요한 부분이 있습니다.

1. URL 주소 변경하여 실행

- e SERVERURL= IP주소 부분에는 본인 라즈베리파이 IP 주소를 입력해야 합니다.

만약 공유기를 사용 중이시라면 공유기 설정 화면에서 외부 아이피를 확인하시거나,

라즈베리파이로 네이버에 접속하여 "내 아이피 확인"으로 검색하셔서 확인하셔야 합니다.

 

2. SERVERPORT, PEERS 변경 가능

-e SERVERPORT는 기본으로 51820을 사용하는데 기본 포트 사용은 별로 권하지 않습니다. 원하시는 포트로 변경하시기 바랍니다. 다만 다른 사용 중인 포트와 충돌이 나지 않도록 10000번 이후 번호로 사용하시기 바랍니다.

서버 포트를 변경하셨다면 도커와 컨테이너를 연결해주는 -p 라즈베리파이포트:컨테이너포트도 함께 수정하세요.

또한, 공유기를 사용하시는 분들은 공유기에서 포트 포워딩을 해줘야 합니다. 프로토콜 UDP 꼭 확인하세요.

(위 내용이 어려우신 분은 그냥 51820 포트를 사용하시고 공유기 포트 포워딩만 잘해주시면 됩니다)

외부에서 공유기로 접속하는 포트 : 그 포트를 라즈베리파이 IP로 보내는 포트

PEERS의 숫자는 VPN에 접속할 수 있는 키값을 만드는 숫자입니다. 원하는 개수를 적으세요.

 

3. 컨테이너 /config 폴더와 공유폴더 위치 변경하기

제가 컨테이너와 공유할 폴더의 위치는 계정의 홈 폴더에 wireguard/config입니다.

-v /home/pi/wireguard/config:/config 를 보시면 콜론(:) 앞쪽이 공유할 폴더의 절대 주소입니다.

본인이 위에서 mkdir로 만든 폴더의 위치를 절대 주소로 넣어주시면 됩니다.

 

이제 도커가 정상적으로 잘 돌아가고 있는지 확인해봅니다.

docker ps -a

docker ps -a

 

컨테이너 /config 폴더와 라즈베리파이4 /home/pi/wireguard/config 폴더가 공유되어 있는지도 확인합니다. 저는 5개의 peer를 만들어서 5개의 폴더가 생성되었습니다.

peer 폴더 목록

 

peer1 폴더에 들어가 보면 .config 파일과 png 파일이 있습니다.

peer1.conf, .png

 

안드로이드로 VPN 접속하는 사용자라면 구글 플레이에서 WireGuard를 검색 설치하고 실행합니다.

구글 플레이 WireGuard

 

실행 후 파란색 + 버튼을 터치하고 QR코드 스캔을 해줍니다.

그리고 .png 파일을 열어 스캔해주면 모든 정보가 자동적으로 입력됩니다.

터널 이름을 입력하고 터널 만들기를 터치합니다.

터널을 enable 시키고, 안드로이드에서 네이버 접속 후 "내 아이피 확인"을 검색해보면 라즈베리파이 외부 IP(공유기 외부 IP)가 검색되는 것을 확인할 수 있습니다. (VPN이 정상 작동 중)

 

외부 PC에서 VPN 접속하는 사용자라면 아래 사이트에서 wireGuard 접속 프로그램을 다운로드합니다.

https://www.wireguard.com/install/

 

Installation - WireGuard

Installation Windows [7, 8.1, 10, 11, 2012, 2016, 2019, 2022] Download Windows Installer Browse MSIs Download from App Store $ sudo apt install wireguard Download from Play Store Download from F-Droid Download from App Store Users with Debian releases olde

www.wireguard.com

윈도우용 설치

 

설치 및 실행 후 Add Tunnel을 클릭합니다. 라즈베리파이 peer 폴더에 있는 .config 파일을 해당 PC에 다운로드한 후 그 .config 파일을 선택합니다.

Add Tunnel

 

화면에 정보가 출력이 될 겁니다. Activate를 클릭해 줍니다.

wireGuard Activate

 

정상 실행 시 아래 그림처럼 상태가 Active가 되고 전송용량이 표시됩니다.

사용이 불필요 해지면 Deactivate를 클릭하면 됩니다.

VPN 접속상태

 

네이버에서 "내 아이피 확인"을 검색해보면 라즈베리파이 외부 IP(공유기 외부 IP)와 같은 아이피가 확인될 것입니다.

 

라즈베리파이 전체보기

 

'라즈베리파이' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

(Docker)도커 전체보기

 

'(Docker)도커' 카테고리의 글 목록

전산 관련 경험을 기록 하는 곳

reddb.tistory.com

 

반응형