Добавить в корзинуПозвонить
Найти в Дзене

Как быстро поднять корпоративный VPN на WireGuard для удалёнщиков и филиалов

Проблема В современном мире распределённая работа стала нормой. Сотрудники работают из дома, из командировок, из кофеен, а филиалы компании разбросаны по разным городам и даже странам. Им всем нужен безопасный и надёжный доступ к корпоративным ресурсам. Файловым серверам, базам данных, внутренним порталам. Традиционные решения IPsec и OpenVPN имеют серьёзные недостатки. Они сложны в настройке, требовательны к ресурсам, а их производительность оставляет желать лучшего. OpenVPN, например, работает в пользовательском пространстве, что создаёт дополнительную нагрузку на процессор и увеличивает задержки. IPsec известен своей запутанной конфигурацией и проблемами совместимости между разными реализациями. Администратору нужно решение, которое разворачивается за 10-15 минут, а не за полдня. Даёт высокую пропускную способность и минимальные задержки. Просто в поддержке и не требует постоянного «допиливания». Работает на любом оборудовании от облачного VPS до старого офисного ПК. Решение WireGu

Проблема

В современном мире распределённая работа стала нормой. Сотрудники работают из дома, из командировок, из кофеен, а филиалы компании разбросаны по разным городам и даже странам. Им всем нужен безопасный и надёжный доступ к корпоративным ресурсам. Файловым серверам, базам данных, внутренним порталам.

Традиционные решения IPsec и OpenVPN имеют серьёзные недостатки. Они сложны в настройке, требовательны к ресурсам, а их производительность оставляет желать лучшего. OpenVPN, например, работает в пользовательском пространстве, что создаёт дополнительную нагрузку на процессор и увеличивает задержки. IPsec известен своей запутанной конфигурацией и проблемами совместимости между разными реализациями.

Администратору нужно решение, которое разворачивается за 10-15 минут, а не за полдня. Даёт высокую пропускную способность и минимальные задержки. Просто в поддержке и не требует постоянного «допиливания». Работает на любом оборудовании от облачного VPS до старого офисного ПК.

Решение

WireGuard это современный VPN протокол, который решает все перечисленные проблемы. Он встроен прямо в ядро Linux, работает на уровне L3 и использует современную криптографию (ChaCha20, Poly1305, Curve25519). Его кодовая база составляет всего около 4000 строк. Это делает его не только быстрым, но и безопасным. Негде спрятать уязвимости.

Ключевые преимущества WireGuard перечислены ниже.

Простота настройки. Конфигурация в формате INI с десятком параметров, а не сотни строк.
Высокая производительность. Работает в ядре, что даёт пропускную способность, близкую к пропускной способности самого канала.
Кросс-платформенность. Клиенты доступны для Windows, macOS, Linux, Android и iOS.
Автоматическое переподключение. Клиент сам восстанавливает соединение после потери связи.
Бесшумная работа. Не создаёт постоянного фонового трафика, «просыпается» только при необходимости.

В этой статье мы развернём корпоративный VPN на WireGuard в двух самых частых сценариях. Подключение удалённых сотрудников (road warrior) и объединение филиалов (site to site). В качестве сервера будем использовать Ubuntu 22.04 или 24.04 LTS. Это может быть как облачный VPS, так и физический сервер в офисе.

Пошаговая инструкция

1. Подготовка сервера

1.1. Обновление системы и установка WireGuard

text

sudo apt update && sudo apt upgrade -y
sudo apt install wireguard wireguard-tools -y

Для RHEL подобных систем.

text

sudo dnf install wireguard-tools -y

1.2. Включение IP форвардинга

Чтобы сервер мог передавать трафик между VPN клиентами и корпоративной сетью, необходимо включить пересылку пакетов.

text

sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

Для постоянного применения раскомментируйте строки net.ipv4.ip_forward=1 и net.ipv6.conf.all.forwarding=1 в файле /etc/sysctl.conf, затем выполните.

text

sudo sysctl -p

1.3. Настройка брандмауэра

WireGuard использует один UDP порт (по умолчанию 51820). Откроем его в брандмауэре.

Для ufw.

text

sudo ufw allow 51820/udp
sudo ufw enable

Для firewalld.

text

sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --reload

2. Генерация ключей

WireGuard использует асимметричную криптографию. Каждый участник имеет пару ключей: приватный и публичный. Приватный ключ хранится на стороне участника и никогда не передаётся. Публичным ключом участники обмениваются.

Создадим директорию для хранения ключей и сгенерируем их для сервера.

text

cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key

Аналогично для каждого клиента (на сервере, чтобы потом сразу скопировать конфигурацию).

text

wg genkey | tee client1_private.key | wg pubkey > client1_public.key

Важно. Приватные ключи (*_private.key) должны оставаться на своих устройствах и не передаваться по сети.

3. Настройка сервера

Создадим конфигурационный файл /etc/wireguard/wg0.conf.

text

[Interface]
PrivateKey = <содержимое server_private.key>
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = false

# NAT для клиентов (если нужно дать им доступ в интернет через сервер)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

Пояснение параметров.
Address IP адрес сервера внутри VPN (10.0.0.1/24). Клиенты получат адреса из этой же подсети.
ListenPort порт, на котором сервер ожидает подключений.
PostUp и PostDown команды, выполняемые при поднятии и опускании интерфейса. В данном случае разрешаем пересылку пакетов через интерфейс VPN и настраиваем NAT, чтобы клиенты могли выходить в интернет.

Официальная документация. Подробное описание всех параметров конфигурации доступно на сайте WireGuard.

4. Настройка клиента (сценарий «удалённый сотрудник»)

Для каждого удалённого сотрудника создаётся отдельный конфигурационный файл.

4.1. Добавление клиента в конфигурацию сервера

В файл /etc/wireguard/wg0.conf добавляем секцию для клиента.

text

[Peer]
PublicKey = <публичный ключ клиента>
AllowedIPs = 10.0.0.2/32

Параметр AllowedIPs определяет, какие IP адреса будут направляться через VPN. Для удалённого сотрудника указываем его VPN адрес в формате /32.

Важно. Для нескольких клиентов нужно указывать разные VPN адреса. 10.0.0.2/32, 10.0.0.3/32 и так далее.

4.2. Конфигурационный файл для клиента

Создаём файл client1.conf.

text

[Interface]
PrivateKey = <приватный ключ клиента>
Address = 10.0.0.2/24
DNS = 8.8.8.8

[Peer]
PublicKey = <публичный ключ сервера>
Endpoint = <публичный IP сервера>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Address VPN адрес клиента (должен совпадать с указанным в AllowedIPs на сервере).
DNS DNS сервер, который будет использоваться при активном VPN.
Endpoint публичный IP адрес и порт сервера.
AllowedIPs = 0.0.0.0/0 весь трафик клиента направляется через VPN. Если нужно, чтобы через VPN шёл только трафик к корпоративной сети, а интернет трафик напрямую (split tunneling), указываем только нужные подсети. Например AllowedIPs = 10.0.0.0/24, 192.168.1.0/24.
PersistentKeepalive интервал отправки keepalive пакетов для поддержания соединения. Особенно актуален для клиентов за NAT.

4.3. Импорт конфигурации на клиенте

Windows и macOS. Скачать официальное приложение WireGuard с официального сайта, затем импортировать конфигурационный файл через интерфейс.
Linux. Скопировать файл в /etc/wireguard/wg0.conf и запустить sudo wg-quick up wg0.
Android и iOS. Установить приложение WireGuard из магазина приложений и импортировать конфигурацию через QR код (для этого нужно сгенерировать QR код с помощью утилиты qrencode).

5. Объединение филиалов (site to site VPN)

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

5.1. Предварительные требования

В каждом офисе должен быть выделенный шлюз (роутер или сервер), который будет выступать в роли WireGuard пира.
Локальные подсети в офисах не должны пересекаться. Например, главный офис 192.168.1.0/24, филиал 192.168.2.0/24.
На обоих шлюзах должен быть доступен UDP порт для WireGuard.

5.2. Конфигурация шлюза главного офиса (site A)

Файл /etc/wireguard/wg0.conf.

text

[Interface]
PrivateKey = <приватный ключ site A>
Address = 10.0.0.1/24
ListenPort = 51820

[Peer]
PublicKey = <публичный ключ site B>
AllowedIPs = 192.168.2.0/24, 10.0.0.2/32
Endpoint = <публичный IP филиала>:51820
PersistentKeepalive = 25

5.3. Конфигурация шлюза филиала (site B)

Файл /etc/wireguard/wg0.conf.

text

[Interface]
PrivateKey = <приватный ключ site B>
Address = 10.0.0.2/24
ListenPort = 51820

[Peer]
PublicKey = <публичный ключ site A>
AllowedIPs = 192.168.1.0/24, 10.0.0.1/32
Endpoint = <публичный IP главного офиса>:51820
PersistentKeepalive = 25

5.4. Настройка маршрутизации

Чтобы компьютеры в локальных сетях могли «видеть» друг друга, необходимо выполнить следующие действия.

На каждом шлюзе добавить статические маршруты, указывающие, что трафик в удалённую подсеть нужно направлять через WireGuard интерфейс. Это можно сделать через PostUp в конфигурации.

text

PostUp = ip route add 192.168.2.0/24 dev wg0
PostDown = ip route del 192.168.2.0/24 dev wg0

Включить пересылку пакетов на обоих шлюзах (уже сделано на шаге 1.2).
Настроить NAT (если компьютеры в локальной сети не имеют прямых маршрутов до друг друга). Если оба офиса используют приватные подсети, достаточно включить IP форвардинг. NAT не требуется. Однако если компьютеры в подсетях используют шлюз по умолчанию, необходимо добавить правило NAT.

text

PostUp = iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wg0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -s 192.168.1.0/24 -o wg0 -j MASQUERADE

Убедиться, что брандмауэр на обоих шлюзах разрешает пересылку пакетов между интерфейсами.

text

sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT

Эти правила также можно добавить в PostUp и PostDown.

Официальный пример. Документация Ubuntu содержит подробный пример настройки site to site VPN с WireGuard и пояснениями по маршрутизации.

6. Split tunneling (частичный проброс трафика)

Split tunneling это режим, при котором через VPN направляется только трафик к корпоративной сети, а интернет трафик идёт напрямую через провайдера. Это снижает нагрузку на сервер и уменьшает задержки для интернет трафика.

Для настройки split tunneling достаточно изменить параметр AllowedIPs в конфигурации клиента.

text

AllowedIPs = 10.0.0.0/24, 192.168.1.0/24

Вместо 0.0.0.0/0 указываются только нужные подсети. При этом важно, чтобы на клиенте не было конфликтующих маршрутов.

Рекомендация. Для удалённых сотрудников, которым нужен доступ только к внутренним ресурсам, split tunneling оптимальный выбор. Для администраторов, которые управляют серверами через VPN, часто удобнее полный туннель, чтобы исключить утечку трафика.

7. Запуск и управление

Запуск VPN на сервере.

text

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Проверка статуса.

text

sudo wg show

Вывод должен показывать интерфейс, приватный ключ, порт, а также список пиров с их публичными ключами, последним временем handshake и количеством переданных байт.

Остановка VPN.

text

sudo wg-quick down wg0

Перезагрузка конфигурации без остановки соединений.

text

sudo wg syncconf wg0 <(wg-quick strip wg0)

Устранение распространённых проблем

ПроблемаВероятная причинаРешениеНет handshake (wg show показывает latest handshake: none)Не совпадают публичные ключи, неверный порт или IP адрес endpoint, брандмауэр блокирует UDP портПроверить совпадение ключей на сервере и клиенте. Убедиться, что сервер доступен по указанному IP и порту (nc -vzu <IP> 51820). Открыть порт в брандмауэре.Клиенты не пингуют друг друга или серверНе настроена пересылка пакетов (IP forwarding), клиентский firewall блокирует ICMPВключить IP форвардинг (sysctl net.ipv4.ip_forward=1). Проверить правила iptables, добавить -A FORWARD -i wg0 -j ACCEPT.Есть handshake, но нет доступа к локальным ресурсамОтсутствуют маршруты на клиенте или сервере, не настроен NAT для локальной сетиПроверить таблицу маршрутизации (ip route). Убедиться, что в AllowedIPs указаны нужные подсети. Добавить статические маршруты на шлюзах локальных сетей.VPN работает, но интернет на клиенте пропалAllowedIPs = 0.0.0.0/0 направляет весь трафик через VPN, но на сервере не настроен NAT для выхода в интернетДобавить правило NAT на сервере (iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE). Убедиться, что IP форвардинг включён.Низкая скорость или периодические обрывыMTU слишком большой для данного канала (особенно на мобильных сетях)Уменьшить MTU до 1280 или 1420. Добавить в секцию [Interface] строку MTU = 1280.Ошибка Operation not permitted при запуске wg-quickНедостаточно прав, SELinux блокируетЗапускать с sudo. На RHEL системах установить политику: sudo setsebool -P domain_can_mmap_files 1.

Итог

WireGuard это современный, быстрый и простой в настройке VPN протокол, который идеально подходит для корпоративного использования. Мы разобрали два основных сценария. Подключение удалённых сотрудников (road warrior) и объединение филиалов (site to site). Настройка занимает 10-15 минут, а производительность WireGuard приближается к пропускной способности самого канала.

Настройка VPN на WireGuard сводится к нескольким шагам. Генерация ключей, создание конфигурационных файлов, включение IP форвардинга и настройка брандмауэра. Split tunneling позволяет гибко управлять тем, какой трафик идёт через VPN, снижая нагрузку на сервер. При возникновении проблем достаточно проверить ключи, порты и таблицы маршрутизации. В отличие от OpenVPN, WireGuard не скрывает диагностическую информацию.

Для масштабирования решения на десятки и сотни клиентов рекомендуется использовать централизованные системы управления ключами (например, wg-dynamic или специализированные панели), а также интегрировать аутентификацию с существующим LDAP или Active Directory через скрипты и обёртки вокруг wg set.

Как быстро поднять корпоративный VPN на WireGuard для удалёнщиков и филиалов | Андрей Коровин | Сисадмин | IT-инженер