
WireGuard на Ubuntu VPS для корпоративного удалённого доступа
Настраиваем WireGuard между рабочим компьютером и Ubuntu VPS: отдельные ключи, split tunnel только к внутренним сервисам, firewall, проверка и отзыв доступа.
Содержание
WireGuard подходит для защищённого удалённого доступа сотрудников к сервисам компании: панели мониторинга, внутреннему Git, базе через административный инструмент или SSH на отдельном адресе. В этой схеме Ubuntu VPS получает адрес 10.77.0.1, рабочий ноутбук — 10.77.0.2, а через туннель идёт только подсеть 10.77.0.0/24.
Такой режим называется split tunnel: корпоративные адреса направляются через WireGuard, обычные сайты — через привычное подключение пользователя. В статье рассматривается только доступ сотрудников к внутренним ресурсам организации; VPS не настраивается как шлюз для остального трафика.
Что получится после настройки
WireGuard связывает peers — равноправные узлы с собственными парами ключей. Приватный ключ остаётся на устройстве, а публичный ключ передаётся другой стороне. Сервер разрешает каждому публичному ключу только назначенный адрес.
После настройки:
- WireGuard слушает UDP-порт
51820на VPS; - интерфейс
wg0имеет внутренний адрес10.77.0.1/24; - один ноутбук получает
10.77.0.2/32; - сервисы можно привязать к
10.77.0.1и не публиковать в интернет; - потерянное устройство отключается удалением одного peer.
Подсеть 10.77.0.0/24 приведена как пример частного адресного пространства. До настройки убедитесь, что она не пересекается с домашними, офисными, облачными и контейнерными сетями. Пересечение приведёт к неоднозначным маршрутам.
Подготовьте сервер, не рискуя доступом по SSH
Инструкция рассчитана на поддерживаемый выпуск Ubuntu, VPS с публичным адресом и административный доступ через sudo. Сохраните открытой текущую SSH-сессию и убедитесь, что у вас есть консоль хостера на случай ошибки firewall.
Проверьте адреса, маршруты и действующие правила:
ip -brief address
ip route
sudo ufw status verbose
Команда ip route помогает заметить конфликт с 10.77.0.0/24. UFW — распространённая оболочка управления firewall в Ubuntu. Если сервер использует другой механизм, не смешивайте два набора правил: откройте UDP-порт в действующей системе фильтрации.
Обновите индекс пакетов и установите WireGuard из репозитория Ubuntu:
sudo apt update
sudo apt install wireguard
wg --version
Последняя команда должна вывести установленную версию. Номер в статье не фиксируется: он зависит от выпуска Ubuntu и обновлений.
Создайте ключи сервера
Приватный ключ даёт право представляться сервером. Храните его только на VPS и не вставляйте в тикеты, скриншоты или сообщения. Следующие команды создают защищённый каталог, генерируют приватный ключ и получают из него публичный:
sudo install -m 700 -d /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key'
sudo sh -c 'wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
sudo stat -c '%A %U:%G %n' /etc/wireguard/server.key
umask 077 запрещает новым файлам доступ для группы и остальных пользователей. В выводе stat приватный ключ должен принадлежать root и не иметь прав для других. Публичный ключ можно посмотреть и передать администратору клиента:
sudo cat /etc/wireguard/server.pub
Не выводите server.key. Если приватный ключ уже попал в посторонний журнал или чат, считайте его раскрытым и создайте новую пару.
Подготовьте отдельный ключ ноутбука
Ключ клиента создаётся на самом клиентском устройстве, а не на сервере. В Linux или macOS это можно сделать установленной командой wg:
umask 077
wg genkey > client.key
wg pubkey < client.key > client.pub
На Windows используйте официальное приложение WireGuard и его функцию создания туннеля; приватный ключ останется в конфигурации клиента. Передайте администратору только содержимое client.pub.
У каждого ноутбука должна быть своя пара. Имена вроде client-laptop-anna храните в инвентаре доступа рядом с публичным ключом, владельцем и датой выдачи, но не помещайте персональные данные в публичный репозиторий.
Создайте конфигурацию сервера
На VPS создайте пустой конфигурационный файл с доступом только для root, а затем откройте его в редакторе nano. Первая команда изменяет файловую систему, поэтому убедитесь, что файла wg0.conf ещё нет или его прежняя версия сохранена:
sudo install -m 600 /dev/null /etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf
Вставьте конфигурацию ниже. Замените SERVER_PRIVATE_KEY содержимым /etc/wireguard/server.key, а CLIENT_PUBLIC_KEY — публичным ключом ноутбука. Плейсхолдеры нельзя оставлять буквально.
[Interface]
Address = 10.77.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY
[Peer]
# Рабочий ноутбук одного сотрудника
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.77.0.2/32
Address назначает серверу адрес внутри туннеля. ListenPort — внешний UDP-порт WireGuard. На сервере AllowedIPs связывает публичный ключ клиента только с 10.77.0.2; другому устройству назначают следующий свободный адрес и отдельный блок [Peer].
Проверьте права файла и попробуйте поднять интерфейс вручную:
sudo stat -c '%A %U:%G %n' /etc/wireguard/wg0.conf
sudo wg-quick up wg0
sudo wg show
ip -brief address show wg0
В ip должен появиться wg0 с адресом 10.77.0.1/24. До подключения клиента у peer ещё не будет времени handshake — это нормально. Если wg-quick сообщает об ошибке ключа, немедленно удалите неверно созданный интерфейс командой sudo wg-quick down wg0, исправьте плейсхолдер и повторите проверку.
Откройте только порт WireGuard
При использовании UFW разрешите UDP 51820, не меняя существующее правило SSH:
sudo ufw allow 51820/udp comment 'WireGuard corporate access'
sudo ufw status numbered
В списке должно сохраниться разрешение вашего SSH-порта и появиться новое правило WireGuard. Не включайте UFW по общей инструкции, если раньше он был выключен: сначала составьте полный набор разрешений и обеспечьте доступ через консоль хостера.
IP forwarding для доступа к сервисам на самом VPS не нужен. Не добавляйте NAT/MASQUERADE и маршрут 0.0.0.0/0: они относятся к другой архитектуре и превратили бы сервер в интернет-шлюз.
Настройте клиента как split tunnel
Создайте конфигурацию на ноутбуке. Замените три плейсхолдера: приватный ключ клиента, публичный ключ сервера и публичный IP или DNS-имя VPS.
[Interface]
Address = 10.77.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_PUBLIC_IP:51820
AllowedIPs = 10.77.0.0/24
PersistentKeepalive = 25
Ключевой параметр здесь — AllowedIPs = 10.77.0.0/24: только эта внутренняя сеть идёт через WireGuard. Обычный маршрут в интернет не меняется. PersistentKeepalive = 25 полезен клиенту за NAT или firewall, чтобы входящий ответ мог вернуться через уже созданное сопоставление. Если сеть стабильно работает без него, параметр можно убрать.
Импортируйте файл в официальное приложение WireGuard или поднимите интерфейс через wg-quick на поддерживаемой системе. Конфигурация содержит приватный ключ, поэтому храните файл с доступом только владельца и не отправляйте его по общей почте.
Подключите внутренний сервис к адресу WireGuard
Туннель сам по себе не закрывает уже опубликованный порт. Если панель слушает 0.0.0.0:9000, она по-прежнему доступна на публичном интерфейсе, если firewall это разрешает. Настройте приложение слушать 10.77.0.1:9000 либо закройте публичный вход отдельным проверенным правилом.
Сначала посмотрите фактические слушающие адреса:
sudo ss -lntup
После изменения конфигурации сервиса строка должна содержать 10.77.0.1:9000, а не 0.0.0.0:9000. Убедитесь, что служба умеет запускаться, когда интерфейс wg0 уже поднят; при необходимости задайте зависимость systemd от wg-quick@wg0.service.
Не переносите SSH на адрес WireGuard в первом же изменении. Сначала несколько раз проверьте туннель из другой сети и сохраните аварийный административный путь.
Проверьте handshake и доступ
Включите туннель на ноутбуке и проверьте адрес WireGuard, а затем предусмотренный приложением health endpoint. Эти запросы должны идти только к внутреннему адресу 10.77.0.1 и не меняют маршрутизацию остального трафика:
ping -c 3 10.77.0.1
curl --max-time 5 http://10.77.0.1:9000/health
Порт и путь /health замените на предусмотренную проверку своего сервиса. Отсутствие ответа на ping само по себе не доказывает поломку: ICMP может быть запрещён. Важнее соединение с нужным сервисом.
На VPS посмотрите состояние WireGuard:
sudo wg show
У клиента должны появиться недавний handshake, endpoint и счётчики переданных данных. Если handshake отсутствует, проверяйте публичный адрес, UDP-порт и firewall. Если handshake есть, но сервис не открывается, проверяйте AllowedIPs, адрес wg0, слушающий адрес сервиса и локальный firewall.
После успешного теста включите автоматический запуск сервера:
sudo systemctl enable wg-quick@wg0
sudo systemctl status wg-quick@wg0 --no-pager
Перезагрузка для этой проверки не нужна. Статус должен быть успешным, а sudo wg show — отображать интерфейс.
Как отозвать устройство и удалить настройку
При потере ноутбука удалите соответствующий блок [Peer] из /etc/wireguard/wg0.conf, проверьте файл и примените конфигурацию контролируемым перезапуском интерфейса в согласованное окно. Для нескольких сотрудников заранее предусмотрите краткий разрыв соединений либо используйте wg syncconf после отдельного теста.
Для полного отката сначала остановите автоматический запуск и интерфейс:
sudo systemctl disable wg-quick@wg0
sudo wg-quick down wg0
sudo ufw delete allow 51820/udp
Проверьте ip -brief address, sudo wg show и sudo ufw status. Удалять ключи следует только после решения, что конфигурация больше не понадобится; восстановить приватный ключ из публичного невозможно.
WireGuard защищает транспорт, но не заменяет учётные записи и права внутренних сервисов. У панели по-прежнему должны быть собственная аутентификация, журнал входов и своевременные обновления.
Источники
Самопроверка
Проверьте, что материал усвоен
Ответьте на все вопросы. Результат сохранится только в этом браузере и будет учтён в статистике прочитанных материалов.
Разбираем коротко
Частые вопросы
Для чего WireGuard используется в этой инструкции?
Для защищённого доступа сотрудников к внутренним сервисам компании на Ubuntu VPS. Через туннель направляются только адреса корпоративной сети, а обычный интернет-трафик продолжает идти через подключение пользователя.
Можно ли использовать один приватный ключ на всех устройствах?
Не следует. Каждому устройству нужна собственная пара ключей и отдельный адрес в туннеле. Тогда потерянный ноутбук можно отключить, удалив только его peer, без замены доступа у остальных.
Нужно ли включать маршрутизацию всего интернета через VPS?
Нет. Для доступа к сервисам на самом VPS достаточно маршрута к подсети WireGuard. В конфигурации клиента не используется 0.0.0.0/0, поэтому VPS не становится интернет-шлюзом.


