Быстрый старт WireGuard Обновлено 6 Linux

WireGuard и systemd: автозапуск и управление сервисом

Узнайте, как настроить автозапуск и управление WireGuard через systemd: создание unit-файла, использование wg-quick, команды systemctl и решение распространенных проблем.

wireguardsystemdавтозапускlinuxvpn
Содержание
КороткоWireGuard легко интегрируется с systemd. Используйте готовый сервис wg-quick@ или создайте собственный unit-файл, включите автозапуск через systemctl enable и управляйте через systemctl start/stop/status. Диагностируйте ошибки через journalctl.

Введение

WireGuard — современный VPN-протокол, который входит в ядро Linux. Для постоянного использования удобно управлять им через systemd — стандартную систему инициализации в большинстве дистрибутивов. В этой статье разберём, как настроить автозапуск WireGuard при загрузке системы и управлять сервисом с помощью systemctl.

Подготовка: конфигурация WireGuard

Прежде чем настраивать systemd, нужно создать файл конфигурации интерфейса. Обычно его помещают в /etc/wireguard/ с расширением .conf, например wg0.conf. Формат стандартный:

[Interface]
Address = 10.0.0.1/24
PrivateKey = ...
ListenPort = 51820

[Peer]
PublicKey = ...
AllowedIPs = 10.0.0.0/24

Для работы через wg-quick требуется установить пакет wireguard-tools. Проверьте, что утилиты wg и wg-quick доступны в вашем дистрибутиве (обычно команда sudo apt install wireguard-tools для Debian/Ubuntu).

Создание unit-файла systemd для WireGuard

Существует несколько способов управлять WireGuard через systemd. Самый простой — использовать встроенную поддержку wg-quick в systemd. Начиная с systemd 241 (проверьте для своей версии) вы можете просто запустить systemctl start wg-quick@wg0, где wg0 — имя конфигурационного файла (без .conf).

Однако для более гибкого управления можно создать собственный unit-файл, например /etc/systemd/system/wg0.service. Вот пример:

[Unit]
Description=WireGuard tunnel wg0
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/wg-quick up wg0
ExecStop=/usr/bin/wg-quick down wg0

[Install]
WantedBy=multi-user.target

Важно указать полный путь к wg-quick (проверьте командой which wg-quick). После этого включите автозапуск: sudo systemctl enable wg0 и запустите: sudo systemctl start wg0.

Настройка автозапуска через systemd

Автозапуск означает, что сервис стартует при загрузке системы. Для этого нужно включить юнит: systemctl enable wg-quick@wg0 или ваш собственный unit. Убедитесь, что он активен: systemctl is-enabled wg0 — должно вернуть enabled.

Также советуем проверить, что сетевой менеджер не мешает работе. В некоторых случаях (например, NetworkManager) может потребоваться настроить управление интерфейсом в обход него. Добавьте в конфигурацию интерфейса в секцию [Interface] строку Table = auto или измените параметр, если нужно избежать конфликтов.

Управление сервисом: основные команды systemctl

После настройки вы можете использовать стандартные команды:

  • systemctl status wg0 — проверить состояние;
  • systemctl stop wg0 — остановить;
  • systemctl restart wg0 — перезапустить;
  • systemctl enable wg0 — добавить в автозагрузку;
  • systemctl disable wg0 — убрать из автозагрузки.

Для wg-quick@ имя службы будет wg-quick@wg0. Управление аналогично.

Диагностика и решение проблем

Если сервис не стартует, проверьте журнал: journalctl -u wg0 -e (или journalctl -u wg-quick@wg0).

Типичные ошибки:

  • Неверный путь к wg-quick в ExecStart.
  • Отсутствует файл конфигурации /etc/wireguard/wg0.conf.
  • Недостаточно прав (запуск от root).

Также убедитесь, что опция IP-форвардинга включена, если нужна маршрутизация: sysctl net.ipv4.ip_forward=1 (пропишите в /etc/sysctl.conf).

Заключение

Использование systemd для управления WireGuard — стандартный и удобный подход. Он позволяет автоматически поднимать туннель при загрузке, контролировать состояние через systemctl и логировать ошибки. Выберите способ — встроенный wg-quick или собственный unit — в зависимости от ваших потребностей. Для большинства случаев достаточно wg-quick@.

Мини-чеклист

  • Создан файл конфигурации /etc/wireguard/wg0.conf с корректными ключами.
  • Установлены wireguard-tools (или эквивалент).
  • Создан unit-файл systemd или используется wg-quick@.
  • Сервис включен в автозагрузку (systemctl enable) и запущен (systemctl start).

Частые ошибки

  • Забывают указать полный путь к wg-quick в unit-файле.
  • Используют интерфейс без прав root — systemd может не запустить его.
  • Конфликт с NetworkManager, который сбрасывает маршруты.
  • Не проверяют IP-форвардинг для туннелирования трафика.

Источники и документация

FAQ

Как узнать имя службы для WireGuard?

Если используется wg-quick, служба называется wg-quick@имя_интерфейса. Например, wg-quick@wg0. Для собственного unit-файла вы сами задаете имя (например, wg0).

Почему WireGuard не запускается автоматически после перезагрузки?

Проверьте, что сервис включен (systemctl is-enabled), и что он использует network-online.target в качестве зависимости, чтобы сеть была готова.

Можно ли использовать WireGuard с systemd в контейнере или без root?

Для управления интерфейсом нужны права root. В контейнерах можно использовать безопасный подход, но обычно требуется специальная настройка.

Хотите перейти сразу к рабочему доступу?

Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.

Получить доступ

Дальше по теме

Связанные статьи