memos/Home Server/Network/Wireguard.md
2024-09-19 00:04:19 +09:00

2.0 KiB

1. Install

1.1. Directory structure

- /mnt/md0/infra
    - /nginx
        - /conf.d
            - wg-easy.conf
        - /etc.d
            - ...
    - /wg-easy
    - .env
    - compose.yml

1.2. Docker compose

name: infrastructure
service:
  nginx:
      # ...

  wg-easy:
    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    restart: always
    environment:
      - WG_HOST=wg.tuska298.dev # Server hostname
      - PASSWORD_HASH=$$2a$$12$$xHJZ2bWZ7adZNYTDAWdJFuwEAhN3qzQY.ADTb3MLUubkjen9JMs9e # Web UI Password
      # Generate Password hash : https://github.com/wg-easy/wg-easy/blob/master/How_to_generate_an_bcrypt_hash.md
      - WG_PORT=51820
      - PORT=51821
      - LANG=ko
      - WG_DEFAULT_DNS=192.168.200.10,1.1.1.1
    volumes:
      - ${BASE_PATH}/wg-easy:/etc/wireguard:rw
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1
    networks:
      - infra

networks:
  infra:
    driver: bridge

1.3. /nginx/conf.d/wg-easy.conf

server {
    server_name wg.home.server;
    
    include /etc/nginx/etc.d/deny.lan.conf;
    
    location / {
        proxy_pass http://wg-easy:51821/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
    }
}

1.4. 공유기 포트포워딩

udp 51820 포트 개방

1.5. Cloudflare DNS 프록시 해제

  • Cloudflare Domain 구매 시 DNS 기능을 제공
  • 이 떄 DNS에 등록한 IP를 가리고 Cloudflare 서버 IP를 응답하는 프록시 기능을 자동으로 설정함
  • 하지만 Wireguard는 DNS의 응답 결과로 얻은 IP에 80/443 포트가 아닌 다른 포트로 접근하므로 프록시 기능이 정상 작동하지 않음
  • 따라서 Cloudflare DNS의 Wireguard용 subdomain은 프록시 기능을 해제해야 함