Self-hosted WireGuard-сервер: от установки до веб-панели
Пошаговое руководство по созданию собственного WireGuard-сервера на Linux: установка, настройка клиентов и подключение веб-панели (wg-easy) для управления.
Содержание
В отличие от коммерческих 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, но официально это не рекомендуется.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ