erro de tempo limite do systemd OpenVPN mas funciona

1

Eu tenho um arquivo /lib/systemd/system/openvpn.service com essas configurações:

[Unit]
Description=OpenVPN client
After=network.target

[Service]
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --dameon --writepid /var/run/openvpn/openvpn.pid --config /etc/openvpn/pia/Mexico.ovpn
ExecStop=-/bin/kill -TERM $MAINPID
Restart=on-failure


[Install]
WantedBy=multi-user.target

E sempre que eu executo systemctl start openvpn eu recebo este erro estranho:

Job for openvpn.service failed because a timeout was exceeded. See "systemctl status openvpn.service" and "journalctl -xe" for details.

Mas se eu verificar meu IP público, ele mostrará o meu IP da VPN. Mas está mudando a cada poucos segundos, o que eu acredito que seja porque o OpenVPN está reiniciando ...

A execução dos comandos nessa mensagem de erro diz:

Jun 19 04:29:33 test systemd[1]: openvpn.service: PID file /var/run/openvpn/.pid not readable (yet?) after start: No such file or directory

Saída de ls -l em / var / run / openvpn:

-rw-r--r-- 1 root root 5 Jun 19 04:32 openvpn.pid

Então eu não entendo o que poderia estar errado? OS é o Ubuntu 16.04 com o OpenVPN 2.4.2 compilado a partir da fonte. Mexico.conf é o meu arquivo conf, renomeado de .ovpn para .conf.

Se eu alterar PIDFILE para: PIDFile=/var/run/openvpn/openvpn.pid , ele simplesmente não será iniciado completamente

Eu copiei essas configurações de um guia em algum lugar e ele funciona quando é nomeado como [email protected], mas as mesmas configurações dão o erro acima quando seu nome é openvpn.service ... Alguma razão em particular? Estas são as configurações:

[Unit]
Description=OpenVPN client
After=network.target

[Service]
RuntimeDirectory=openvpn
PrivateTmp=true
KillMode=mixed
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/openvpn.pid --cd /etc/openvpn/pia/ --config Mexico.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
Restart=on-failure
RestartSec=3
ProtectSystem=yes
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw


[Install]
WantedBy=multi-user.target

Percebi que essas configurações funcionam quando nomeadas como [email protected], mas ainda fornecem alguns erros não fatais como:

ERROR: Linux route add command failed: external program exited with error status: 7

WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
    
por Freedo 19.06.2017 / 09:34

1 resposta

2

A razão pela qual seu serviço reclama é que ele espera um argumento que ele não recebe: a posição do argumento é, no arquivo openvpn @ .service , onde quer que você veja i , em particular na linha

 PIDFile=/var/run/openvpn/%i.pid

que também deve ser espelhado na linha ExecStart abaixo, onde você substituiu - writepid /var/run/openvpn/openvpn.pid para o que deveria ter sido legitimamente - writepid /run/openvpn/%i.pid.

A maneira correta de usar um serviço como somename @ .service é passar um argumento para ele: por exemplo

 systemctl enable [email protected]
 systemctl start  [email protected]

Neste caso simples, o parâmetro passado ( cliente ) é apenas o nome do arquivo onde o PID do processo está armazenado, nada mais, para que você possa chamá-lo como quiser. Apenas certifique-se de renomear o arquivo de serviço para /lib/systemd/system/[email protected] como foi quando você o instalou, tenho certeza, e você está pronto para ir.

O motivo pelo qual o openvpn ainda funciona é que a única coisa que você perdeu foi o nome do arquivo PID, não a configuração openvpn.

Quanto aos outros dois erros, o segundo é um aviso, apenas observe (= use a opção auth-nocache no seu arquivo de configuração). E o segundo requer mais informações para diagnosticar, ie a mensagem de erro completa, o arquivo de configuração openvpn e a tabela de roteamento ( ip route show ) depois de ter configurado a VPN.

    
por 19.06.2017 / 17:24