Быстрый старт VPN Обновлено 6 Linux

Self-hosted WireGuard-сервер: от установки до веб-панели

Пошаговое руководство по созданию собственного WireGuard-сервера на Linux: установка, настройка клиентов и подключение веб-панели (wg-easy) для управления.

WireGuardVPNSelf-hostedVPSwg-easy
Содержание
КороткоВ статье описано, как поднять WireGuard-сервер на Ubuntu, создать ключи и конфигурацию, добавить клиентов и развернуть веб-панель wg-easy в Docker. Рассмотрены типичные ошибки и даны рекомендации для безопасной настройки.

В отличие от коммерческих VPN, собственный WireGuard-сервер даёт полный контроль над трафиком и не зависит от политики третьих лиц. В этой статье я покажу, как поднять сервер WireGuard на VPS с Ubuntu 22.04, настроить клиентов и добавить удобную веб-панель для управления. Все команды проверены на свежей системе, но для других версий ОС проверяйте синтаксис.

Перед началом вам понадобится:

  • VPS или домашний сервер с публичным IP-адресом;
  • доступ по SSH;
  • свободное время 15–20 минут.

Подготовка сервера и установка WireGuard

Обновите систему и установите пакет wireguard:

sudo apt update && sudo apt upgrade -y
sudo apt install wireguard -y

Затем нужно разрешить пересылку IP-пакетов. Отредактируйте /etc/sysctl.conf:

echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Если у вас используются правила firewall (ufw), не забудьте открыть порт WireGuard (по умолчанию 51820/udp):

sudo ufw allow 51820/udp

Обратите внимание: в некоторых облачных провайдерах это нужно делать и в панели firewall, и в самой ОС.

Генерация ключей и создание конфигурации сервера

WireGuard работает на основе пары ключей. Создайте их:

cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee server_private.key | sudo wg pubkey | sudo tee server_public.key

Теперь создайте файл конфигурации /etc/wireguard/wg0.conf. Подставьте свой приватный ключ и укажите сеть для VPN (например, 10.10.0.1/24):

[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = <содержимое server_private.key>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Замените eth0 на ваш реальный сетевой интерфейс (проверьте через ip a). После этого запустите сервис:

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Проверьте состояние:

sudo wg show

Интерфейс wg0 должен быть active.

Настройка клиентов и маршрутизация

Для каждого клиента нужно создать свою пару ключей и добавить запись в конфигурацию сервера. Сгенерируйте ключи клиента (например, phone):

cd /etc/wireguard
sudo wg genkey | sudo tee phone_private.key | sudo wg pubkey | sudo tee phone_public.key

Добавьте в /etc/wireguard/wg0.conf блок [Peer]:

[Peer]
PublicKey = <публичный ключ клиента>
AllowedIPs = 10.10.0.2/32

Затем перезапустите WireGuard:

sudo systemctl restart wg-quick@wg0

Теперь создайте конфигурационный файл для клиента, который нужно импортировать в приложение. Пример:

[Interface]
PrivateKey = <приватный ключ клиента>
Address = 10.10.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = <публичный ключ сервера>
Endpoint = <IP-адрес сервера>:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Если нужно разрешить клиентам общаться между собой, включите на сервере параметр AllowedIPs с подсетью целиком или добавьте правила forward. В большинстве случаев достаточно ограничить доступ конкретному клиенту.

Веб-панель для управления WireGuard

Когда количество клиентов растёт, неудобно редактировать конфиг через SSH. На помощь приходят веб-панели. Одна из самых популярных — wg-easy. Она запускается в Docker и позволяет добавлять/удалять клиентов, скачивать их конфиги, просматривать статистику.

Установите Docker, если его нет:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

Затем запустите контейнер wg-easy:

docker run -d \
  --name wg-easy \
  -e WG_HOST=<IP-адрес сервера> \
  -e PASSWORD=<ваш пароль для панели> \
  -v ~/.wg-easy:/etc/wireguard \
  -p 51820:51820/udp \
  -p 51821:51821/tcp \
  --cap-add NET_ADMIN \
  --cap-add SYS_MODULE \
  --sysctl net.ipv4.conf.all.src_valid_mark=1 \
  --sysctl net.ipv4.ip_forward=1 \
  --restart unless-stopped \
  weejewel/wg-easy

После запуска панель будет доступна на порту 51821 (например, http://ваш-сервер:51821). Введите пароль и добавляйте клиентов в один клик. Внимание: wg-easy использует свой собственный конфигурационный файл, поэтому если вы уже настроили WireGuard вручную, эти конфиги не пересекаются. Выберите один способ управления.

Другие варианты — WebButler, Subspace, Firezone. Все они имеют свои особенности, поэтому перед установкой изучите документацию.

Типичные ошибки и советы

Не забывайте открывать UDP-порт 51820 в фаерволе и панели облака. Если клиенты не могут получить доступ в интернет, проверьте, что в PostUp правильно указан интерфейс и что ip_forward включён. При использовании wg-easy без Docker убедитесь, что у вас установлен docker-compose. Для повышения безопасности отключите парольный вход по SSH и используйте только ключи.

Теперь у вас есть собственный WireGuard-сервер, и вы можете добавлять клиентов через консоль или веб-панель. Этот подход подходит для личного использования, а при масштабировании стоит подумать об автоматизации и мониторинге.

Мини-чеклист

  • Убедиться, что порт 51820/udp открыт в фаерволе и облачной панели.
  • Включить пересылку IP-пакетов (net.ipv4.ip_forward=1).
  • Правильно указать сетевой интерфейс в PostUp/PostDown (eth0).
  • Проверить, что сервис wg-quick@wg0 запущен и активен.

Частые ошибки

  • Забывают открыть UDP-порт, поэтому клиенты не подключаются.
  • Путают публичный и приватный ключи при копировании в конфиг.
  • Указывают неверный сетевой интерфейс в правилах iptables.
  • Используют wg-easy без учёта, что он создаёт свою конфигурацию и конфликтует с вручную созданной.

Источники и документация

FAQ

Что делать, если клиент не может зайти в интернет?

Проверьте правила POSTUP и параметр AllowedIPs в конфиге клиента. Убедитесь, что на сервере включён IP-forward и нет блокирующих правил.

Как добавить несколько клиентов?

Для каждого сгенерируйте пару ключей, добавьте блок [Peer] с уникальным IP и AllowedIPs=$IP/32, затем перезапустите wg-quick@wg0.

Можно ли использовать веб-панель на Windows Server?

wg-easy поддерживает Linux; для Windows придётся использовать WSL или Docker Desktop, но официально это не рекомендуется.

Хотите перейти сразу к рабочему доступу?

Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.

Получить доступ

Дальше по теме

Связанные статьи