Запустить клиент OpenVPN с помощью службы - ошибка TLS - PullRequest
0 голосов
/ 12 октября 2018

Я хочу запустить клиент 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, она работает.

1 Ответ

0 голосов
/ 12 октября 2018

Заказ услуги после network.target недостаточен для обеспечения интернет-соединения.Вам необходимо заказать услугу после network-online.target, а также сделать так, чтобы она зависела от нее:

After=network-online.target
Wants=network-online.target

См. NetworkTarget на fd.o для получения дополнительной информации.

...