WireGuard — VPN-протокол и реализация защищённого сетевого туннеля. Он создаёт виртуальный интерфейс, шифрует IP-пакеты и передаёт их между узлами поверх UDP.
Модель узлов
Каждый участник имеет:
- приватный ключ, который хранится только на узле;
- публичный ключ, который передаётся другим участникам;
- адрес виртуального интерфейса;
- список
AllowedIPsдля каждого peer; - при необходимости внешний endpoint и keepalive.
WireGuard не использует логины, сертификаты или отдельный этап согласования алгоритмов. Идентичность peer определяется публичным ключом.
AllowedIPs
AllowedIPs выполняет две функции:
- определяет, какой трафик отправлять конкретному peer;
- ограничивает адреса источника, которые разрешено принимать от этого peer.
Пример клиентского peer:
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 10.10.0.0/24
PersistentKeepalive = 25При AllowedIPs = 0.0.0.0/0, ::/0 весь IPv4- и IPv6-трафик направляется через туннель.
Передача данных
WireGuard использует UDP. После криптографического рукопожатия пакеты шифруются и инкапсулируются в UDP-датаграммы. Если endpoint peer изменился, WireGuard может запомнить новый адрес после успешного аутентифицированного пакета.
PersistentKeepalive полезен для peer за NAT: периодический пакет сохраняет запись трансляции и позволяет серверу отправлять трафик клиенту.
Маршрутизация
Создание туннеля не включает автоматически:
- IP forwarding;
- NAT для выхода клиентов в Интернет;
- правила firewall;
- DNS-настройку;
- маршруты в удалённые локальные сети.
Эти элементы настраиваются отдельно в зависимости от сценария.
Диагностика
wg show
ip address show
ip route show
ss -lunПроверяют время последнего handshake, объём переданных данных, endpoint, AllowedIPs, маршруты, UDP-порт, firewall и пересылку пакетов.
Если handshake отсутствует, проблема обычно связана с ключами, endpoint, портом или фильтрацией UDP. Если handshake есть, но трафик не проходит, проверяют маршрутизацию, AllowedIPs, NAT и firewall.