Свой AmneziaWG VPN на VDS за вечер: от аренды сервера до подключения в WireSock Secure Connect

от автора

Коротко: арендуем небольшой VDS с публичным IPv4, ставим AmneziaWG и веб-панель одной PowerShell-командой, создаём отдельный профиль для каждого устройства и импортируем .conf в WireSock Secure Connect на Windows.

В статье покажу воспроизводимый способ поднять личный VPN-сервер на Ubuntu/Debian VDS. Серверную часть развернёт мой открытый скрипт amneziawg-vds-setup, а на Windows будем подключаться через WireSock Secure Connect.

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

Что получится

После выполнения шагов у нас будет такая схема:

Windows + WireSock Secure Connect             │        профиль .conf             │ зашифрованный UDP-туннель             ▼VDS: AmneziaWG + awg-easy             │          Интернет

На VDS работают AmneziaWG и русифицированная веб-панель awg-easy. В панели можно выпускать и отзывать клиентские профили. На компьютере WireSock импортирует полученный файл .conf, подключает туннель и при необходимости позволяет настроить split tunneling.

Важно разделять роли:

  • VDS — это сервер с публичным IP-адресом;

  • скрипт устанавливает и проверяет серверную часть;

  • файл .conf — секретный клиентский профиль с приватным ключом;

  • WireSock Secure Connect — Windows-клиент. Он не создаёт VPN-сервер самостоятельно.

Что понадобится

Минимальный практичный набор для одного-нескольких пользователей:

Ресурс

Рекомендация

Виртуализация

KVM или аналог с полноценным ядром Linux

Процессор и память

от 1 vCPU и 1 ГБ RAM

Диск

от 10 ГБ

Сеть

выделенный публичный IPv4, без CGNAT

ОС

чистый Ubuntu или Debian

Доступ

root по SSH: пароль либо ключ

На Windows

PowerShell 7 и OpenSSH Client

Для VPN важнее качество маршрута и доступность UDP, чем большой объём RAM. Географию VDS выбирайте ближе к вашим пользователям и сервисам, с которыми вы легально работаете.

Шаг 1. Арендуем VDS

Подойдёт любой провайдер, который выдаёт публичный IPv4, разрешает входящий UDP и даёт root-доступ к Ubuntu/Debian. При заказе обратите внимание на четыре пункта:

  1. Выберите Ubuntu или Debian. Не берите панельный образ: скрипт ожидает чистую систему.

  2. Убедитесь, что в карточке сервера есть публичный IPv4 и доступ по SSH.

  3. Проверьте, что в личном кабинете или во внешнем firewall можно открыть UDP-порт VPN.

  4. Сохраните IP-адрес сервера и первоначальные реквизиты root-доступа в менеджер паролей.

В качестве одного из вариантов можно использовать HostVDS. Это партнёрская ссылка: при заказе по ней я могу получить вознаграждение, а для вас условия заказа не меняются. Выбор провайдера остаётся за вами.

После создания VDS полезно сразу проверить вход по SSH из Windows:

ssh root@203.0.113.10

Замените 203.0.113.10 на IP своего сервера. При первом подключении подтвердите отпечаток ключа сервера только после сверки его с данными из личного кабинета провайдера. Если вход не проходит, сначала исправьте это: причинами обычно бывают ещё не завершившееся создание VDS, неверный пароль, закрытый 22/TCP или запрет root-входа в выбранном образе.

Какие порты понадобятся

Необязательно открывать всё подряд. Достаточно следующего набора:

Порт

Протокол

Для чего

22

TCP

администрирование SSH

1234

UDP

VPN по умолчанию

51821

TCP

веб-панель без TLS

80 и 443

TCP

только при включении TLS через домен

Порт VPN и порт панели можно изменить при запуске скрипта. Если у провайдера есть облачный firewall, откройте порты и там: настройка UFW внутри VDS не отменяет правила внешнего firewall.

Шаг 2. Подготовим Windows

Скрипт написан для PowerShell 7. Проверим его наличие:

pwsh --versionssh -V

Если первая команда не найдена, установите PowerShell 7 с официального сайта Microsoft. OpenSSH Client обычно уже установлен в Windows 10/11; при его отсутствии добавьте компонент «Клиент OpenSSH» в Параметры → Система → Дополнительные компоненты.

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

git clone https://github.com/chelslava/amneziawg-vds-setup.gitcd .\amneziawg-vds-setup

Либо скачайте ZIP со страницы репозитория и распакуйте его. Клонирование удобнее: для обновления достаточно выполнить git pull.

Перед запуском полезно открыть README.md и проверить, что запускается именно ожидаемый файл Install-AmneziaWG.ps1. Не передавайте SSH-пароль в аргументах командной строки и не сохраняйте его в .ps1, заметках или конфигурации проекта.

Шаг 3. Устанавливаем AmneziaWG и панель

Самый простой запуск

В PowerShell 7 из каталога репозитория выполните:

pwsh -ExecutionPolicy Bypass -File .\Install-AmneziaWG.ps1

Скрипт последовательно спросит IP-адрес или DNS-имя VDS и покажет защищённое стандартное окно ввода SSH-учётных данных. По умолчанию предполагается пользователь root.

Для первого развёртывания это всё. Скрипт:

  • проверит SSH-доступ и сохранит ключ хоста в known_hosts;

  • установит Docker и нужные пакеты на Ubuntu/Debian;

  • включит IP forwarding на хосте;

  • запустит контейнер ghcr.io/yokitoki/awg-easy:latest в host-сети;

  • создаст случайный bcrypt-пароль для панели;

  • дождётся статуса healthy, проверит HTTP 200, UDP-порт VPN и awg show;

  • в конце выведет адрес панели и одноразово покажет её пароль.

Данные сервера и выпущенные клиентские профили остаются на VDS в /opt/awg-easy. Не удаляйте этот каталог: иначе клиенты перестанут быть управляемыми через панель.

Запуск с явными параметрами

Ниже пример с IP-адресом, портом VPN по умолчанию и включением UFW-правил, если UFW уже активен:

pwsh -ExecutionPolicy Bypass -File .\Install-AmneziaWG.ps1 `  -HostName 203.0.113.10 `  -SshUser root `  -VpnPort 1234 `  -WebPort 51821 `  -ConfigureUfw

-ConfigureUfw не включает UFW сам и не меняет неактивный firewall: в этом случае скрипт выведет предупреждение. Поэтому порты всё равно нужно контролировать в панели VDS-провайдера.

Если root-доступ уже переведён на SSH-ключ, пароль вообще не понадобится:

pwsh -ExecutionPolicy Bypass -File .\Install-AmneziaWG.ps1 `  -HostName vpn.example.net `  -SshUser root `  -IdentityFile "$env:USERPROFILE\.ssh\id_ed25519"

Путь к ключу укажите свой. Скрипт использует ключ только для SSH-сессии и не копирует его на VDS.

Вариант с HTTPS для панели

Открытая в HTTP панель на http://IP:51821 подходит только для первоначальной настройки в доверенной сети. Для постоянного доступа лучше подключить домен и TLS.

До запуска создайте DNS-запись типа A, например vpn.example.net, указывающую на IPv4 VDS. Затем дождитесь, пока имя резолвится в этот адрес, и выполните:

pwsh -ExecutionPolicy Bypass -File .\Install-AmneziaWG.ps1 `  -HostName vpn.example.net `  -TlsDomain vpn.example.net `  -ConfigureUfw `  -RestrictPanelToTls

В этом режиме скрипт запускает Caddy в отдельном контейнере и проксирует панель на HTTPS. Для выпуска сертификата должны быть доступны 80/TCP и 443/TCP снаружи. Ключ -RestrictPanelToTls закрывает прямой WebPort через UFW, но только если UFW активен; для полной защиты добавьте аналогичное правило во внешнем firewall провайдера.

Шаг 4. Первый вход в панель и выпуск профиля

После успешной установки терминал выведет примерно такую информацию:

Готово. Панель: http://203.0.113.10:51821Пароль панели: <случайный пароль>VPN: UDP 1234

Откройте адрес панели в браузере, войдите с выведенным паролем и сразу сохраните его в менеджер паролей. Не вставляйте его в скриншоты, тикеты или публичные чаты. При включённом TLS адрес будет https://vpn.example.net.

Дальше в панели:

  1. Нажмите + и создайте клиента, например windows-laptop.

  2. Скачайте его конфигурацию .conf. QR-код удобен для мобильных приложений, а для WireSock на Windows нужен именно файл.

  3. Повторяйте это для каждого устройства: phone, work-laptop, tablet и так далее.

  4. Если устройство потеряно или больше не используется, удалите/отзовите соответствующего клиента в панели и создайте новый профиль, а не передавайте старый файл другому человеку.

Файл .conf содержит приватный ключ. Относитесь к нему как к паролю: не кладите в Git, облачную папку с общим доступом, почту или мессенджер без защищённой передачи.

Шаг 5. Подключаемся из WireSock Secure Connect

Скачайте WireSock Secure Connect только с официального сайта и установите актуальную версию для своей архитектуры Windows. После установки:

  1. Запустите WireSock Secure Connect.

  2. На первом экране нажмите Browse и выберите созданный файл .conf; также файл можно перетащить в окно приложения.

  3. Убедитесь, что профиль появился в списке, выберите его и нажмите Connect.

  4. Проверьте, что статус сменился на подключённый, а внешний IP на сайте проверки IP совпал с IP вашего VDS.

WireSock импортирует обычные WireGuard-конфигурации и Amnezia-совместимые профили. Импорт должен выполняться без ручного редактирования файла — именно так сохраняются ключи, адреса, порт и параметры, которые панель выдала в паре с сервером.

Настройки, которые стоит проверить

Для первой проверки оставьте настройки профиля по умолчанию и сначала добейтесь стабильного соединения. Затем при необходимости откройте Preferences → Profiles → Edit:

  • Tunneled networks / addresses: значение 0.0.0.0/0, ::/0 направляет весь IPv4/IPv6-трафик через VPN. Если оно изменено, получится выборочная маршрутизация.

  • Bypass LAN Traffic: включайте только в доверенной домашней/офисной сети, если нужны принтер, NAS или другие локальные устройства. На публичном Wi-Fi лучше не включать.

  • Split tunneling по приложениям: добавляйте его только когда точно понимаете требуемый маршрут. В WireSock список приложений действует совместно со списком сетей: трафик должен удовлетворять обоим условиям.

Не меняйте вручную параметры на вкладке DPI protection в импортированном профиле, пока базовое соединение не проверено. Параметры AmneziaWG должны совпадать на клиенте и сервере. В частности, скрипт использует awg-easy, который выдаёт AmneziaWG Legacy-совместимые конфигурации, а не устанавливает официальный AmneziaWG 2.0. Возможности WireSock по локальной обфускации и параметры сервера — это разные уровни настройки; подмена значений «наугад» часто приводит к отсутствию handshake.

Что делать, если не подключается

Лучший порядок диагностики — идти от сервера к клиенту, не меняя несколько параметров разом.

1. Проверить состояние через скрипт

pwsh -ExecutionPolicy Bypass -File .\Install-AmneziaWG.ps1 `  -HostName 203.0.113.10 `  -Mode Status

При нестандартных портах и TLS повторите те же -VpnPort, -WebPort и -TlsDomain, с которыми сервер был установлен. Режим Status ничего не переустанавливает: он проверяет контейнер, локальный HTTP, порты и интерфейс AmneziaWG.

2. Проверить firewall

Нужны минимум UDP-порт VPN и TCP-порт панели или 443/TCP при TLS. Проверьте две точки: правила у VDS-провайдера и состояние UFW на самой машине. Типичный симптом закрытого UDP — WireSock не получает handshake, хотя панель в браузере открывается.

3. Посмотреть состояние на сервере

Подключитесь по SSH и выполните:

docker inspect -f '{{.State.Health.Status}}' amnezia-wg-easydocker exec amnezia-wg-easy awg showdocker logs --tail=100 amnezia-wg-easy

Первой командой ожидается healthy. После попытки соединения WireSock во второй команде у соответствующего peer должен появиться свежий handshake и переданные байты. Не публикуйте полный вывод логов, если он содержит адреса, имена клиентов или конфигурационные данные.

4. Проверить WireSock

Убедитесь, что импортирован именно свежий .conf нужного клиента, выбран правильный профиль, а системное время Windows установлено корректно. Посмотрите журнал приложения. Если вы уже включали split tunneling, temporary верните режим всего трафика и повторите проверку. Если параметры DPI protection менялись вручную — восстановите профиль из исходного .conf или импортируйте его повторно.

Эксплуатация после установки

Обновить контейнер

Сначала обновите локальный репозиторий, затем запустите режим обновления:

git pullpwsh -ExecutionPolicy Bypass -File .\Install-AmneziaWG.ps1 `  -HostName 203.0.113.10 `  -Mode Update

Режим Update скачивает актуальный образ и перезапускает контейнер, сохраняя каталог /opt/awg-easy/wireguard и пароль панели. При нестандартных параметрах укажите их повторно, например -VpnPort, -WebPort, -TlsDomain и -ConfigureUfw, чтобы проверка и TLS-конфигурация использовали те же значения.

Что не стоит делать без необходимости

  • Не используйте -Mode Reconfigure -Force как обычное обновление: этот режим намеренно создаёт новый пароль панели.

  • Не удаляйте /opt/awg-easy/wireguard и не переносите его в публичные хранилища.

  • Не оставляйте SSH root с постоянным паролем. После первого входа лучше настроить SSH-ключ, отключить парольный root-вход согласно политике администрирования и хранить резервную консоль провайдера на случай ошибки.

  • Не используйте один клиентский профиль на всех устройствах — так невозможно безопасно отозвать только одно устройство.

Минимальный чек-лист безопасности

  1. Уникальный пароль панели находится в менеджере паролей.

  2. SSH доступен по ключу, а не по постоянному паролю.

  3. Во внешнем firewall открыты только действительно нужные порты.

  4. Панель доступна по HTTPS или ограничена доверенным IP-адресом.

  5. На каждом устройстве — отдельный .conf.

  6. Перед обновлениями есть резервная копия данных VDS и понятный план восстановления.

Итог

В результате получился не «VPN-сервис с общей учётной записью», а контролируемый личный сервер: вы выбираете провайдера, управляете клиентами в панели и можете отозвать конкретный ключ без переустановки всей инфраструктуры. Скрипт снимает рутинные этапы Docker-настройки и первичной проверки, а WireSock Secure Connect даёт на Windows удобный импорт профиля, подключение и настройки маршрутизации.

Исходный код скрипта и актуальные параметры запуска: chelslava/amneziawg-vds-setup. Документация по импорту, редактированию профилей и split tunneling: WireSock Secure Connect.

ссылка на оригинал статьи https://habr.com/ru/articles/1060394/