Usando OpenVPN com systemd


24

Ok, então eu tenho procurado na web por soluções para esse problema, sem respostas que parecem funcionar para mim. Espero que alguém possa me ajudar. Estou apenas tentando configurar o cliente OpenVPN.

Estou correndo CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxe acabei de usar systemd. A mudança foi suave o suficiente, mas agora não consigo fazer meu cliente OpenVPN usar o systemd. Tentei seguir esses tutoriais de configuração, mas nada funciona.

Eu posso abrir o túnel na linha de comando openvpn /etc/openvpn/vpn.conf. Então, eu sei que o arquivo de configuração é bom, estava funcionando com o sysvinit, então não estou surpreso. Em seguida, tento apenas fazer um status systemctl status openvpn@vpn.serviceresultando em:

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

Percebi que preciso fazer algumas configurações para os serviços. Quero ser solicitada uma senha assim que eu segui este guia para criar uma openvpn@.serviceno /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 seguem as etapas de criação de links simbólicos, mas não criam nenhum arquivo .service nas orientações.

Que peça estou faltando? Preciso criar um openvpn@vpn.service? Se sim, onde exatamente eu o coloco? Sinto que não deve ser tão difícil, mas não consigo encontrar nenhuma 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 openvpn@.service

[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
openvpn@.service (END)

Link simbólico:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service

Solicitar senha

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

Linhas modificadas acima /lib/systemd/system/openvpn@.service

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 script /lib/systemd/system/openvpn_pw.exp. Certifique-se de fazer o seguinte:

  • chmod +x no script.
  • ter telnetinstalado

Código do script expect:

#!/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

Observe que a solução acima registra sua senha digitada em texto sem formatação nos seguintes logs /var/log/sysloge/var/log/daemon.log


Como é o openvpn@.servicearquivo?
Cristian Ciupitu

Atualizada a publicação com o erro atual
RoraΖ

Procure em /var/log/{syslog,daemon.log} e journalctl -b -mdescubra por que o OpenVPN saiu. Um desses lugares deve conter as mensagens de erro reais. (Ou mesmo journalctl -b -m _EXE=/usr/sbin/openvpndeve fornecer apenas mensagens OpenVPN).
derobert

Sim, eu estava chegando lá. Estamos atingindo o problema da senha. Vou tentar esta solução: bbs.archlinux.org/viewtopic.php?id=150440 Obrigado por toda a sua ajuda!
RoraΖ

Respostas:


11

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

  1. Crie /etc/systemd/system/openvpn@.service.d(o diretório) e coloque nele um novo arquivo com isso:

    [Unidade]
    Requer = networking.service
    Depois = networking.service
    Liguei para o meu arquivo local-after-ifup.conf. Precisa terminar com .conf. (Este é o bit que está um pouco quebrado no momento.)

  2. Crie um arquivo em /etc/tmpfiles.d(eu chamei meu local-openvpn.conf) com o conteúdo:

    # Tipo Caminho Modo Argumento UID GID Idade
    d / run / openvpn 0755 raiz raiz - -
    Este é o bug Debian 741938 (corrigido em 2.3.3-1).

  3. Crie um link simbólico multi-user.target.wants(da maneira mais fácil systemctl enable openvpn@CONF_NAME.service). Por exemplo, se você tiver /etc/openvpn/foo.conf, você usaria openvpn@foo.service.

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

NOTA: 2.3.3-1 ou posterior ainda não está em teste , embora esteja instável.


O systemctl enable ainda falha ao dizer que não existe esse arquivo ou diretório. Não vejo nenhum script sysv init em / lib / systemd, a menos que seja systemd-initctl?
RoraΖ

@raz O script SysV seria /etc/init.d/openvpn; O systemd, por padrão, executa aqueles como o sysv init faria. É isso que openvpn.servicevocê tem; você precisa desativá-lo ( systemctl disable). O arquivo /lib/systemd/system/openvpn@.serviceexiste no seu sistema?
derobert

@raz Se você possui esse arquivo, pode tentar um manualln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert

Não tenho esse arquivo, mas tenho certeza de que poderia criá-lo. Eu desabilitei o/etc/init.d/openvpn script.
RoraΖ

@raz Não sei se o Crunchbang possui um backport de um pacote OpenVPN mais recente, mas se não, você pode pegar esse script em sources.debian.net/src/openvpn/2.3.3-1/debian/…
derobert

8
  1. Coloque todos os arquivos openvpn * .conf em /etc/openvpn/.
  2. Edit /etc/default/openvpn. Remova o comentário:

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

  4. Corra service openvpn start.

Eu acho que eles usaram isso como uma solução, porque agora é ainda pior no debian 9, o openvpn não reinicia se ocorrer um erro que é muito estúpido ... Alguém conhece alguma solução ou solução alternativa, estou escrevendo um script para verificar se o openvpn ainda está em execução!
Luciano Andress Martini

Isso foi perfeito. ele iria começar e parar mesmo que eu chamasse o óbvio client.conf, agora com isso minha única configuração é executada. Obrigado!
Mitchell Currie

6

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

A seguir está o arquivo da unidade openvpnno 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 %iarquivo é substituído pela sequência após o @nome da unidade.

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

systemctl start openvpn@myopenvpn.service

Eu não tenho /usr/lib/systemd/user/ mais nada no /usr/lib/systemdnível.
RoraΖ

Que tal /lib/systemd/system/? Parece que tenho os dois no meu sistema, com conteúdo idêntico (e eles não são links simbólicos!).
perfil completo de garethTheRed

Acabei de adicionar esse arquivo, atualizei minha postagem com tudo.
RoraΖ

5

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á openvpn@client.service.

A partir do Arch Wiki


$ Sudo systemctl permitir openvpn@vpn.service [sudo] senha para o usuário: Falha ao chamar o método questão: Nenhum tal lima ou diretório
RoraΖ

Seu arquivo de configuração é chamado 'vpn'?
Karlo

Sim,/etc/openvpn/vpn.conf
RoraΖ

Também systemctl start openvpn@vpn.servicenão funciona? Isso deve funcionar ... #
784 Karlo

11
Isso funciona para mim no Raspbian GNU / Linux 8 (Debian Jessie). Obrigado!
Neuhaus

1

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

Para os usuários do estiramento, eu sugiro ir para o backport, e se não for possível fazer isso, pelo menos, obter o arquivo systemd de https://packages.debian.org/jessie-backports/openvpn e extrato debian/openvpn@.serviceem /etc/systemd/system/openvpn@.servicee desfrutar de uma melhor funcionalidade e segurança.



0

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

  1. copie os arquivos antigos /etc/openvpn/cluster.conf(mais *.keye *.crt) do wheezy
  2. descomentada AUTOSTART="all"em /etc/default/openvpn- Eu acho que isso não teve efeito
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

Agora o túnel está aberto - verei o que acontecerá após uma reinicialização, mas não posso reinicializar neste momento

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.