WireGuard — современный VPN-протокол, в 2–5 раз быстрее OpenVPN. Встроен в Linux ядро с версии 5.6. Настройка занимает 10 минут.
Установка WireGuard на сервере
sudo apt update
sudo apt install -y wireguard
# Включить IP forwarding
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Генерация ключей сервера
cd /etc/wireguard
sudo wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
sudo chmod 600 server_private.key
Конфиг сервера /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $(cat /etc/wireguard/server_private.key)
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]
# Клиент 1
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
Запуск WireGuard
sudo systemctl enable --now wg-quick@wg0
sudo wg show # Проверить статус
Конфиг клиента
[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR-VPS-IP:51820
AllowedIPs = 0.0.0.0/0 # Весь трафик через VPN
QR-код для телефона
sudo apt install -y qrencode
qrencode -t ansiutf8 < /etc/wireguard/client.conf
curl -fsSL https://get.vpnsetup.net/wg | sudo bashsudo ufw allow 51820/udpУстановка WireGuard
sudo apt update && sudo apt install -y wireguard
# Включить IP forwarding
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
Конфигурация сервера /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $(cat server_private.key)
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]
PublicKey = $(cat client_public.key)
AllowedIPs = 10.0.0.2/32
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo ufw allow 51820/udp
Почему WireGuard лучше OpenVPN
WireGuard работает в ядре Linux, использует современную криптографию (ChaCha20, Poly1305) и требует минимальной конфигурации. Скорость в 2–4 раза выше OpenVPN.
Конфигурация клиента
[Interface]
Address = 10.0.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_SERVER_IP:51820
AllowedIPs = 0.0.0.0/0 # Весь трафик через VPN
PersistentKeepalive = 25
Частые ошибки при настройке WireGuard
Handshake did not complete after 5 seconds
RTNETLINK answers: Operation not permitted
read from tunnel: connection timed out
Interface wg0 is not activated: Address family not supported
| Сообщение | Причина | Решение |
|---|---|---|
| Handshake did not complete after 5 seconds | Порт 51820/UDP закрыт файрволом сервера или провайдера, либо публичные ключи сторон перепутаны местами | Проверить sudo ufw allow 51820/udp и сверить, что PublicKey клиента совпадает с тем, что прописан в [Peer] на сервере |
| RTNETLINK answers: Operation not permitted | Команда запущена без прав root или интерфейс wg0 уже поднят с другими параметрами | Выполнять команды через sudo, при конфликте сначала wg-quick down wg0, затем поднять заново |
| read from tunnel: connection timed out | Handshake прошёл, но трафик не идёт — чаще всего забыли включить net.ipv4.ip_forward или не настроен MASQUERADE | Проверить sysctl net.ipv4.ip_forward (должно быть 1) и правила iptables -t nat -L POSTROUTING |
| Address family not supported | В конфиге указан IPv6-адрес, а на сервере отключена поддержка IPv6 в ядре | Использовать только IPv4-адресацию в Address/AllowedIPs либо включить IPv6 в системе |
WireGuard против OpenVPN: практическое сравнение
| Параметр | WireGuard | OpenVPN |
|---|---|---|
| Размер кодовой базы | ~4000 строк, встроен в ядро Linux с версии 5.6 | ~100 000 строк, работает в user space |
| Протокол | Только UDP | UDP или TCP на выбор |
| Криптография | Фиксированный набор: ChaCha20, Poly1305, Curve25519 | Настраиваемый набор шифров, включая устаревшие для совместимости |
| Проход через строгие файрволы, блокирующие UDP | Хуже — нет fallback на TCP | Лучше — можно работать по TCP 443, маскируясь под HTTPS |
Когда WireGuard не подходит
- Сеть клиента блокирует исходящий UDP целиком (некоторые корпоративные и мобильные сети) — WireGuard не умеет работать через TCP, здесь выручит только OpenVPN на 443/tcp
- Нужна детальная аутентификация пользователей логином и паролем с интеграцией в LDAP/RADIUS — WireGuard авторизует только по публичному ключу, без встроенной поддержки пользовательских учёток
- Требуется официальная поддержка на устаревших ОС без современного ядра — на старых системах нужен userspace-бэкенд, что усложняет установку по сравнению с OpenVPN
- Политика безопасности требует аудируемого набора алгоритмов шифрования с возможностью замены — в WireGuard криптонабор фиксирован намеренно и не настраивается
Проверка, что туннель реально работает
# На сервере: время последнего handshake должно быть недавним
sudo wg show wg0 latest-handshakes
# На клиенте: реальный внешний IP должен смениться на серверный
curl -s https://ifconfig.me
# Сквозная проверка задержки через туннель
ping -c 4 10.0.0.1
- Выполните
wg showна сервере и убедитесь, что у пира есть свежий latest handshake, а не «(none)» - С клиента, подключённого через VPN, проверьте внешний IP через
curl ifconfig.me— он должен совпадать с IP сервера, а не с домашним - Прогоните
pingдо внутреннего адреса сервера (10.0.0.1) — стабильные ответы подтверждают, что трафик реально идёт через туннель - Проверьте счётчики трафика в
wg show wg0 transfer— если растёт только transmit, а receive нулевой, сервер не получает ответный трафик, и дело в NAT или маршрутизации
Базовую настройку файрвола перед поднятием VPN разбирает статья UFW на VPS, а усиление защиты самого SSH-доступа к серверу — материал хардненинг SSH.
Частые вопросы
В чём разница между VPS и VPN?
VPS — это арендованный виртуальный сервер, отдельная вычислительная машина с собственной операционной системой, на которой можно установить любое ПО, включая VPN. VPN — это технология зашифрованного туннеля для передачи трафика через такой сервер. Иными словами, VPS — это инфраструктура, а VPN — один из сервисов, который на ней разворачивают, как описано в данном руководстве.
Почему WireGuard обычно быстрее OpenVPN?
WireGuard работает прямо в ядре Linux и использует небольшой фиксированный набор современных алгоритмов шифрования, тогда как OpenVPN работает в пользовательском пространстве и поддерживает широкий, настраиваемый набор шифров ради совместимости. Меньший объём кода и работа на уровне ядра дают заметный прирост скорости и меньшую задержку по сравнению с OpenVPN.
Что делать, если сеть клиента полностью блокирует исходящий UDP?
В этом случае WireGuard не поможет — у протокола нет возможности работать по TCP. Единственный практичный выход — использовать OpenVPN, настроенный на порт 443 по TCP, который маскируется под обычный HTTPS-трафик и проходит через строгие корпоративные или мобильные файрволы там, где UDP-трафик целиком заблокирован.
Как проверить, что VPN-туннель реально передаёт трафик, а не просто подключен?
Проверки статуса подключения недостаточно — нужно убедиться, что данные действительно идут через туннель. Свежий latest handshake на сервере, смена внешнего IP на клиенте и растущие оба счётчика трафика, приём и передача, подтверждают реальную работу VPN. Если растёт только исходящий трафик, а входящий остаётся нулевым, проблема в маршрутизации или NAT.