Самостоятельно размещённый WireGuard VPN даёт вашему ноутбуку и телефону зашифрованный путь к серверу, который вы контролируете. Это полезно, когда нужен стабильный исходящий IP, безопасный доступ через ненадёжный Wi-Fi или приватный маршрут в другую сеть. Анонимности это не даёт: сайты по-прежнему видят один адрес VPS, а хостинг-провайдер по-прежнему управляет базовой сетью.
В этом руководстве создаётся VPN с полным туннелем IPv4 на Ubuntu Server. Вы установите WireGuard, сгенерируете ключи с ограничительными правами, включите маршрутизацию, добавите правила брандмауэра и NAT, подключите настольные и мобильные клиенты и проверите туннель. Та же схема подходит и для IPv6, но только после того, как у VPS появится маршрутизируемое пространство IPv6, а вы отдельно настроите пересылку и правила брандмауэра для IPv6.
Что такое WireGuard?
WireGuard — это современный кроссплатформенный VPN-протокол и его реализация, которые передают зашифрованные IP-пакеты поверх UDP. Спецификация протокола WireGuard Спецификация задаёт фиксированный набор криптографических примитивов, включая ChaCha20-Poly1305, Curve25519, BLAKE2s, SipHash24 и HKDF. Такая намеренно компактная схема упрощает настройку и аудит по сравнению с протоколами, где много взаимозаменяемых наборов шифров.
В WireGuard нет ни центральной системы учётных записей, ни встроенного каталога пользователей. Каждое устройство — это узел со своей парой ключей, адресом в туннеле и правилами AllowedIPs. На VPS один узел обычно выступает шлюзом, обращённым в интернет, а ноутбуки и телефоны сами инициируют подключения к нему.
Зачем использовать WireGuard на VPS?
- Простая модель узлов: Каждое устройство получает одну пару ключей и одну запись узла.
- Малая поверхность атаки: WireGuard использует компактный протокол и фиксированный набор криптографии вместо длинного списка устаревших опций.
- Хорошая производительность: Интеграция в ядро Linux и эффективная криптография способны обеспечить высокую пропускную способность, хотя результат всё равно зависит от CPU, пропускной способности сети, задержки и размера пакетов.
- Кроссплатформенные клиенты: Официальные клиенты доступны для Windows 10 и 11, macOS, Android и iOS, а Linux и несколько систем BSD предоставляют нативные инструменты или пакеты.
- Роуминг: Узел может менять сети и исходные IP-адреса, не получая новой идентичности WireGuard: сервер запоминает последнюю аутентифицированную конечную точку.
- Понятное управление маршрутизацией: AllowedIPs определяет и то, какие адресаты идут через туннель, и то, какие туннельные адреса принадлежат каждому узлу.
Дополнительное чтение: руководство Cloudzy по выбору VPS для VPN. Для более старых развёртываний см. руководство Cloudzy по настройке PPTP; не выбирайте PPTP для нового VPN, где важна безопасность.
Пропустить ручную настройку: WireGuard в один клик
Если у вас нет технической подготовки или вы просто не хотите заниматься установкой сами, у Cloudzy есть развёртывание WireGuard VPN в один клик. Остальная часть руководства посвящена ручной сборке, а этот раздел — короткому пути.
- Войдите в панель управления Cloudzy.
- Выберите WireGuard в списке приложений.
- Создайте VPS в нужной локации на выбранном тарифе. Достаточно машины с Ubuntu и базовыми характеристиками.
Когда VPS будет готов, войдите на него и выполните следующую команду, чтобы вывести конфигурацию:
cat client.conf
Вы увидите что-то вроде этого:
Используйте эту конфигурацию, чтобы создать новый туннель в клиенте WireGuard на вашем ПК, и подключение готово. Если же вы хотите разобраться в каждой детали или вам нужна схема, которую готовый образ не покрывает, переходите к ручной сборке ниже.
Как настроить WireGuard на Ubuntu
Команды ниже рассчитаны на актуальный выпуск Ubuntu Server. Выполняйте их по SSH от пользователя с правами sudo. Не закрывайте SSH-сессию, пока не убедитесь, что брандмауэр настроен верно, и сначала сделайте снимок VPS, если провайдер это поддерживает.
Требования
- Один VPS с Ubuntu и публичным адресом IPv4
- Учётная запись без прав root, но с доступом sudo
- Доступ по SSH и данные аварийной консоли провайдера VPS
- Одно клиентское устройство с официальным приложением WireGuard или консольными утилитами
Второй сервер с Ubuntu не нужен. Клиентом может быть ПК с Windows, Mac, ноутбук с Linux, телефон на Android или iPhone.
Шаг 1. Установка WireGuard
sudo apt update
sudo apt install wireguard -y
Убедитесь, что утилиты доступны:
wg --version
Шаг 2. Безопасная генерация ключей сервера
Создайте каталог WireGuard и сгенерируйте пару ключей с ограничительным umask. Приватный ключ нельзя копировать на клиент или публиковать в логах.
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
Выводите ключи тогда, когда их нужно вставить в файлы конфигурации:
sudo cat /etc/wireguard/server.key
sudo cat /etc/wireguard/server.pub
Шаг 3. Создание конфигурации сервера
Откройте конфигурацию интерфейса:
sudo nano /etc/wireguard/wg0.conf
Вставьте следующий блок и замените SERVER_PRIVATE_KEY приватным ключом из предыдущего шага:
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
Туннельная сеть 10.8.0.0/24 приведена лишь для примера. Выберите другой частный диапазон, если он пересекается с домашней, офисной или облачной сетью, к которой вам нужен доступ. Не добавляйте SaveConfig = true: этот параметр может перезаписать файл при остановке интерфейса и стереть правки, сделанные вручную.
sudo chmod 600 /etc/wireguard/wg0.conf
Шаг 4. Включение пересылки IPv4
VPS должен маршрутизировать пакеты между wg0 и своим публичным сетевым интерфейсом. Поместите этот параметр в отдельный файл sysctl:
sudo nano /etc/sysctl.d/70-wireguard-routing.conf
net.ipv4.ip_forward = 1
Примените и проверьте:
sudo sysctl -p /etc/sysctl.d/70-wireguard-routing.conf
sysctl net.ipv4.ip_forward
Здесь используется модель маршрутизации из руководства Ubuntu по шлюзу WireGuard. Для IPv6 нужны маршрутизируемый префикс IPv6, отдельные адреса в туннеле, пересылка IPv6 и правила брандмауэра для IPv6; не направляйте клиентский трафик в ::/0, пока этот путь не готов полностью.
Шаг 5. Добавление правил брандмауэра и NAT
Определите имя публичного интерфейса VPS. В выводе ниже обратите внимание на значение после dev; распространённые имена: eth0, ens3 и enp1s0.
ip route show default
Снова откройте wg0.conf и добавьте следующие строки в раздел [Interface]. Замените eth0 везде, если ваш публичный интерфейс называется иначе:
PostUp = iptables -I FORWARD 1 -i %i -o eth0 -j ACCEPT; iptables -I FORWARD 1 -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PreDown = iptables -D FORWARD -i %i -o eth0 -j ACCEPT; iptables -D FORWARD -i eth0 -o %i -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Если UFW активен, сначала разрешите SSH, а уже потом меняйте его состояние и открывайте UDP-порт WireGuard:
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw status
Если UFW сейчас выключен, а вы хотите его включить, сначала убедитесь, что правило OpenSSH существует. Не отключайте и не включайте UFW заново по SSH только ради применения этих правил: это создаёт лишний риск потерять доступ.
Шаг 6. Запуск интерфейса WireGuard
sudo systemctl enable --now wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
sudo wg show
Если служба не запускается, сначала выполните journalctl и только потом меняйте что-либо ещё:
sudo journalctl -u wg-quick@wg0 -n 50 --no-pager
Добавление клиента WireGuard
Каждому устройству нужны собственная пара ключей и собственный IP в туннеле. Никогда не используйте одну клиентскую конфигурацию на двух устройствах: одинаковые ключи и адреса делают маршрутизацию непредсказуемой и мешают аккуратно отозвать доступ.
Шаг 1. Генерация ключей клиента
Официальные настольные и мобильные приложения могут сгенерировать ключи при создании пустого туннеля. На клиенте с Linux используйте:
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
Держите client.key на этом устройстве. На сервер копируйте только client.pub.
Шаг 2. Добавление узла на сервере
sudo nano /etc/wireguard/wg0.conf
Добавьте один блок узла. Замените CLIENT_PUBLIC_KEY публичным ключом клиента:
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32
Строка Address = 10.8.0.2/32 задаёт адрес в туннеле на стороне клиента. В блоке [Peer] на сервере параметр AllowedIPs = 10.8.0.2/32 связывает этот адрес с данным узлом для маршрутизации и проверки источника. Для следующего устройства возьмите 10.8.0.3/32 и продолжайте по возрастанию без повторов.
sudo systemctl restart wg-quick@wg0
Шаг 3. Сборка конфигурации клиента
Создайте на клиенте файл client.conf и замените все заполнители:
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.8.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = VPS_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0 превращает это в полный туннель IPv4. Чтобы получить доступ только к сети VPN, используйте AllowedIPs = 10.8.0.0/24. Параметр PersistentKeepalive полезен клиенту за NAT, которому нужно, чтобы сопоставление оставалось доступным в простое; краткое руководство WireGuard отмечает, что большинству узлов он не нужен.
Шаг 4. Импорт конфигурации
Используйте раздел руководство по установке клиентов WireGuard , чтобы получить поддерживаемый клиент для вашей платформы.
- Windows: Выберите Add Tunnel, затем импортируйте client.conf.
- macOS: Выберите Import tunnel(s) from file и укажите client.conf.
- Android или iOS: Импортируйте файл или отсканируйте сгенерированный из него QR-код.
На клиенте с Ubuntu или Debian, где лежит client.conf, установите qrencode и выведите файл в терминале этого клиента:
sudo apt install qrencode -y
qrencode -t ansiutf8 < client.conf
QR-код содержит приватный ключ клиента. Показывайте его только в доверенном терминале, не сохраняйте скриншоты и очистите терминал после того, как телефон его импортирует.
Шаг 5. Проверка туннеля
Активируйте туннель, создайте трафик с клиента и выполните эти проверки на VPS:
sudo wg show
ip -brief address show wg0
Свежее рукопожатие и растущие счётчики трафика подтверждают, что WireGuard обменивается пакетами. Затем проверьте выход через полный туннель со стороны клиента:
curl -4 https://api.ipify.org; echo
Команда должна вернуть публичный адрес IPv4 вашего VPS. Если рукопожатия нет, проверьте адрес конечной точки, UDP-порт, облачный брандмауэр, правило UFW и ключи. Если рукопожатие есть, но интернет не работает, проверьте пересылку IP, имя публичного интерфейса, правила NAT и DNS.
Можно ли поставить WireGuard за Nginx?
Удалённый документация модуля stream в NGINX объясняет, как NGINX может ретранслировать UDP с одного порта на другой, то есть перенаправлять UDP/80 или UDP/443 на WireGuard, слушающий UDP/51820. Это UDP-ретранслятор, а не обратный прокси HTTP. Он не превращает WireGuard в TCP или HTTPS и не заставляет протокол выглядеть как обычный веб-трафик.
В большинстве случаев проще изменить ListenPort у WireGuard и открыть соответствующий UDP-порт, чем добавлять NGINX. Если сеть полностью блокирует UDP или применяет глубокую инспекцию пакетов, UDP-ретранслятор на NGINX проблему не решит. Документация об ограничениях WireGuard Документация об ограничениях WireGuard прямо указывает, что обфускация выходит за рамки протокола.
Подключение VPS к домашней сети
VPS может выступать концентратором между мобильным клиентом и устройством у вас дома. Домашний узел сам устанавливает исходящее соединение WireGuard с VPS, поэтому публичный IP дома не нужен. Задайте PersistentKeepalive на этом домашнем узле, если он находится за NAT.
Чтобы достучаться до всей домашней сети, одного добавленного узла мало. В записи узла на VPS, соответствующей домашнему шлюзу, должна быть указана домашняя подсеть в AllowedIPs, например 192.168.1.0/24. Удалённый клиент с полным туннелем (AllowedIPs = 0.0.0.0/0) и так отправляет этот трафик через VPS; добавляйте 192.168.1.0/24 на клиент только при раздельном туннелировании. Домашний шлюз тоже должен пересылать трафик между WireGuard и локальной сетью. Добавьте либо маршрут на домашнем роутере, либо аккуратно ограниченное правило NAT на домашнем шлюзе. Сначала проверьте пересечения: клиент, подключённый к другой сети 192.168.1.0/24, не сможет корректно маршрутизировать обе сети без перенумерации или более сложной политики маршрутизации.
Самостоятельный WireGuard против коммерческого VPN
Самостоятельный хостинг меняет то, кто управляет VPN, но сам по себе не повышает анонимность. Личный VPS даёт один стабильный исходящий IP, который легко связать с сетью хостинг-провайдера. Коммерческий сервис обычно предлагает общие исходящие адреса и простое переключение локаций, но полагаться приходится на его политики, эксплуатацию и независимые аудиты, если он их публикует.
Сам по себе WireGuard нетребователен, и небольшого VPS часто достаточно для одного человека и нескольких устройств. Не воспринимайте конкретные цифры RAM или vCPU как гарантию пропускной способности. Протестируйте с реальным числом устройств, своим регионом, размером пакетов и ожидаемой полосой, а затем измените размер сервера, если упрётесь в загрузку CPU, потерю пакетов или задержку.
Выбирайте самостоятельный хостинг, когда стабильный личный исходящий IP, удалённый доступ или контроль над сервером важнее выбора локаций и удобства. Выбирайте коммерческий VPN, когда нужны много стран, общие точки выхода, широкая поддержка бытовых устройств и чтобы сбоями занимался кто-то другой.
| Критерий выбора | Самостоятельный WireGuard | Коммерческий VPN |
|---|---|---|
| Модель стоимости | Один сервер плюс ваше время на администрирование | Подписка, часто со скидкой при длительном сроке |
| Локации выхода | Одна локация на сервер | Множество локаций прямо в приложении |
| Настройка | Вы сами настраиваете ключи, маршрутизацию, правила брандмауэра и клиентов | Установить приложение и войти в аккаунт |
| Обслуживание | Вы сами обновляете, следите, делаете резервные копии и разбираетесь с проблемами | Сервисом занимается провайдер |
| Модель приватности | Сервер контролируете вы, но хостинг-провайдер по-прежнему видит метаданные | Вы полагаетесь на политики провайдера и независимые аудиты, если он их публикует |
| Оптимальный выбор | Стабильный личный исходящий IP, удалённый доступ и контроль над инфраструктурой | Переключение локаций, минимум обслуживания и широкая поддержка устройств |
Заключение
Надёжное развёртывание WireGuard сводится к пяти вещам: защищённые приватные ключи, уникальные адреса узлов, правильные AllowedIPs, работающие пересылка и NAT, а также правило брандмауэра для прослушиваемого UDP-порта. Прежде чем полагаться на туннель, проверьте и рукопожатие, и публичный адрес выхода, а после развёртывания регулярно обновляйте VPS.
Если вы хотите собрать сервер вручную, начните с чистого Cloudzy Ubuntu VPS решение. Если же вы предпочитаете пропустить установку, воспользуйтесь развёртыванием WireGuard в один клик от Cloudzy и сразу переходите к настройке клиентов и проверке.
Часто задаваемые вопросы
Почему WireGuard показывает узел, но рукопожатия нет?
Запись узла лишь подтверждает, что конфигурация загрузилась. Отсутствие рукопожатия обычно означает, что клиент не достучался до сервера или ключи не совпадают. Проверьте Endpoint на клиенте, публичный IP сервера, порт UDP/51820 и в брандмауэре провайдера, и в UFW, а также публичные ключи с обеих сторон. Перед проверкой создайте трафик с клиента: в простое WireGuard молчит.
Почему туннель подключается, но интернет пропадает?
Рукопожатие без доступа в интернет обычно указывает на маршрутизацию, а не на шифрование. Проверьте net.ipv4.ip_forward, убедитесь в правильности имени публичного интерфейса в правиле NAT, просмотрите правила FORWARD и протестируйте DNS отдельно от связности по чистому IP. Также убедитесь, что AllowedIPs на клиенте соответствует задуманной схеме полного или раздельного туннеля.
Нужен ли PersistentKeepalive каждому клиенту?
Нет. Добавляйте его, когда узлу за NAT нужно держать сопоставление открытым в периоды простоя, что типично для телефонов, домашних шлюзов и некоторых ограничивающих сетей. Не указывайте его, если узел общается часто или ему не нужно, чтобы удалённая сторона достучалась до него в простое.