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 [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. Quero ser solicitada uma senha assim que eu segui este guia para criar uma [email protected]no /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 [email protected]? 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 [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)

Link simbólico:

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

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/[email protected]

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

RoraΖ
fonte
Como é o [email protected]arquivo?
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/[email protected](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 [email protected].

  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.

derobert
fonte
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/[email protected]existe no seu sistema?
derobert
@raz Se você possui esse arquivo, pode tentar um manualln -s /lib/systemd/system/[email protected] /etc/systemd/system/multi-user.target.wants/[email protected]
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.
Aleksey Alekseev
fonte
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 [email protected]
garethTheRed
fonte
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á [email protected].

A partir do Arch Wiki

Karlo
fonte
$ Sudo systemctl permitir [email protected] [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 [email protected]nã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/[email protected]em /etc/systemd/system/[email protected]e desfrutar de uma melhor funcionalidade e segurança.

Jari Turkia
fonte
0

A solução adequada seria usar os systemd-ask-password" agentes de senha " do systemd , que fornecem uma maneira integrada do sistema de canalizar senhas / frases de acesso aos serviços.

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

Elias Probst
fonte
É isso que o script Expect na minha postagem editada usa.
RoraΖ
Desculpe, perdi essa edição.
Elias Probst
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 [email protected]

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

Pedro
fonte