Подробное руководство по настройке VPN-сервера WireGuard: шаг за шагом

Два года назад после известных геополитических событий мне срочно понадобился VPN. Популярные VPN-сервисы банятся каждую неделю. Поэтому я решил поднять свой собственный на хостинге с оплатой криптой BitLaunch и WireGuard VPN в качестве сервера. Взял самый дешевый тариф, и что-то за 2 года к нему накопились вопросы:

  • Очень низкая скорость;
  • Сильно неудобно добавлять новые устройства из консоли;

Основная претензия к скорости. Взял и замерил через Speedtest. Оказалось, мой текущий хостинг режет скорость в 3 раза! Надо было срочно что-то менять.
Но сначала решил освежить тему VPN, какие бывают и от чего защищают. Посмотрел занимательное видео VPN и Proxy: разновидности, их отличия и преимущества.

Кирилл Толкачёв — VPN и Proxy: разновидности, их отличия и преимущества
По сути, VPN делятся на 2 типа: те, которые скрываются от надзорных органов, и те, которые не скрываются.
Те, которые скрываются, яркий представитель Outline VPN.
Фантазия разработчиков этих VPN против великого китайского файрволла бьёт все пределы: и протокол внутри протокола, и маскирование трафика и т. д. У них всё хорошо, только скорость сильно падает.
Те, которые не скрываются, это WireGuard. Он быстрый, но вот легко блокируется надзорными органами. Но у меня 2 года прожил, не заблокировали.
Самое интересное, мне VPN для уголовки не нужен, мне нужен доступ к ChatGPT. Просто там русских не любят. Я даже немецкий прокси купил, но ChatGPT всё равно к себе не пускает.

WireGuard VPN

Начал качать видео по настройке WireGuard. Больше всего понравилось вот это Easiest Way to Install WireGuard VPN!

Easiest Way to Install WireGuard VPN!
и вот это по настройке сервера How to Make Your Own VPN.
How to Make Your Own VPN (And Why You Would Want to)

Инструкция, по сути, простая:

  1. Скачать Docker;
  2. Установить WireGuard вместе с админкой, и всё.

Но большинство «гуру» с Ютуба рассказывали с таким пафосом и многозначительным видом, они так, как будто они не VPN-сервер настраивают, а они арабские шейхи с нефтяными скважинами, и делятся, как заработать первые миллионы, хотя это очень простая задача для сисадмина.

И ещё эти «гуру» забывают, что кроме основного функционала по настройке VPN-сервера есть ещё уйма других операций, которые надо сделать, чтобы сервер нормально заработал, а не стал лёгкой добычей для хакеров.

Настройка сервера

Путём тестирования я выяснил, что оптимальный вариант по скорости для меня у хостера BitLaunch — это сервер Linode в Лондоне. Немного подороже, чем мой первый сервер, зато в разы быстрее.
Итак, создали VPS у хостера.
Обновляем систему, ставим необходимые приложения, меняем тайм-зону и имя сервера

apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y
apt-get install mc htop
timedatectl set-timezone Asia/Yekaterinburg
hostnamectl set-hostname wg-server

Создаём нового обычного пользователя и добавляем ему пароль

useradd -G sudo -m orion55 -s /bin/bash
passwd orion55

Далее на виртуалку необходимо установить на неё свой публичный SSH-ключ для пользователя orion55. Именно ключ, а не пароль. Живому хакеру такая горе-виртуалка на фиг не нужна, а вот хакер-бот будет перебирать пароли круглосуточно, пока не подберёт. Подобрать ключ намного сложнее.

Как это сделать, хорошо описано вот в этой статье Как создать ключ для авторизации по SSH и добавить его на сервер?.

Ставим Docker и Docker Compose

curl -o - https://get.docker.com | bash -
/bin/bash -c "$(curl -fsSL https://git.io/JDGfm)"

Делаем, чтобы обычный пользователь мог управлять Docker.

sudo groupadd docker
sudo usermod -aG docker ${USER}
sudo chmod 666 /var/run/docker.sock
sudo systemctl restart docker

Если сильно надоест перед каждой командой вводить sudo, можно перейти в интерактивный привилегированный режим через команду sudo -i.

И вот он, ответственный момент, ставим сборку нашего VPN WireGuard Easy.

Создадим нужные директории.

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

И файл docker-compose.yml

volumes:
  etc_wireguard:
services:
  wg-easy:
    environment:
      - LANG=ru
      - WG_HOST=1.2.3.4
      - PASSWORD=*****
      - WG_DEFAULT_DNS=77.88.8.8, 208.67.222.222
      - WG_ALLOWED_IPS=192.168.1.0/24, 0.0.0.0/1, 128.0.0.0/1
    image: ghcr.io/wg-easy/wg-easy
    container_name: 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

WG_HOST — подставьте ВАШ IP-адрес сервера, а PASSWORD — пароль

И вот он волнующий момент, запуск нашего сервера

docker compose up -d

Заходим в админку, создаём пользователей

http://ВАШ_IP:51821/

Настраиваем клиентов

Приложения для клиентов для Windows, macOS, Android, iOS, Linux можно скачать на официальном сайте. Я не буду на этом подробно останавливаться, как скачать и настроить клиентов. Можете посмотреть видео про Wireguard в этой статье.

Подробное руководство по настройке VPN-сервера WireGuard: шаг за шагом

Последние штрихи

Не забываем включить firewall.

ufw allow 22
ufw allow 51820
ufw allow 51821
ufw enable

Вывод

В данной статье разобрали установку своего VPN-сервиса WireGuard в Docker-контейнере на базе Wg-Easy с удобным веб-интерфейсом. Теперь мой VPN-сервер находится в Лондоне и ChatGPT меня к себе пускает.