Usando o OpenVPN com o systemd

22

Ok, estou pesquisando na web por soluções para esse problema sem que as respostas pareçam funcionar para mim. Espero que alguém possa me ajudar. Eu estou apenas tentando configurar o cliente OpenVPN.

Estou executando CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linux e acabei de usar systemd . A mudança foi suave o suficiente, mas agora eu não consigo fazer o meu cliente OpenVPN aparecer usando o systemd Eu tentei seguir estes tutoriais de configuração, mas nada funciona.

  • link
  • link
  • E olhei para um monte de outros guias diferentes.

Eu posso abrir o túnel a partir da linha de comando com openvpn /etc/openvpn/vpn.conf . Então eu sei que o arquivo de configuração é bom, ele estava trabalhando com o sysvinit muito bem, então eu não estou surpreso. Eu então tento apenas fazer um status com systemctl status [email protected] resultando em:

$ sudo systemctl status [email protected]
  [email protected]
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

Percebi que preciso fazer algumas configurações para os serviços. Eu quero ser solicitado por uma senha, então eu segui este guia para criar um [email protected] em /etc/systemd/system/ . Mas reiniciar o serviço OpenVPN ainda não solicita uma senha.

$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.

Os tutoriais do Fedora passam pelas etapas de criação de links simbólicos, mas não criam nenhum dos arquivos .service nos walk-throughs.

Qual pedaço eu estou sentindo falta? Preciso criar um [email protected]? Se sim, onde exatamente eu coloco? Eu sinto que não deve ser tão difícil, mas não consigo encontrar qualquer solução que funcione para mim. Fico feliz em fornecer mais informações necessárias.

Solução

-rw-r--r--  1 root root   319 Aug  7 10:42 [email protected]

[Unit]
Description=OpenVPN connection to %i
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target
[email protected] (END)

Ligação simbólica:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 [email protected] -> /lib/systemd/system/[email protected]

Solicitar senha

Tudo está funcionando agora, exceto por receber uma senha para se conectar. Eu tentei esta solução . Eu ajustei o arquivo de cima um pouco e adicionei um script Esperar como no exemplo. Trabalhando como um encanto! Meus arquivos estão abaixo.

Linhas modificadas do /lib/systemd/system/[email protected]

acima
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --management localhost 5559 --management-query-passwords --management-forget-disconnect --config /etc/openvpn/%i.conf
ExecStartPost=/usr/bin/expect /lib/systemd/system/openvpn_pw.exp

Espere o script /lib/systemd/system/openvpn_pw.exp . Certifique-se de fazer o seguinte:

  • chmod +x no script.
  • Tem telnet instalado

Código do script esperado:

#!/usr/bin/expect
set pass [exec /bin/systemd-ask-password "Please insert Private Key password: "]

spawn telnet 127.0.0.1 5559
expect "Enter Private Key Password:"
send "password 'Private Key' $pass\r"
expect "SUCCESS: 'Private Key' password entered, but not yet verified"
send "exit\r"
expect eof

Deve-se observar que a solução acima registra sua senha digitada em texto sem formatação nos seguintes registros em /var/log/syslog e /var/log/daemon.log

    
por RoraΖ 07.08.2014 / 15:54

7 respostas

11

Eu acho que a configuração do Debian OpenVPN com o systemd está atualmente um pouco quebrada. Para fazê-lo funcionar nas minhas máquinas eu tive que:

  1. Crie /etc/systemd/system/[email protected] (o diretório) e coloque nele um novo arquivo com isto:

    [Unit]
    Requires=networking.service
    After=networking.service
    chamei meu arquivo local-after-ifup.conf . Precisa terminar com .conf . (Este é o bit que está atualmente um pouco quebrado.)
  2. Crie um arquivo em /etc/tmpfiles.d (chamei o meu local-openvpn.conf ) com o conteúdo:

    # Type Path         Mode UID  GID  Age Argument
    d      /run/openvpn 0755 root root  -  -
    Este é o erro do Debian 741938 (corrigido em 2.3.3-1).
  3. Crie um link simbólico em multi-user.target.wants (a maneira mais fácil é systemctl enable openvpn@CONF_NAME.service ), por exemplo, se você tiver /etc/openvpn/foo.conf , use [email protected] .

  4. Se você também tiver o script init do SysV aparecendo no systemd, desative-o. Este é o erro da Debian 700888 (corrigido em 2.3.3-1).

NOTA: 2.3.3-1 ou posterior é que ainda não está em testes , embora esteja em instabilidade.

    
por 07.08.2014 / 16:19
6

Esse tipo de arquivo de unidade é um serviço instanciado. Mais detalhes estão disponíveis aqui

O seguinte é o arquivo de unidade para openvpn no CentOS 7:

[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=syslog.target network.target

[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf

[Install]
WantedBy=multi-user.target

e reside como /usr/lib/systemd/system/openvpn@service . O %i no arquivo é substituído pela string após o @ no nome da unidade.

Como o arquivo de configuração está em /etc/openvpn/myopenvpn.conf , o serviço é iniciado com:

systemctl start [email protected]
    
por 07.08.2014 / 16:36
6
  1. Coloque todos os arquivos openvpn * .conf em /etc/openvpn/ .
  2. Edite /etc/default/openvpn . Uncomment isso:

    AUTOSTART="all"
    
  3. Executar systemctl daemon-reload .

  4. Executar service openvpn start .
por 25.08.2015 / 09:58
4

Você precisa criar o arquivo de serviço ativando openvpn@<configuration>.service .

Por exemplo, se o arquivo de configuração for /etc/openvpn/client.conf , o nome do serviço será [email protected] .

Do Wiki do Arch

    
por 07.08.2014 / 15:57
1

O openvpn @ .service evoluiu muito entre os Debians 8 e 9. O pacote original para Jessie, por exemplo, falha em systemctl reload openvpn@ . Para corrigir isso, a versão Stretch introduz 10 novas diretivas no arquivo systemd, incluindo PIDFile= para fazer o recarregamento funcionar novamente.

Para os usuários do Stretch, sugiro ir para o backport e, se não for possível fazer isso, pelo menos, obter o arquivo systemd de link e extraia debian/[email protected] para /etc/systemd/system/[email protected] e desfrute de melhor funcionalidade e segurança.

    
por 04.12.2017 / 12:40
0

A solução adequada seria fazer uso dos agentes de senha systemd-ask-password / " ", que fornece uma maneira integrada do sistema de canalizar senhas / senhas para serviços.

Você precisará do OpenVPN 2.3.0 ou mais recente para fazer isso.

    
por 15.09.2014 / 20:33
0

Em uma nova instalação do Jessie_8.0.0 eu fiz:

  1. copie os arquivos antigos /etc/openvpn/cluster.conf (plus *.key e *.crt ) do wheezy
  2. uncommented AUTOSTART="all" in /etc/default/openvpn - acho que isso não teve efeito
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart [email protected]

Agora o túnel está em alta - vou ver o que vai acontecer depois de uma reinicialização, mas não consigo reiniciar neste momento

    
por 28.04.2015 / 14:27