Туннель поднимается, но перестаёт работать через несколько минут
Узел за преобразованием адресов должен периодически отправлять пакеты, иначе запись в таблице преобразования устаревает и обратный трафик перестаёт проходить. Туннель при этом выглядит установленным: ошибок нет, просто трафик не идёт.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Периодические пакеты не настроены
Без них запись в таблице преобразования устаревает за минуты простоя. Обратный трафик отбрасывается.
-
Настройка сделана не на той стороне
Периодические пакеты нужны той стороне, которая за преобразованием адресов. На другой стороне они бесполезны.
-
Маршруты не охватывают нужные адреса
Список разрешённых адресов задаёт и проверку, и маршруты. Пакеты к адресам вне списка не идут через туннель.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Состояние узлов: время последнего обмена и объём трафика.
sudo wg showСостояние службы туннеля.
systemctl status "wg-quick@*" --no-pager 2>/dev/null | head -8Маршруты, созданные туннелем.
ip route show table all | grep -i wgРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Без них запись в таблице преобразования устаревает за минуты простоя. Обратный трафик отбрасывается.
- Как проверить
-
Посмотрите настройку и время последнего обмена.
sudo wg show 2>/dev/null | grep -iE "latest handshake|persistent keepalive|transfer"
- Как исправить
-
Включите отправку периодических пакетов на стороне узла за преобразованием адресов. Интервал в 25 секунд подходит почти для всех сетей.
[Peer] PersistentKeepalive=25
- Почему происходит
- Периодические пакеты нужны той стороне, которая за преобразованием адресов. На другой стороне они бесполезны.
- Как проверить
-
Определите, кто за преобразованием адресов.
sudo wg show 2>/dev/null | grep -iE "endpoint|allowed ips" ip route get 1.1.1.1 2>/dev/null | head -2
- Как исправить
- Включите отправку на стороне, инициирующей соединение. Если за преобразованием адресов обе стороны, нужна настройка у обеих.
- Почему происходит
- Список разрешённых адресов задаёт и проверку, и маршруты. Пакеты к адресам вне списка не идут через туннель.
- Как проверить
-
Посмотрите список адресов и маршруты.
sudo wg show 2>/dev/null | grep -i "allowed ips" ip route show table all | grep -i wg | head
- Как исправить
- Приведите список разрешённых адресов в соответствие с тем, что должно идти через туннель. Это не только фильтр, но и источник маршрутов.
Пример вывода
Обмен прекратился после нескольких минут простоя. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ sudo wg show
interface: wg0
public key: (скрыт)
listening port: 51820
peer: (скрыт)
endpoint: 198.51.100.20:51820
allowed ips: 10.8.0.0/24
latest handshake: 4 minutes, 12 seconds ago
transfer: 1.24 MiB received, 812.00 KiB sent
persistent keepalive: every 0 seconds
Связанные ошибки
- WireGuard: туннель поднят, но обмена нет Интерфейс есть, рукопожатие не проходит: неверные ключи, недоступный порт, несовпадение разрешённых адресов.
- Служба IPsec запускается, а туннели не поднимаются Процесс работает, соединений нет: закрыты служебные порты, не совпадают параметры или нет прав на ключи.
- Connection timed out в журнале службы Соединение не устанавливается по таймауту: пакеты отбрасываются, узел недоступен, перегружен сервер на другой стороне.
- openvpn: Cannot open TUN/TAP dev /dev/net/tun Служба не может открыть устройство туннеля: нет модуля, нет устройства в контейнере или мешает изоляция unit-файла.
- 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.
Где встречается чаще всего
Источники
- Документация WireGuard
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено туннелем через преобразование адресов без периодических пакетов.