IT
June 21, 2023

Wg-Easy — свой VPN Wireguard с веб-интерфейсом в Docker

Wg-Easy — свой VPN Wireguard с веб-интерфейсом в Docker

Введение

В данной заметке разберем установку своего VPN сервиса Wireguard с удобным веб-интерфейсом с помощью Docker под названием — Wg-Easy

Для этого мы будем использовать VPS заграницей, я пользуюсь VDSina (есть сервера в Амстердаме или Нидерландах 1gb оперативной памяти, 1 ядро, 30gb NVMe, 32tb трафика в месяц за 5р в день), вы можете выбрать любимого хостера и повторить все из данной инструкции.

Вам понадобиться свой домен (рекомендую), так же будет вариант без своего домена, установленный Docker и копипаста из данной заметки.


Установке Wg-Easy со своим доменом и выпуск SSL сертификата

Я буду производить установку на Debian 11, в данной связке будем использовать два контейнера Wg-Easy и Nginx

1. Для начала установим Docker с помощью официального скрипта (если не установлен):

curl https://get.docker.com -o install.sh && sh install.sh
systemctl enable docker.service

systemctl enable docker
usermod -aG docker $USER

2. Далее создадим нужные нам директории и наш docker-compose.yml:

mkdir -p /app/wg-easy/nginx/servers/
cd /app/wg-easy/

Сгенерируем хеш для нашего пароля:

docker run -it ghcr.io/wg-easy/wg-easy wgpw ВАШ_ПАРОЛЬ

#PASSWORD_HASH ='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.$Iu7OOA2/ZIboHN6/oyxca3MWo7fW#39;

Каждый знак $ надо обернуть еще одним знаком $, пример пароля выше:
$2b$12$coPqCsPtcFO.Ab99xylBNOW4.$Iu7OOA2/ZIboHN6/oyxca3MWo7fW$

nano docker-compose.yml

3. Копируем туда содержимое ниже, меняем — WG_HOST на ваше доменное имя и — PASSWORD_HASH на свой пароль для веб-интерфейса:

version: "3.8"

services:
  wg-easy:
    environment:
      - WG_HOST=ВАШ_ДОМЕН.ru
      - PASSWORD_HASH=ВАШ_ХЕШ_ПАРОЛЬ
    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    hostname: wg-easy
    volumes:
      - ./data:/etc/wireguard
    ports:
      - "51820:51820/udp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

  nginx:
    image: weejewel/nginx-with-certbot
    container_name: nginx
    hostname: nginx
    volumes:
      - ./nginx/servers/:/etc/nginx/servers/
      - ./nginx/letsencrypt/:/etc/letsencrypt/
    ports:
      - "80:80/tcp"
      - "443:443/tcp"
    restart: unless-stopped

4. Создаем конфигурационный файл для Nginx, меняем значение в server_name на ваше доменное имя:

nano /app/wg-easy/nginx/servers/wg-easy.conf
server {
    server_name ВАШ_ДОМЕН.ru;

    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;
    }
}

5. Собираем наши контейнеры:

docker compose up -d

Выпускаем бесплатный SSL сертификат для нашего домена

1. Подключаемся в наш контейнер командой ниже:

docker exec -it nginx /bin/sh

2. Меняем в команде ниже значения почты и домена на ваши и вставляем в терминал:

certbot --nginx --non-interactive --agree-tos -m ВАША@ПОЧТА.com -d ВАШ_ДОМЕН.ru

3. Перезагружаем Nginx и выходим из контейнера:

nginx -s reload

exit
Wg-Easy — свой VPN Wireguard с веб-интерфейсом в Docker

4. Переходим в браузер по адресу https://ВАШ_ДОМЕН.ru и вводим пароль который указали в docker-compose.yml файле выше

Wg-Easy — свой VPN Wireguard с веб-интерфейсом в Docker

В самом веб-интерфейсе сложного ничего нет, поэтому останавливаться на нем не буду

Wg-Easy — свой VPN Wireguard с веб-интерфейсом в Docker

Установке Wg-Easy без своего домена

1. Для начала установим Docker с помощью официального скрипта (если не установлен):

curl https://get.docker.com -o install.sh && sh install.sh
systemctl enable docker.service

systemctl enable docker
usermod -aG docker $USER

2. Далее создадим нужные нам директории и наш docker-compose.yml:

mkdir -p /app/wg-easy
cd /app/wg-easy/
nano docker-compose.yml

3. Копируем туда содержимое ниже, меняем — WG_HOST на ваш IP, а — PASSWORD на свой пароль для веб-интерфейса:

version: "3.8"

services:
  wg-easy:
    environment:
      - WG_HOST=ВАШ_IP
      - PASSWORD=ВАШ_ПАРОЛЬ
    image: ghcr.io/wg-easy/wg-easy
    container_name: wg-easy
    hostname: wg-easy
    volumes:
      - ./data:/etc/wireguard
    ports:
      - "51820:51820/udp"
      - "51821:51821/tcp"
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

Собираем наш контейнер:

docker compose up -d

Готово, теперь можно перейти в наш веб-интерфейс по адресу ниже и вести пароль который мы указали в docker-compose.yml:

http://ВАШ_IP:51821/
Wg-Easy — свой VPN сервис с веб-интерфейсом и SSL в Docker

В самом веб-интерфейсе сложного ничего нет, поэтому останавливаться на нем не буду

Wg-Easy — свой VPN сервис с веб-интерфейсом и SSL в Docker

Клиенты для использования Wireguard

Клиентов для Windows, macOS, Android, IOS, Linux можно скачать на официальном сайте.


Вывод

В данной небольшой заметке разобрали установку Wg-Easy, своего VPN сервиса Wireguard в Docker с удобным веб-интерфейсом на своем домене и выпустили на него бесплатный SSL сертификат

Что бы не потерять инструкцию рекомендую подписаться на мой личный блог-канал в Telegram в котором я делюсь в формате заметок своими знаниями и интересным из мира IT, а так же посетить мой сайт, откуда и взята данная заметка, спасибо за потраченное время на чтение и доброго времени суток!)