desconexión de openVPN a través de la línea de comando en Linux

11

¿Hay alguna forma de desconectar una conexión openvpn establecida por radio libre con una línea de comando de shell?

Tengo toda la información sobre la conexión openvpn:

  • Nombre de usuario
  • IP del cliente
  • AccountSeassionID
  • ...
hamedsh
fuente
TL; DR: sudo pkill openvpn
Andrew

Respuestas:

9

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

El comando pkill le permite señalar un proceso basado en el nombre u otros atributos

Esto enviará SIGTERM a openvpn, lo que provocará que salga y cierre la interfaz de tun. Es posible que deba modificar la sección después de -f para que coincida con la forma en que inició la conexión openvpn.

Encontré esto en la sección Señales de la página de manual de openvpn.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.
gymnodemi
fuente
wow, muy práctico y elegante
georgiecasey
OOF! ^ Espero que haya sido sarcasmo
Andrew
4

Determine la interfaz virtual con 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)

y apagarlo con:

sudo ifconfig tap0 down

Aquí está el script de inicio que escribí para 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

entonces puedes usarlo como siempre:

# /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...
quanta
fuente
1
Esto lo lleva bien, pero no mata el proceso openvpn. Si quiero volver a activar la conexión, tengo que volver a activar la interfaz, y luego tengo que eliminar el proceso openvpn, y luego tengo que ejecutar openvpn --config <blah> nuevamente. Yo (y creo que el OP) me preguntaba si esta es la forma en que está destinada, o si hay una forma más ordenada de la que simplemente no somos conscientes.
JKim
@jkim: agregué un script de inicio para RedHat basado en mi respuesta.
quanta
¡BONITO! 123456789101112
dmourati
Sí, esto "funciona" pero no mata a OpenVPN.
Andrew
1

Simplemente correr sudo pkill openvpnfuncionó bien para mí. (Linux Mint 19.1)

Andrés
fuente
0

Nunca he usado radio libre, pero estoy familiarizado con un problema similar en OpenVPN. Si la conexión se inicia desde la línea de comando, entonces el cliente VPN permanece vivo en la solicitud o se retira al fondo, pero no hay un comando para detener explícitamente la conexión.
En Linux, la única forma de detener la conexión es con un comando "kill" o "killall". Podría ser similar para conexiones de radio libre.

wolfgangsz
fuente
0

Solo pensé en actualizar mi comentario con una respuesta más completa (lo que puede no ser relevante, considerando que no sé sobre el radio libre).

He estado usando una distribución Debian Linux e instalé el paquete openvpn. La configuración del cliente en Debian se puede iniciar a través de la línea de comandos, lo que lleva a uno a este problema de que aparentemente no hay una forma ordenada de terminar / administrar la conexión ...

Sin embargo, hoy aprendí que hay un script /etc/init.d/openvpn que se ejecuta en el momento del arranque y si coloco el archivo de configuración de openvpn en / etc / openvpn / (la extensión del archivo debe ser .conf), puedo controlar la conexión utilizando /etc/init.d/openvpn stop y etc / init.d / openvpn start (o "service openvpn stop").

Poner el archivo de configuración en / etc / openvpn / también hace que el túnel VPN se levante automáticamente en el momento del arranque. También se vuelve a conectar después de desconectarse automáticamente.

JKim
fuente