WireGuard: туннель поднят, но обмена нет
Служба успешно поднимает интерфейс и завершается: с точки зрения systemd всё в порядке. Отсутствие обмена видно только в состоянии туннеля — там не будет времени последнего рукопожатия.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Не совпадают ключи
Открытый ключ узла в настройках должен соответствовать его закрытому ключу. При опечатке рукопожатие не проходит молча.
-
Порт недоступен со стороны узла
WireGuard работает по UDP. Если порт закрыт или преобразование адресов не пропускает обратный трафик, рукопожатие не состоится.
-
Разрешённые адреса не пересекаются
Параметр разрешённых адресов определяет, какой трафик уходит в туннель. При несовпадении обмен не начинается или пакеты уходят не туда.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Состояние туннелей: ключи, узлы, время последнего рукопожатия.
sudo wg showСлушает ли служба свой порт.
sudo ss -ulnp | grep -i wireguardАдрес интерфейса и маршруты.
ip addr show wg0 && ip route | grep wg0Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Открытый ключ узла в настройках должен соответствовать его закрытому ключу. При опечатке рукопожатие не проходит молча.
- Как проверить
-
Посмотрите состояние туннеля: при неудачном рукопожатии время последнего обмена отсутствует.
sudo wg show sudo wg show wg0 public-key
- Как исправить
- Сверьте ключи с обеих сторон. Проверять надо открытый ключ каждой стороны в настройках другой.
- Почему происходит
- WireGuard работает по UDP. Если порт закрыт или преобразование адресов не пропускает обратный трафик, рукопожатие не состоится.
- Как проверить
-
Проверьте доступность порта и правила.
sudo ss -ulnp | grep -i wireguard sudo nft list ruleset 2>/dev/null | grep -i 51820 | head
- Как исправить
- Откройте порт UDP для нужного направления. Для узла за преобразованием адресов задайте постоянные проверочные пакеты параметром keepalive.
- Почему происходит
- Параметр разрешённых адресов определяет, какой трафик уходит в туннель. При несовпадении обмен не начинается или пакеты уходят не туда.
- Как проверить
-
Посмотрите настройки адресов.
sudo wg show wg0 allowed-ips ip route | grep wg0
- Как исправить
- Согласуйте адреса: подсеть, объявленная у одной стороны, должна включать адреса другой.
Пример вывода
Интерфейс поднят, рукопожатия нет. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ systemctl status wg-quick@wg0 --no-pager | head -4
● wg-quick@wg0.service - WireGuard via wg-quick(8) for wg0
Active: active (exited) since Mon 2026-09-15 16:02:41 MSK; 10min ago
$ sudo wg show
interface: wg0
public key: ...
peer: ...
endpoint: <адрес>:51820
allowed ips: 10.8.0.0/24
transfer: 0 B received, 592 B sent
Связанные ошибки
- Connection timed out в журнале службы Соединение не устанавливается по таймауту: пакеты отбрасываются, узел недоступен, перегружен сервер на другой стороне.
- status=0/SUCCESS, но служба считается упавшей Программа завершилась успешно, а systemctl показывает inactive или failed. Разбор: Type=simple против forking, RemainAfterExit, демонизация.
- Служба active, но не работает: обёртки и oneshot Почему состояние active не означает работающую программу: oneshot с RemainAfterExit, обёртки, потерянный главный процесс.
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Broken pipe в журнале службы Запись в закрытый канал или соединение: клиент отключился, обработчик завершился, конвейер разорван.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
Где встречается чаще всего
Источники
- Документация WireGuard
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено закрытым портом UDP на одной из сторон.