автоматически подключаться к VPN при запуске системы с использованием systemd

Вопрос или проблема

Я хочу, чтобы VPN автоматически подключался при запуске системы и переподключался каждый раз, когда сеть восстанавливается (после отключения по любой причине).

Команда для подключения: protonvpn-cli connect -f

Команда для отключения: protonvpn-cli disconnect

Создал файл с именем auto_vpn.service в ~/.config/systemd/user со следующим содержимым:

[Unit]
Description=Подключение к Proton-VPN
Requires=graphical-session.target
After=graphical-session.target

[Service]
Type=simple
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnect
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
RemainAfterExit=yes

[Install]
WantedBy=graphical-session.target

Затем запустил:

systemctl --user daemon-reload
systemctl --user start auto_vpn.service
systemctl --user enable auto_vpn.service

Теперь проблема в том, что служба работает. Но когда я перезагружаю ПК, служба не запускается (хотя она включена). Более того, я не уверен, перезапустится ли она, когда сеть подключится снова (после отключения по любой причине).

Хотя я не знаком со многими параметрами, которые можно использовать с systemd, вы можете попробовать изменить следующее, чтобы просто выполнить команду и оставить ее как есть.

Уберите BindsTo=network.service, так как я не думаю, что это полезно. Я запускал подобные вещи без необходимости в этом.

Type=simple
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnect

Но убедитесь, что запись с именем protonvpn-cli находится в каталоге /usr/bin. Она может находиться в других местах в зависимости от того, как вы ее установили.

В этом случае используйте whereis, чтобы найти пакет.

Создайте файл с именем auto_vpn.service в ~/.config/systemd/user со следующим содержимым:

[Unit]
Description=Подключение к Proton-VPN
BindsTo=graphical-session.target

[Service]
Type=simple
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnect
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
RemainAfterExit=yes

[Install]
WantedBy=xsession.target

Теперь выполните:

systemctl --user daemon-reload
systemctl --user start auto_vpn.service
systemctl --user enable auto_vpn.service

Вот и все.

Ответ или решение

Автоматическое подключение к VPN при загрузке системы с использованием systemd

Если вы хотите настроить автоматическое подключение к VPN при старте системы и восстановление соединения каждый раз после его разрыва, вам потребуется создать службу в systemd. В данном руководстве мы рассмотрим, как это сделать с помощью команды protonvpn-cli.

Шаг 1: Создание файла службы

  1. Перейдите в пользовательскую директорию systemd:
    В терминале выполните команду:

    mkdir -p ~/.config/systemd/user
  2. Создайте файл службы:
    Откройте текстовый редактор и создайте файл с именем auto_vpn.service:

    nano ~/.config/systemd/user/auto_vpn.service
  3. Добавьте следующий контент:

    [Unit]
    Description=Connect to Proton-VPN
    After=graphical-session.target
    Wants=graphical-session.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/protonvpn-cli connect -f
    ExecStop=/usr/bin/protonvpn-cli disconnect
    Restart=always
    RestartSec=30
    StartLimitInterval=350
    StartLimitBurst=10
    RemainAfterExit=yes
    
    [Install]
    WantedBy=default.target

Шаг 2: Обновление и активация службы

После того как вы сохранили файл, выполните следующие команды для загрузки новой службы:

systemctl --user daemon-reload
systemctl --user start auto_vpn.service
systemctl --user enable auto_vpn.service

Настройка на автоматическое восстановление соединения

Чтобы ваш VPN автоматически переподключался при изменении сетевого состояния, используйте следующие шаги:

  1. Создание зависимости от сетевых событий:
    Вам следует добавить BindsTo в секцию [Unit], чтобы служба автоматически перезапускалась при изменении состояния сети.

    Для этого измените секцию [Unit] вашего файла, добавив следующую строку:

    BindsTo=network-online.target
    Requires=network-online.target
  2. Использование network-online.target:
    Убедитесь, что ваша служба будет запускаться только после того, как сеть станет доступной. Это поможет избежать попыток подключения, когда сеть временно недоступна.

Теперь ваш файл auto_vpn.service должен выглядеть следующим образом:

[Unit]
Description=Connect to Proton-VPN
After=graphical-session.target
Wants=graphical-session.target
BindsTo=network-online.target
Requires=network-online.target

[Service]
Type=simple
ExecStart=/usr/bin/protonvpn-cli connect -f
ExecStop=/usr/bin/protonvpn-cli disconnect
Restart=on-failure
RestartSec=30
StartLimitInterval=350
StartLimitBurst=10
RemainAfterExit=yes

[Install]
WantedBy=default.target

Завершение

Теперь, когда вы перезагрузите систему, служба будет автоматически запускаться и повторно подключаться к VPN при восстановлении сетевого соединения. Убедитесь в корректности пути к protonvpn-cli, если вы установили его в другом месте.

Проверка статуса службы

Вы можете проверить статус работы вашей службы с помощью следующей команды:

systemctl --user status auto_vpn.service

Это поможет вам убедиться, что служба функционирует корректно и подключение к VPN осуществляется автоматически.

Оцените материал
Добавить комментарий

Капча загружается...