Зашифрованный туннель соединяет рабочий ноутбук с корпоративным сервером
Сети

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 защищает транспорт, но не заменяет учётные записи и права внутренних сервисов. У панели по-прежнему должны быть собственная аутентификация, журнал входов и своевременные обновления.

Источники

Рекламное местоВаша компания здесьРазместить рекламу

Самопроверка

Проверьте, что материал усвоен

Ответьте на все вопросы. Результат сохранится только в этом браузере и будет учтён в статистике прочитанных материалов.

01Что означает AllowedIPs = 10.77.0.0/24 на клиенте?
02Как отозвать доступ одного потерянного устройства?
03Что подтверждает команда wg show после подключения?

Разбираем коротко

Частые вопросы

Для чего WireGuard используется в этой инструкции?

Для защищённого доступа сотрудников к внутренним сервисам компании на Ubuntu VPS. Через туннель направляются только адреса корпоративной сети, а обычный интернет-трафик продолжает идти через подключение пользователя.

Можно ли использовать один приватный ключ на всех устройствах?

Не следует. Каждому устройству нужна собственная пара ключей и отдельный адрес в туннеле. Тогда потерянный ноутбук можно отключить, удалив только его peer, без замены доступа у остальных.

Нужно ли включать маршрутизацию всего интернета через VPS?

Нет. Для доступа к сервисам на самом VPS достаточно маршрута к подсети WireGuard. В конфигурации клиента не используется 0.0.0.0/0, поэтому VPS не становится интернет-шлюзом.