홈서버 내부망 접속을 위한 VPN 구축 (feat.Wireguard)
한창 홈서버에 Nas , 우분투에 여러가지를 올려 외부에서 접속해 사용하고 있었을 때였다
GitLab, Vaultwarden, omv, DB, portainer 등 막 찍먹해보던 시기였다.
관련 서비스들을 설치해서 외부에서 사용하려니 포트포워딩설정이 추가적으로 필요하였고 각각의 서비스들에게 포트포워딩을 해주는 일이 여간 귀찮은게 아니였다..
그마저도 공유기를 바꾸거나 실수로 설정을 날려먹는등.. 일이 생긴다면 얼마나끔찍한지..
그 뿐만 아니라 외부에 포트를 열어놓는 행위 자체도 나에게는 언젠간 크게 당할거같은.. 그런느낌을 받게했다.
그런생각하면서 어떻게 서버를 켜놨는지 정말 대단하다 👏
이후 이런 문제들을 해결하기 위해 홈서버 내부 VPN 내부망을 구축하게 되었고 이를 보다 쉽게 해준것이 Wireguard 이다
홈페이기준 장점은
Simple & Easy-to-use
Cryptographically Sound
Minimal Attack Surface
High Performance
Well Defined & Thoroughly Considered
라고 하는데 다 집어치우고
기존 유명한 OpenVPN, IPsec VPN 등 과 비교해 보안과 속도가 빠르다는 평가가 많아 (카더라..) 이번에 도입해보게 되었다.
(언젠간 한번 테스트 해보는것도 괜찮을듯 하다)
관련Docker 이미지를 사용하였고
volumes:
etc_wireguard:
services:
wg-easy:
environment:
# Change Language:
# (Supports: en, ua, ru, tr, no, pl, fr, de, ca, es, ko, vi, nl, is, pt, chs, cht, it, th, hi)
- LANG=de
# ⚠️ Required:
# Change this to your host's public address
- WG_HOST=raspberrypi.local
# Optional:
# - PASSWORD=foobar123
# - PORT=51821
# - WG_PORT=51820
# - WG_CONFIG_PORT=92820
# - WG_DEFAULT_ADDRESS=10.8.0.x
# - WG_DEFAULT_DNS=1.1.1.1
# - WG_MTU=1420
# - WG_ALLOWED_IPS=192.168.15.0/24, 10.0.1.0/24
# - WG_PERSISTENT_KEEPALIVE=25
# - WG_PRE_UP=echo "Pre Up" > /etc/wireguard/pre-up.txt
# - WG_POST_UP=echo "Post Up" > /etc/wireguard/post-up.txt
# - WG_PRE_DOWN=echo "Pre Down" > /etc/wireguard/pre-down.txt
# - WG_POST_DOWN=echo "Post Down" > /etc/wireguard/post-down.txt
# - UI_TRAFFIC_STATS=true
# - UI_CHART_TYPE=0 # (0 Charts disabled, 1 # Line chart, 2 # Area chart, 3 # Bar chart)
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
volumes:
- etc_wireguard:/etc/wireguard
ports:
- "51820:51820/udp"
- "51821:51821/tcp"
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
# - NET_RAW # ⚠️ Uncomment if using Podman
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
해당 설정으로 진행했다.
관련해서 51821 포트로 접속시 웹 ui 를 통해 접속하여 새로운 클라이언트를 생성해 줄 수 있다.
docker-compose.yml 의 환경변수중 WG_ALLOWED_IPS 값이 있다.
해당값은 192.168.0.0/24 로 설정할 경우 192.168.0.? 와 통신할 때 VPN 을 거치고 이외 트랙픽들에 한에서는 VPN 을 사용하지 않는다는 의미이다.
만약 0.0.0.0/0 이면 모든 트래픽들에 대해 VPN을 거치게 된다.
관련 설정에 의미를 보며 CIDR(사이더?) 에 대해 알게되었는데
관련은 이후에 정리해보자