Вопрос или проблема
Как вы поступите, чтобы OpenVPN автоматически перезапускался при подключении к сети?
Проблема в том, что каждый раз, когда соединение с сетью теряется, или если компьютер загружается без подключения к сети, а затем подключается, OpenVPN не работает — по крайней мере, до тех пор, пока я не перезапущу openvpn вручную.
Использую Arch Linux (следовательно, systemd
)
Используйте параметры –ping и –ping-restart (или –keepalive), и openvpn будет переподключаться, когда потеряет соединение.
В дополнение к ответу с ping/ping-restart, убедитесь, что в вашем файле конфигурации не используется persist-tun
, чтобы вы начинали с “чистых” таблиц маршрутизации, касающихся VPN, при каждом переподключении.
Наилучшая конфигурация для динамических сетей через NetworkManager, он поддерживает OpenVPN, а также поддерживает установку нового соединения (в данном случае VPN) при подключении к любому аппаратному интерфейсу.
.
Ответ или решение
Чтобы гарантировать, что OpenVPN автоматически перезапускается при подключении к новой сети на системах, использующих systemd, таких как Arch Linux, следует учитывать следующие аспекты:
Предисловие о проблеме
Проблема заключается в том, что OpenVPN не работает автоматически после потери сетевого подключения или после загрузки системы в отсутствие сети. Сеть необходимо вручную перезапускать. Решение требует автоматизации этого процесса.
Системный подход
Для достижения этого можно воспользоваться возможностями, предоставляемыми systemd, а также дополнительными параметрами конфигурации OpenVPN.
Шаг 1: Использование Systemd для автоматизации
Создание и настройка службы systemd позволит автоматически перезапускать OpenVPN:
-
Создайте скрипт, который будет перезапускать OpenVPN
Сохраните его как, например,
/usr/local/bin/restart-openvpn.sh
:#!/bin/bash systemctl restart openvpn-client@<your-config>.service
Убедитесь, что скрипт исполняемый:
chmod +x /usr/local/bin/restart-openvpn.sh
-
Создайте systemd unit для отслеживания сетевых изменений
Создайте файл
/etc/systemd/system/restart-openvpn.service
:[Unit] Description=Restart OpenVPN on network change Wants=network-online.target After=network-online.target [Service] ExecStart=/usr/local/bin/restart-openvpn.sh Type=oneshot [Install] WantedBy=multi-user.target
-
Создайте systemd path unit для отслеживания изменений сетевых подключений
Создайте файл
/etc/systemd/system/restart-openvpn.path
:[Unit] Description=Monitor network changes to trigger OpenVPN restart [Path] PathExistsGlob=/sys/class/net/*/carrier [Install] WantedBy=multi-user.target
-
Активируйте созданные службы
Выполните следующие команды в терминале:
systemctl enable restart-openvpn.service systemctl enable restart-openvpn.path systemctl start restart-openvpn.path
Шаг 2: Настройка OpenVPN
В конфигурации OpenVPN файле:
-
Используйте параметры
--ping
и--ping-restart
Эти параметры обеспечат автоматическое восстановление соединения в случае его потери.ping 10 ping-restart 60
-
Избегайте использования
persist-tun
Данный параметр может сохранить старую конфигурацию сетевого интерфейса, что нежелательно при изменении сети.
Шаг 3: Рассмотрите использование NetworkManager
Для тех, кто использует NetworkManager, это может быть более удобным инструментом. Он поддерживает автоматическое подключение OpenVPN после установления основного сетевого соединения, и это может стать более интегрированным решением:
-
Установка плагина для NetworkManager:
sudo pacman -S networkmanager-openvpn
-
Настройка через графический интерфейс или команду:
Это позволит управлять VPN соединениями более гибко и удобно.
Заключение
Такая конфигурация позволит автоматизировать процесс перезапуска OpenVPN при любых изменениях сети и, следовательно, повысит надежность и производительность системы. Учтите все предложенные шаги и адаптируйте решения в зависимости от специфики вашей среды.