openVPN desconecta via linha de comando no linux


11

Existe uma maneira de desconectar uma conexão openvpn que foi estabelecida pelo raio livre com uma linha de comando do shell?

Eu tenho todas as informações sobre a conexão openvpn:

  • Nome do usuário
  • IP do cliente
  • AccountSeassionID
  • ...

TL; DR: sudo pkill openvpn
Andrew

Respostas:


9

pkill -SIGTERM -f 'openvpn --daemon --conf $ OPENVPNCONFFILE'

o comando pkill permite sinalizar um processo com base no nome ou outros atributos

Isso enviará o SIGTERM ao openvpn, fazendo com que ele saia e feche normalmente a interface tun. Você pode / precisará modificar a seção após -f para corresponder à maneira como você iniciou a conexão openvpn.

Encontrei isso na seção Sinais da página de manual do openvpn.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.

wow, muito útil e elegante
georgiecasey

OOF! ^ Espero que tenha sido sarcasmo
Andrew

4

Determine a interface virtual com ifconfig:

tap0      Link encap:Ethernet  HWaddr 32:28:a4:04:34:cc  
          inet addr:172.22.18.14  Bcast:172.22.18.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

e desligue-o com:

sudo ifconfig tap0 down

Aqui está o script init que escrevi para o RedHat:

#! /bin/bash
#
# openvpn-client    Start/Stop the openvpn client
#
# chkconfig: 2345 90 60
# description: start openvpn client at boot
# processname: openvpn

# Source function library.
. /etc/init.d/functions

daemon="openvpn"
prog="openvpn-client"
conf_file="/vagrant/vpn/client-dept18-payment.ovpn"

start() {
    echo -n $"Starting $prog: " 
        if [ -e /var/lock/subsys/openvpn-client ] && [ $(pgrep -fl "openvpn --config /vagrant/vpn/client-dept18-payment.ovpn" | wc -l) -gt 0 ]; then
        echo_failure
        echo
        exit 1
    fi
    runuser -l root -c "$daemon --config $conf_file >/dev/null 2>&1 &" && echo_success || echo_failure
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/openvpn-client;
    return $RETVAL
}

stop() {
    echo -n $"Stopping $prog: "
    pid=$(ps -ef | grep "[o]penvpn --config $conf_file" | awk '{ print $2 }')
    kill $pid > /dev/null 2>&1 && echo_success || echo_failure
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/openvpn-client;
    return $RETVAL
}   

status() {
    pgrep -fl "openvpn --config /vagrant/vpn/client-dept18-payment.ovpn" >/dev/null 2>&1
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
        pid=$(ps -ef | grep "[o]penvpn --config $conf_file" | awk '{ print $2 }')
        echo $"$prog (pid $pid) is running..."
    else
        echo $"$prog is stopped"
    fi
}   

restart() {
    stop
    start
}   

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    status)
        status
        ;;
    condrestart)
        [ -f /var/lock/subsys/openvpn-client ] && restart || :
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart}"
        exit 1
esac

então você pode usá-lo como de costume:

# /etc/init.d/openvpn-client start
Starting openvpn-client:                                   [  OK  ]
# /etc/init.d/openvpn-client start
Starting openvpn-client:                                   [FAILED]
# /etc/init.d/openvpn-client status
openvpn-client (pid 5369) is running...

# /etc/init.d/openvpn-client stop
Stopping openvpn-client:                                   [  OK  ]
# /etc/init.d/openvpn-client stop
Stopping openvpn-client:                                   [FAILED]
# /etc/init.d/openvpn-client status
openvpn-client is stopped

# /etc/init.d/openvpn-client restart
Stopping openvpn-client:                                   [  OK  ]
Starting openvpn-client:                                   [  OK  ]
# /etc/init.d/openvpn-client status
openvpn-client (pid 5549) is running...

1
Isso desativa OK, mas não mata o processo openvpn. Se eu quiser recuperar a conexão novamente, preciso recuperar a interface e, em seguida, interromper o processo openvpn e executar o openvpn --config <blah> novamente. Eu (e acho que o OP) estava me perguntando se é dessa maneira que se destina, ou se existe uma maneira mais clara da qual simplesmente não estamos cientes.
JKim

@jkim: anexado um script init para RedHat com base na minha resposta.
quanta de

LEGAL! 123456789101112
dmourati

Sim, isso "funciona", mas não mata o OpenVPN.
Andrew

1

Simplesmente correr sudo pkill openvpnfuncionou bem para mim. (Linux Mint 19.1)


0

Eu nunca usei o raio livre, mas estou familiarizado com um problema semelhante no OpenVPN. Se a conexão for iniciada na linha de comando, o cliente VPN permanecerá ativo no prompt ou recuará em segundo plano, mas não há comando para interromper explicitamente a conexão.
No Linux, a única maneira de interromper a conexão é com um comando "kill" ou "killall". Pode ser semelhante para conexões de raio livre.


0

Apenas pensei em atualizar meu comentário com uma resposta mais completa (o que pode não ser relevante, considerando que eu não sei sobre raio livre) ..

Eu tenho usado uma distribuição Debian Linux e instalado o pacote openvpn. A configuração do cliente no Debian pode ser iniciada via linha de comando, o que leva a esse problema de aparentemente não haver uma maneira pura de terminar / gerenciar a conexão ...

Aprendi hoje que existe um script /etc/init.d/openvpn que é executado no momento da inicialização e se eu colocar o arquivo de configuração do openvpn em / etc / openvpn / (a ​​extensão do arquivo deve ser .conf), posso controlar a conexão usando /etc/init.d/openvpn stop e etc / init.d / openvpn start (ou "service openvpn stop").

Colocar o arquivo de configuração em / etc / openvpn / também faz com que o túnel da VPN apareça automaticamente no momento da inicialização. Ele também se reconecta após a desconexão automática também.

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.