라즈베리 파이 - VPN Server 구축
docker 와 WireGuard를 통한 방법이다.
OpenVPN으로도 좀 해 보다가 편한게 WireGuard 로 보여져서 그렇게 진행한 결과 이다.
라즈베리파이는 arm64 기반이라 (OS가 32bit면 tag를 잘 봐야함) arm64 를 지원하는 이미지를 찾아보니 WireGuard가 편한 것 같았음.
가급적 전용 클라이언트 설치를 피하고 싶었는데, 마땅치 않아서 그냥 했다.
전에는 iptime 공유기를 써서 해당 공유기에서 바로 설정하고 말았는데, 현재 공유기는 vpn 이 안되어서 구성을 했다.
필요사항: docker
1. docker run 설정
참조: https://hub.docker.com/r/linuxserver/wireguard
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를 끄고 모바일에서 접속시에 내부망이 잘 접속되는 것을 확인 했다.