O Systemd falha ao iniciar o openvpn no contêiner 16.04 gerenciado pelo lxd


27

openvpncomeça bem na linha de comando usando a ExecStart=chamada exata do systemdarquivo da unidade:

/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf /run/openvpn/server.pid

ps ax confirma que o processo está lá:

1634 ?        Ss     0:00 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/

Mas systemctl start openvpn@servernão é bem sucedido:

● openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2016-03-17 09:54:52 UTC; 4s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 1679 ExecStart=/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/s
 Main PID: 819 (code=exited, status=1/FAILURE)

Mar 17 09:54:52 vpn ovpn-server[1679]:   push_ifconfig_ipv6_remote = ::
Mar 17 09:54:52 vpn ovpn-server[1679]:   enable_c2c = DISABLED
Mar 17 09:54:52 vpn ovpn-server[1679]:   duplicate_cn = DISABLED
Mar 17 09:54:52 vpn ovpn-server[1679]:   cf_max = 0
Mar 17 09:54:52 vpn ovpn-server[1679]:   cf_per = 0
Mar 17 09:54:52 vpn ovpn-server[1679]:   max_clients = 1024
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Control process exited, code=exited status=1
Mar 17 09:54:52 vpn systemd[1]: Failed to start OpenVPN connection to server.
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Unit entered failed state.
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Failed with result 'exit-code'.

Eu interpreto journalctl | grep ovpn-server | tail -n 100que ele não conseguiu bifurcar:

Mar 17 09:57:44 vpn ovpn-server[1693]: OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Feb  2 2016
Mar 17 09:57:44 vpn ovpn-server[1693]: library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Mar 17 09:57:44 vpn ovpn-server[1693]: daemon() failed or unsupported: Resource temporarily unavailable (errno=11)
Mar 17 09:57:44 vpn ovpn-server[1693]: Exiting due to fatal error

Esse problema aconteceu comigo no OpenVZ com o Ububtu 16.4 - Ao comentar LimitNPROCcomo na resposta, o serviço começou bem.
Piotr Kula

Respostas:


46

Eu estive procurando uma correção para isso também. O que eu encontrei para trabalhar é comentar a LimitNPROClinha /lib/systemd/system/openvpn@.service.

Não se esqueça de correr systemctl daemon-reloadatrás disso.


3
Obrigado! Como você diagnosticou o problema? Mesmo sabendo a resposta, pesquisar no google LimitNPROC lxdnão teria retornado um hit que é imediatamente útil para mim.
Christian David

5
Eu puxei uma instância 15.10 lxd e comecei a comparar a configuração do systemd. O LimitNPROC não era suspeito no começo, mas não existia na configuração mais antiga, então tentei removê-lo e resolvi-o. Eu estava arrancando meu cabelo por um dia a essa altura.
Iain

8
Obrigado, isso também corrigiu o meu problema! Eu tive que correr systemctl daemon-reloadantes de entrar em vigor.
Quentin Skousen

1
Isso foi relatado?
user1338062

2
Alguém relatou isso como github.com/lxc/lxd/issues/3336
happyskeptic

14

É melhor evitar modificar unidades do systemd originárias dos pacotes do sistema. Basta usar o drop-in de substituição do systemd:

systemctl edit openvpn@

O nome da unidade do servidor openvpn pode ser diferente, por exemplo. para a versão do pacote 2.4.5-xenial0será

systemctl edit openvpn-server@

Em seguida, coloque no editor:

[Service]
LimitNPROC=infinity

Ele deve criar um /etc/systemd/system/openvpn@.service.d/override.confarquivo (ou similar para o nome da unidade correspondente). Para ativá-lo, você pode querer recarregar systemd com

systemctl daemon-reload

Se a inicialização da unidade for bem-sucedida LimitNPROC=infinity, volte e altere o limite para um valor mais alto do que o padrão de 10. O limite é importante para impedir que o serviço consuma todos os pids disponíveis, o que pode causar uma negação de serviço.

Créditos:
substituição: /unix//a/398541/218321
"limite ilimitado": /unix//a/345596/218321


3
Isso também corrige openvpndentro de openvzrecipientes
Stuart Cardall

Esta é uma solução melhor que a aceita. Acabei de atualizar meu contêiner e o openvpn parou para funcionar. Isso ocorreu porque eu atualizei o arquivo systemd de ações em vez da substituição.
woj

1

Eu também tive que adicionar aqueles abaixo de seu respectivo irmão tun

DeviceAllow=/dev/net/tap rw
DeviceAllow=/dev/net/tap1 rw

para executá-lo no nível L2.


Bem-vindo ao Ask Ubuntu! Eu recomendo editar esta resposta para expandi-la com detalhes específicos sobre como fazer isso. (Veja também Como faço para escrever uma boa resposta? Para o conselho geral sobre que tipos de respostas são consideradas mais valiosas sobre Ask Ubuntu.)
David Foerster
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.