Як запустити тунель WireGuard як службу systemd
Шаблон wg-quick@ піднімає іменований профіль і встановлює маршрути, DNS та хуки. Перевірте юніт, залиште одного відповідального менеджера й перевірте демонтаж.
У вас є профіль WireGuard у /etc/wireguard/wg0.conf, і ви хочете, щоб він був піднятий без ручного введення wg-quick up після кожного перезавантаження. Шаблон systemd з пакета робить саме це: [email protected] запускає wg-quick для профілю з назвою wg0. Він також встановлює адреси, маршрути, DNS і будь-які хуки, які оголошує профіль, а це більше, ніж просто завантаження ключа в ядро. Перевірте, що шаблон існує у вашій системі, перш ніж припускати, що він є.
Решта цього посібника йде в тому порядку, у якому ви справді діятимете.
Знайдіть юніт і профіль, який він читає
Перелічіть файли юнітів за допомогою systemctl list-unit-files 'wg-quick*'. У дистрибутивах, які його пакують, ви побачите [email protected], причому ім’я екземпляра береться з профілю. Екземпляр розв’язується в /etc/wireguard/<name>.conf, тому wg-quick@wg0 читає лише wg0.conf і нічого більше. Якщо список порожній, пакет інструментів не встановлено, і жодне вмикання не допоможе.
Тримайте профіль у режимі 600 і у власності root. Він містить закритий ключ, і юніт охоче працюватиме з гіршими правами, якщо ви це дозволите.
Підніміть його й прочитайте журнал
Запустіть екземпляр за допомогою systemctl start wg-quick@wg0, потім перевірте systemctl status wg-quick@wg0 і journalctl -u wg-quick@wg0 -b. Юніт, який запускається і відразу завершується, зазвичай має помилку профілю, і журнал називає рядок. Підтвердьте за допомогою wg show, що інтерфейс існує і що останнє рукостискання свіже. Посібник wg-quick перелічує, що скрипт робить поза самим інтерфейсом.
Налаштований інтерфейс без рукостискання — це проблема шляху або ключа, а не служби.
Залиште одного менеджера
Якщо NetworkManager або інший клієнт уже володіє тунелем, запуск юніта systemd створює другого власника для того самого інтерфейсу, маршрутів і DNS. Симптоми заплутують: тунель піднімається, потім маршрути зникають, або DNS повертається назад за кілька секунд. Виберіть одного менеджера й вимкніть іншого для цього профілю. Журнал зазвичай показує перехоплення як зміни маршрутів або резолвера одразу після того, як юніт повідомляє про успіх.
Два менеджери не ділять володіння. Вони перезаписують один одного.
Перевірте зупинку, перезапуск і завантаження
Виконайте systemctl stop wg-quick@wg0 і переконайтеся, що інтерфейс зник, а маршрути видалено. Потім запустіть його знову й перевірте, що маршрути повертаються, бо помилки демонтажу проявляються як залишкові маршрути, а не як невдалі запуски. Нарешті увімкніть його під час завантаження за допомогою systemctl enable --now wg-quick@wg0 і один раз перезавантажтеся.
Під час завантаження ім’я кінцевої точки має розв’язатися до того, як юніт запрацює. Якщо DNS ще не піднятий, юніт зазнає невдачі й залишається невдалим, доки ви не запустите його вручну.
Запишіть власника
Запишіть, який профіль читає юніт, який менеджер володіє інтерфейсом і звідки взявся файл. Коли згодом хтось імпортує той самий тунель у настільний клієнт, ця нотатка — різниця між міграцією і двома розгортаннями, що борються за одну адресу. Запишіть і ім’я інтерфейсу, бо два профілі зі схожими іменами — звичайне джерело плутанини.
Тунель із двома власниками працює до першого перезавантаження, а потім стає загадкою. Тому нотатка належить репозиторію, а не гілці чату.