Я хочу запустить клиент OpenVPN с помощью службы.Поэтому я написал эту службу (находится в /etc/systemd/system/
):
[Unit]
Description=...
After=network.target
[Service]
Type=simple
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/client.conf
ExecPreStart=/usr/sbin/rngd /dev/urandom
ExecPreStart=/etc/openvpn/update-resolv-conf
[Install]
WantedBy=multi-user.target
Мой client.conf
выглядит следующим образом:
client
dev-tun
remote ...
proto udp
resolv-retry infinite
persist-tun
persist-key
# Cert files config...
# Cypher and auth config ...
Теперь у меня проблема, что я получаю ошибку, когдаСервис запустил OpenVPN:
TLS Error: TLS key negotiation failed to oocur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, process restarting
Интересным фактом является то, что ошибка не возникает после перезапуска службы (также сразу после запуска системы).Ошибка возникает только при первом запуске сервиса.Поэтому я экспериментировал с sleep
(до 1 минуты) в ExecPreStart
или для создания дополнительной энтропии в /dev/urandom
и для выполнения /etc/openvpn/update-resolv-conf
(как вы видите в сервисе).Ничего не помогает.
В чем причина, и как я могу это исправить?Я не хочу писать скрипт, который перезапускает службу только один раз после запуска.
Редактировать / обновить:
Я понял, что ошибка возникает только в том случае, еслиКлиент OpenVPN запускается самой системой.Я имею в виду сервис или crontab.Только если я запускаю службу самостоятельно (как пользователь root
) в bash, она работает.