Site-to-site VPN на WireGuard: объединение офисных сетей
Настройка защищённого канала между офисами с помощью WireGuard: планирование адресации, маршрутизация, пример конфигурации и типичные ошибки.
Содержание
Что такое site-to-site VPN и когда он нужен
Site-to-site VPN (сеть-сеть) позволяет соединить две или более локальные сети через интернет так, чтобы устройства из разных офисов взаимодействовали, как если бы находились в одной подсети. Это необходимо при объединении филиалов, совместной работе с 1С, файловыми серверами, камерами, внутренними сервисами. WireGuard, в отличие от классических IPsec IKEv2, намного проще в настройке и поддержке, а также показывает высокую производительность.
В этой статье мы разберём настройку связи между двумя офисами на примере Linux-роутеров (например, с Ubuntu или Debian), но принципы применимы к любому устройству, где работает WireGuard, включая прошивки роутеров и специализированные шлюзы. Для версии и региона уточняйте актуальные параметры, но общий подход остаётся тем же.
Планирование адресации и маршрутизации
Перед настройкой важно выбрать непересекающиеся подсети в офисах. Если в обоих офисах используется одинаковая локальная сеть (например, 192.168.1.0/24), придётся менять адресацию в одном из них — в противном случае маршруты будут конфликтовать. Рекомендуется выделить под каждый офис отдельный блок, например 10.0.1.0/24 и 10.0.2.0/24.
Для WireGuard нужно назначить виртуальные адреса пирам. Пусть офис A имеет адрес 10.10.10.1/32, офис B — 10.10.10.2/32. Эти адреса используются только внутри VPN-туннеля. Также понадобятся публичные IP-адреса (или динамические с возможностью connect через домен) и порты, обычно UDP 51820.
Маршрутизация в WireGuard строится на параметре AllowedIPs. Он указывает, какие сети доступны за данным пиром. В нашем примере для пира B в конфигурации офиса A нужно указать AllowedIPs = 10.10.10.2/32, 10.0.2.0/24, а для пира A в конфигурации офиса B — AllowedIPs = 10.10.10.1/32, 10.0.1.0/24. Это одновременно разрешает трафик к удалённой сети и организует маршрут.
Пошаговая настройка WireGuard для двух офисов
Ниже приведён пример для двух серверов под Linux. На каждом сервере установите WireGuard (например, apt install wireguard). Генерация ключей выполняется на каждом хосте.
В офисе A (публичный IP 203.0.113.10) создайте файл /etc/wireguard/wg0.conf:
[Interface] Address = 10.10.10.1/32 ListenPort = 51820 PrivateKey = <приватный ключ офиса A> [Peer] PublicKey = <публичный ключ офиса B> AllowedIPs = 10.10.10.2/32, 10.0.2.0/24 Endpoint = 198.51.100.50:51820 PersistentKeepalive = 25
В офисе B (публичный IP 198.51.100.50) конфигурация /etc/wireguard/wg0.conf:
[Interface] Address = 10.10.10.2/32 ListenPort = 51820 PrivateKey = <приватный ключ офиса B> [Peer] PublicKey = <публичный ключ офиса A> AllowedIPs = 10.10.10.1/32, 10.0.1.0/24 Endpoint = 203.0.113.10:51820 PersistentKeepalive = 25
После этого включите интерфейс командой wg-quick up wg0 (или через systemctl enable wg-quick@wg0). Проверьте статус: wg show — пиры должны иметь статус handshake.
Важно включить на обоих серверах форвардинг пакетов. В /etc/sysctl.conf добавьте net.ipv4.ip_forward = 1 и примените sysctl -p. Если используется iptables/nftables, добавьте правило FORWARD для сетей 10.0.1.0/24 и 10.0.2.0/24, а также разрешите трафик на UDP-порт 51820.
На роутерах офисов добавьте маршрут к удалённой подсети через IP WireGuard-интерфейса. Обычно достаточно, чтобы маршрут создавался автоматически через AllowedIPs, но если у вас сложная топология, пропишите статические маршруты.
Проверка соединения и диагностика
После настройки проверьте связь между машинами из разных офисов, например, командой ping с компьютера 10.0.1.10 на 10.0.2.20. Если не работает, выполните следующие шаги.
- Проверьте, что интерфейс wg0 активен и есть handshake (wg show). Отсутствие handshake — проблема с Endpoint или ключами.
- Проверьте правила межсетевого экрана: на UDP-порту 51820 должен быть разрешён входящий трафик, а также разрешено форвардинг между интерфейсами.
- Убедитесь, что на каждом пире в AllowedIPs точно указаны сети удалённой стороны. Например, если забыть указать 10.0.2.0/24, трафик до этой сети не пойдёт через туннель.
- Проверьте наличие маршрута: ip route | grep 10.0.2.0. Если его нет, возможно, нужно вручную добавить маршрут через wg0.
Если ping идёт в одну сторону, но не в другую, проверьте, включен ли форвардинг на каждом роутере и не фильтрует ли межсетевой экран обратные ответы.
Особенности и ограничения
WireGuard безболезненно работает в большинстве ситуаций, но помните о нюансах.
- Dynamic IP: если ваш провайдер выдаёт динамический адрес, используйте доменное имя в Endpoint и обновление DNS. Либо настройте подключение по инициативе с постоянным keepalive.
- Сложные топологии: WireGuard не имеет встроенного роутинга протоколов вроде OSPF. Для больших сетей используйте решения поверх WireGuard, например, с BGP или динамическими маршрутами.
- MTU: стандартное значение MTU для туннеля 1420 стоит проверить под вашу сеть. При проблемах с фрагментацией снизьте MTU.
- Двусторонний инициатор: в конфигурации выше handshake инициализирует тот, кто первый отправляет пакет. Для постоянной доступности используйте PersistentKeepalive на обоих пирах, особенно при NAT.
Этих настроек достаточно для объединения двух офисов. Для большего количества филиалов добавьте соответствующие [Peer] секции на каждом шлюзе и настройте AllowedIPs.
Мини-чеклист
- Убедитесь, что в обоих офисах используются разные подсети (например, 10.0.1.0/24 и 10.0.2.0/24).
- На каждом сервере включен net.ipv4.ip_forward=1 и применён sysctl.
- Межсетевой экран разрешает UDP-порт 51820 и форвардинг трафика между локальными сетями.
- В AllowedIPs на каждом пире указаны обе сети: VPN-адрес пира и удалённая LAN-подсеть.
Частые ошибки
- Использование одинаковых подсетей в офисах — маршруты конфликтуют, трафик не ходит.
- Забыли указать удалённую подсеть в AllowedIPs — VPN-адрес пира пингуется, а рабочие машины нет.
- Не настроен форвардинг на роутере — пакеты от клиентов не проходят через шлюз.
- Закрытый UDP-порт в firewall — не происходит handshake, пир недоступен.
Источники и документация
FAQ
Можно ли использовать WireGuard для site-to-site с динамическими IP-адресами?
Да, если один из пиров имеет статический IP. Для динамических IP используйте домен и PersistentKeepalive. На стороне с динамическим IP достаточно, чтобы он инициировал соединение, а на статическом укажите domain в Endpoint.
Как добавить третий офис в туннель?
Добавьте новый [Peer] блок в конфигурацию каждого существующего роутера. Потребуется сгенерировать ключи для третьего офиса и указать маршруты до его подсети в AllowedIPs. Для централизованного управления рассмотрите mesh-топологию или hub-and-spoke.
WireGuard подходит для больших сетей с десятками офисов?
По производительности — да, но отсутствие встроенной динамической маршрутизации усложняет управление. Для больших топологий применяйте WireGuard в сочетании с BGP или специальными контроллерами. Простая сетка (mesh) становится громоздкой, поэтому чаще используют звезду или BGP.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ