홈서버 내부망 접속을 위한 VPN 구축 (feat.Wireguard)

홈서버 내부망 접속을 위한 VPN 구축 (feat.Wireguard)

한창 홈서버에 Nas , 우분투에 여러가지를 올려 외부에서 접속해 사용하고 있었을 때였다

GitLab, Vaultwarden, omv, DB, portainer 등 막 찍먹해보던 시기였다.

관련 서비스들을 설치해서 외부에서 사용하려니 포트포워딩설정이 추가적으로 필요하였고 각각의 서비스들에게 포트포워딩을 해주는 일이 여간 귀찮은게 아니였다..

그마저도 공유기를 바꾸거나 실수로 설정을 날려먹는등.. 일이 생긴다면 얼마나끔찍한지..

그 뿐만 아니라 외부에 포트를 열어놓는 행위 자체도 나에게는 언젠간 크게 당할거같은.. 그런느낌을 받게했다.

그런생각하면서 어떻게 서버를 켜놨는지 정말 대단하다 👏


이후 이런 문제들을 해결하기 위해 홈서버 내부 VPN 내부망을 구축하게 되었고 이를 보다 쉽게 해준것이 Wireguard 이다

WireGuard: fast, modern, secure VPN tunnel
WireGuard: fast, modern, secure VPN tunnel

홈페이기준 장점은

 Simple & Easy-to-use

Cryptographically Sound

Minimal Attack Surface

High Performance

Well Defined & Thoroughly Considered

라고 하는데 다 집어치우고

기존 유명한 OpenVPN, IPsec VPN 등 과 비교해 보안과 속도가 빠르다는 평가가 많아 (카더라..) 이번에 도입해보게 되었다.

(언젠간 한번 테스트 해보는것도 괜찮을듯 하다)

GitHub - wg-easy/wg-easy: The easiest way to run WireGuard VPN + Web-based Admin UI.
The easiest way to run WireGuard VPN + Web-based Admin UI. - wg-easy/wg-easy

관련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(사이더?) 에 대해 알게되었는데

관련은 이후에 정리해보자