Как запустить туннель 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 ещё не поднят, юнит терпит неудачу и остаётся в неудачном состоянии, пока вы не запустите его вручную.
Запишите владельца
Запишите, какой профиль читает юнит, какой менеджер владеет интерфейсом и откуда взялся файл. Когда позже кто-то импортирует тот же туннель в настольный клиент, эта заметка — разница между миграцией и двумя развёртываниями, борющимися за один адрес. Запишите и имя интерфейса, потому что два профиля с похожими именами — обычный источник путаницы.
Туннель с двумя владельцами работает до первой перезагрузки, а потом становится загадкой. Поэтому заметка должна лежать в репозитории, а не в ветке чата.