· 15 мин чтения

WireGuard VPN-сервер на Linux: готовая инструкция для удалённого доступа в офис

Меня зовут Семёнов Евгений Сергеевич, я директор АйТи Фреш. За 15+ лет работы админом я поднял десятки VPN-серверов — IPsec на Cisco, OpenVPN на pfSense, SoftEther, Strongswan на Linux. С 2020 года все мои новые проекты — только WireGuard. Он быстрее на порядок, конфиг занимает десять строк, а клиент ставится на телефон сотрудника за две минуты. В этой статье я покажу, как развернуть WireGuard-сервер на Ubuntu так, чтобы он пережил сотню пользователей и не развалился при смене сети на мобильнике бухгалтера.

Чем WireGuard отличается от OpenVPN и IPsec

WireGuard — это VPN-протокол, написанный Джейсоном Доненфельдом в 2016 году и принятый в ядро Linux 5.6 весной 2020-го. Его ключевые отличия от старых решений:

Подготовка сервера: Ubuntu 22.04 LTS

Базовая конфигурация под WireGuard: любая VPS или домашний сервер с публичным IP. Для офиса на 50 пользователей хватает 2 vCPU и 2 ГБ RAM. Я обычно беру Ubuntu Server 22.04 LTS или Debian 12 — оба идут с ядром 5.15+, где WireGuard уже встроен.

apt update && apt upgrade -y
apt install -y wireguard wireguard-tools qrencode iptables-persistent

# Включаем форвардинг пакетов
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' >> /etc/sysctl.conf
sysctl -p

Проверяем версию ядра — должна быть 5.6+ для встроенного модуля:

uname -r
modprobe wireguard && echo "Модуль загружен"

Генерация ключей и конфиг сервера

WireGuard работает на парах ключей Curve25519. Сервер имеет свою пару, каждый клиент — свою, и они обмениваются только публичными частями. Начинаем с сервера:

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

Создаём основной конфиг /etc/wireguard/wg0.conf:

[Interface]
PrivateKey = СЮДА_СОДЕРЖИМОЕ_server_private.key
Address = 10.88.88.1/24
ListenPort = 51820
SaveConfig = false

PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Клиентов добавляем ниже блоками [Peer]

Запускаем тоннель и включаем автозапуск:

systemctl enable --now wg-quick@wg0
wg show
ip a show wg0

Добавление клиентов

Для каждого пользователя генерируем свою пару ключей. Я всегда держу отдельную папку с именем клиента, чтобы не путаться:

mkdir -p /etc/wireguard/clients/ivanov
cd /etc/wireguard/clients/ivanov

wg genkey | tee ivanov.key | wg pubkey > ivanov.pub
wg genpsk > ivanov.psk  # Дополнительный pre-shared key для квантовой устойчивости

В конфиг сервера добавляем блок Peer:

[Peer]
# Иванов И.И. - ноутбук
PublicKey = СОДЕРЖИМОЕ_ivanov.pub
PresharedKey = СОДЕРЖИМОЕ_ivanov.psk
AllowedIPs = 10.88.88.10/32

И применяем без рестарта:

wg syncconf wg0 <(wg-quick strip wg0)

Конфиг клиента и QR-код

Теперь готовим файл клиента ivanov.conf:

[Interface]
PrivateKey = СОДЕРЖИМОЕ_ivanov.key
Address = 10.88.88.10/32
DNS = 10.88.88.1, 8.8.8.8

[Peer]
PublicKey = СОДЕРЖИМОЕ_server_public.key
PresharedKey = СОДЕРЖИМОЕ_ivanov.psk
Endpoint = vpn.example.ru:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Если клиент нужен только для доступа к офисной сети — в AllowedIPs ставим локальную подсеть вместо 0.0.0.0/0. Например, 192.168.10.0/24, 10.88.88.0/24. Тогда интернет идёт напрямую, а офисные ресурсы — через тоннель. Это экономит трафик и быстрее работает.

Для мобильного клиента генерируем QR:

qrencode -t ansiutf8 < ivanov.conf
# Пользователь сканирует с телефона через WireGuard app

Firewall и безопасность

WireGuard сам по себе молчалив — без валидной handshake-попытки порт не отвечает, его не видно в сканах Shodan. Но базовые правила firewall всё равно нужны. Открываем только UDP-порт WireGuard и SSH:

ПравилоПорт/протоколИсточник
SSH админа22/TCPТолько офисный IP
WireGuard51820/UDPЛюбой
ICMP echoICMPТолько из VPN
Всё остальноеDROP
ufw default deny incoming
ufw default allow outgoing
ufw allow from 203.0.113.10 to any port 22
ufw allow 51820/udp
ufw route allow in on wg0 out on eth0
ufw enable

Реальный кейс: миграция офиса с OpenVPN

В марте 2026 года клиент — юридическая компания на 28 сотрудников — обратился с жалобой: OpenVPN на pfSense постоянно отваливался у юристов, работающих из поездок. Смена 4G на Wi-Fi в кафе = переподключение на 30 секунд, потеря видеосвязи, слетевший сеанс 1С. Я предложил перевести их на WireGuard. Работы заняли два дня: сутки на сервер на Debian 12 (2 vCPU, 2 ГБ в МТС-облаке), сутки на миграцию пользователей. Скорость внутри тоннеля выросла с 45 до 310 Мбит/с. За месяц после миграции ноль заявок «отвалился VPN». Стоимость проекта — 48 000 руб., включая настройку роутинга до 1С-сервера и мониторинг. У нас на практике WireGuard окупается уже на третьем мобильном пользователе — за счёт снижения потока в саппорт.

Мониторинг и обслуживание

Штатный мониторинг — команда wg show. Показывает последний handshake и счётчики трафика на каждого клиента. Для Zabbix/Prometheus я пишу простой парсер:

# Последний handshake по каждому клиенту
wg show wg0 dump | awk 'NR>1 { print $4, $5 }'

# Алерт, если последний handshake старше 10 минут для активного юзера

Чек-лист обслуживания:

Типичные грабли при настройке

Настроим корпоративный WireGuard-сервер за один день

Я лично поднимаю WireGuard на Ubuntu или Debian с готовым firewall, роутингом до офисной сети и клиентскими QR-конфигами для каждого сотрудника. Подключение через Telegram-бот для самообслуживания, мониторинг в Zabbix, автоматическая ротация ключей. От двух часов на простой сервер и до дня на офис 50+ человек с 1С и RDP.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы по WireGuard

Чем WireGuard лучше OpenVPN?
WireGuard работает в пространстве ядра, в десятки раз быстрее, короткий код (около 4000 строк против 600 000 у OpenVPN), современная криптография ChaCha20+Poly1305+Curve25519, мгновенное переподключение после смены сети и простой конфиг.
Какой порт использовать для WireGuard?
По умолчанию 51820/UDP. На практике меняем на нестандартный из диапазона 50000–60000, чтобы не светиться сканами. Работает только UDP, TCP-режима нет.
Как подключить пользователя без копания в консоли?
Генерируем конфиг клиента на сервере, преобразуем в QR-код утилитой qrencode и отдаём пользователю — в клиенте для Android или iOS он сканирует и получает готовое подключение.
Надо ли делать NAT на сервере?
Если вы хотите, чтобы клиенты ходили в интернет через VPN — да, настраиваем iptables MASQUERADE и включаем net.ipv4.ip_forward. Если нужен только доступ к внутренней сети — MASQUERADE не обязателен.
WireGuard держит тоннель при смене Wi-Fi и мобильной сети?
Да, это одно из ключевых преимуществ. Тоннель не привязан к IP клиента, первый же пакет с нового адреса автоматически восстанавливает соединение — пользователь ничего не замечает.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.