Déconnexion openVPN via la ligne de commande sous Linux

11

Existe-t-il un moyen de déconnecter une connexion openvpn établie par free-radius avec une ligne de commande shell?

J'ai toutes les informations sur la connexion openvpn:

  • Nom d'utilisateur
  • IP client
  • AccountSeassionID
  • ...
hamedsh
la source
TL; DR: sudo pkill openvpn
Andrew

Réponses:

9

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

la commande pkill vous permet de signaler un processus basé sur le nom ou d'autres attributs

Cela enverra SIGTERM à l'openvpn, ce qui le fermera et fermera gracieusement l'interface tun. Vous devrez peut-être modifier la section après -f pour qu'elle corresponde à la façon dont vous avez démarré la connexion openvpn.

J'ai trouvé cela dans la section Signaux de la page de manuel openvpn.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.
gymnodemi
la source
wow, très pratique et élégant
georgiecasey
OOF! ^ J'espère que c'était du sarcasme
Andrew
4

Déterminez l'interface virtuelle avec 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)

et arrêtez-le avec:

sudo ifconfig tap0 down

Voici le script init que j'ai écrit pour 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

alors vous pouvez l'utiliser comme d'habitude:

# /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
la source
1
Cela le supprime OK, mais cela ne tue pas le processus openvpn. Si je veux rétablir la connexion, je dois rétablir l'interface, puis je dois tuer le processus openvpn, puis je dois réexécuter openvpn --config <blah>. Je (et je pense que le PO) me demandais si c'est ainsi que cela est prévu, ou s'il existe une manière plus nette dont nous ne sommes tout simplement pas conscients.
JKim
@jkim: ajouté un script d'initialisation pour RedHat basé sur ma réponse.
quanta
AGRÉABLE! 123456789101112
dmourati
Oui, cela "fonctionne" mais cela ne tue pas OpenVPN.
Andrew
1

Le simple fait de courir sudo pkill openvpna très bien fonctionné pour moi. (Linux Mint 19.1)

Andrew
la source
0

Je n'ai jamais utilisé de rayon libre, mais je connais un problème similaire dans OpenVPN. Si la connexion est démarrée à partir de la ligne de commande, le client VPN reste actif à l'invite ou se retire en arrière-plan, mais il n'y a aucune commande pour arrêter explicitement la connexion.
Sous Linux, le seul moyen d'arrêter la connexion est d'utiliser une commande "kill" ou "killall". Peut être similaire pour les connexions à rayon libre.

Wolfgangsz
la source
0

Je pensais juste mettre à jour mon commentaire avec une réponse plus complète (qui peut ne pas être pertinente, étant donné que je ne connais pas le rayon libre) ..

J'ai utilisé une distribution Debian Linux et installé le paquet openvpn. La configuration du client dans Debian peut être lancée via la ligne de commande, ce qui conduit à ce problème de n'avoir apparemment aucun moyen de terminer / gérer la connexion ...

J'ai appris aujourd'hui cependant qu'il y a un script /etc/init.d/openvpn qui s'exécute au démarrage et si je place le fichier de configuration openvpn dans / etc / openvpn / (l'extension de fichier doit être .conf), je peux contrôler la connexion en utilisant /etc/init.d/openvpn stop et etc / init.d / openvpn start (ou "service openvpn stop").

Le fait de placer le fichier de configuration dans / etc / openvpn / fait également apparaître automatiquement le tunnel VPN au démarrage. Il se reconnecte également automatiquement après la déconnexion.

JKim
la source