WireGuard в systemd: почему туннель не поднимается
WireGuard поднимается шаблонной службой по имени интерфейса. Отказы обычно связаны с правами на файл настроек, отсутствием модуля ядра или конфликтом маршрутов и адресов.
О службе
Служба шаблонная: имя экземпляра — это имя интерфейса, а файл настроек берётся из /etc/wireguard по этому имени. Поэтому запуск выглядит как systemctl start wg-quick@wg0, и для каждого туннеля нужен свой файл.
Файл настроек содержит закрытый ключ, поэтому права на него должны быть узкими: инструмент отказывается работать с файлом, доступным другим. Это не придирка, а защита ключа.
Как устроена
| Имя unit | шаблонное: wg-quick@ИНТЕРФЕЙС.service |
|---|---|
| Файл настроек | /etc/wireguard/ИНТЕРФЕЙС.conf, права 0600 |
| Проверка состояния | wg show — ключи, узлы, время последнего обмена |
| Модуль ядра | wireguard; в современных ядрах встроен |
Частые ошибки
8 записей базы отмечены за этой службой.
Сообщения журнала
- Permission denied в журнале службыОтказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Address already in use при запуске службыПорт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- systemd-modules-load: модуль не загружается при загрузке системыСлужба загрузки модулей завершается с ошибкой: модуля нет, он встроен в ядро или заблокирован.
Коды выхода
- status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
Конфигурация unit
- Шаблонный unit: экземпляр не запускаетсяСлужба вида имя@экземпляр не запускается: нет файла настроек экземпляра, неверное экранирование, не включён шаблон.
Ошибки служб
- WireGuard: туннель поднят, но обмена нетИнтерфейс есть, рукопожатие не проходит: неверные ключи, недоступный порт, несовпадение разрешённых адресов.
- Служба IPsec запускается, а туннели не поднимаютсяПроцесс работает, соединений нет: закрыты служебные порты, не совпадают параметры или нет прав на ключи.
- Туннель поднимается, но перестаёт работать через несколько минутСоединение через преобразование адресов рвётся при простое: без периодических пакетов запись в таблице узла исчезает.
Коды выхода этой службы
Числа в status=N ниже 200 назначает сама программа, 200 и выше — systemd, когда не смог подготовить запуск.
| status | Что означает у этой службы | Куда смотреть |
|---|---|---|
1/FAILURE |
ошибка в файле настроек, права на ключ или конфликт маршрутов. | разбор |
Диагностика
Состояние туннеля и сообщение об ошибке.
systemctl status wg-quick@wg0 --no-pager -lСостояние интерфейсов и обмена с узлами.
sudo wg showПрава на файлы настроек: должны быть 0600.
sudo ls -l /etc/wireguard/Поднялся ли интерфейс и какие маршруты добавлены.
ip addr show wg0 2>/dev/null; ip route | grep wg0Параметры unit, которые тут важны
- DefaultInstance=шаблон по имени интерфейса
- After=туннелю обычно нужна готовая сеть
- Подстановки (%i, %n, %h)имя экземпляра подставляется в путь к файлу настроек
Источники
- Документация WireGuard
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)