IT/OS|Network|Script

라즈베리 파이 - VPN Server 구축

박모 2024. 2. 10. 22:00
728x90

docker 와 WireGuard를 통한 방법이다.

OpenVPN으로도 좀 해 보다가 편한게 WireGuard 로 보여져서 그렇게 진행한 결과 이다.

라즈베리파이는 arm64 기반이라 (OS가 32bit면 tag를 잘 봐야함) arm64 를 지원하는 이미지를 찾아보니 WireGuard가 편한 것 같았음.

가급적 전용 클라이언트 설치를 피하고 싶었는데, 마땅치 않아서 그냥 했다.

전에는 iptime 공유기를 써서 해당 공유기에서 바로 설정하고 말았는데, 현재 공유기는 vpn 이 안되어서 구성을 했다.

필요사항: docker

 

1. docker run 설정

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

 

Docker

 

hub.docker.com

docker run -d \
  --name=wireguard \
  --cap-add=NET_ADMIN \
  --cap-add=SYS_MODULE `#optional` \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Etc/UTC \
  -e SERVERURL=wireguard.domain.com `#optional` \
  -e SERVERPORT=51820 `#optional` \
  -e PEERS=1 `#optional` \
  -e PEERDNS=auto `#optional` \
  -e INTERNAL_SUBNET=10.13.13.0 `#optional` \
  -e ALLOWEDIPS=0.0.0.0/0 `#optional` \
  -e PERSISTENTKEEPALIVE_PEERS= `#optional` \
  -e LOG_CONFS=true `#optional` \
  -p 51820:51820/udp \
  -v /path/to/appdata/config:/config \
  -v /lib/modules:/lib/modules `#optional` \
  --sysctl="net.ipv4.conf.all.src_valid_mark=1" \
  --restart unless-stopped \
  lscr.io/linuxserver/wireguard:latest

SERVERURL 부분은 미리 DDNS 계열로 하나 잡아 놓는 것을 추천 하고 해당 명을 입력한다.

config 경로는 절대 경로로 현재쪽 기준으로 config쪽 이런데 잡으면 될 듯 하다.

/lib/modules를 빼도 되니까 배는 방향으로 한다.

INTERNAL_SUBNET는 겹치는지만 잘 신경 쓸 것

PEERS를 접속할 클라이언트 갯수이므로 알아서 설정 한다.

PEERS에 맞춰서 QR코드와 키파일이 생성 된다.

 

해당 파일을 실행하면, docker-compose로 해서 넘겨도 된다. 어차피 -e가 설정이니까...

관련해서 docker-compose.yml 로 만들면 다음과 같다.

services:
  wireguard:
    image: lscr.io/linuxserver/wireguard:latest
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE #optional
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - SERVERURL=wireguard.domain.com #optional
      - SERVERPORT=51820 #optional
      - PEERS=4 #optional
      - PEERDNS=auto #optional
      - INTERNAL_SUBNET=10.13.13.0 #optional
      - ALLOWEDIPS=0.0.0.0/0 #optional
      - PERSISTENTKEEPALIVE_PEERS= #optional
      - LOG_CONFS=true #optional
    volumes:
      - ./config:/config
#      - ./modules:/lib/modules #optional
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
    restart: unless-stopped

 

실행을 하면 다음과 같은 QR이 뜬다.

물론 해당 QR은 다음 경로에 잘 있으므로 나중에 봐도 된다.

# sudo -s ls -la config/peer1
합계 28
drwx------  2 pi pi 4096  2월 10 00:30 .
drwxr-xr-x 10 pi pi 4096  2월 10 00:30 ..
-rw-------  1 pi pi  311  2월 10 00:30 peer1.conf
-rw-------  1 pi pi 1121  2월 10 00:30 peer1.png
-rw-------  1 pi pi   45  2월 10 00:30 presharedkey-peer1
-rw-------  1 pi pi   45  2월 10 00:30 privatekey-peer1
-rw-------  1 pi pi   45  2월 10 00:30 publickey-peer1

 

 

2. 공유기 설정

당연한 거지만 공유기에서 WireGuard에서 설정한 51820 udp 에 대해서 해당 서버와 포트포워딩을 걸어야 한다.

 

3. 클라이언드 설정

- 윈도우는 윈도우용 클라이언트를 다운받아서 한다.

- 안드로이드 기준으로 설명한다.

 

안드로이드 플레이스토어에서 WireGuard 를 검색하면 다음이 설치가 가능하다.

 

실행을 하면

위와 같은게 뜨는데, 나는 하나 추가를 해놔서 그런거고 "+" 버튼을 누르면 바로 QR로 등록이 가능하다.

등록을 하고 켜기만 하면 접속 된다.

wifi를 끄고 모바일에서 접속시에 내부망이 잘 접속되는 것을 확인 했다.

728x90