openVPN trennen über die Kommandozeile unter Linux

11

Gibt es eine Möglichkeit, eine OpenVPN-Verbindung zu trennen, die durch freien Radius mit einer Shell-Befehlszeile hergestellt wurde?

Ich habe alle Informationen über die openvpn-Verbindung:

  • Nutzername
  • Client-IP
  • AccountSeassionID
  • ...
hamedsh
quelle
TL; DR: sudo pkill openvpn
Andrew

Antworten:

9

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

Mit dem Befehl pkill können Sie einen Prozess basierend auf dem Namen oder anderen Attributen signalisieren

Dadurch wird SIGTERM an openvpn gesendet, wodurch das Tun-Interface ordnungsgemäß beendet und geschlossen wird. Möglicherweise müssen / müssen Sie den Abschnitt nach -f so ändern, dass er der Art und Weise entspricht, wie Sie die openvpn-Verbindung gestartet haben.

Ich habe dies im Abschnitt "Signale" der openvpn-Manpage gefunden.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.
gymnodemi
quelle
wow, sehr handlich und elegant
georgiecasey
UFF! ^ Ich hoffe das war Sarkasmus
Andrew
4

Bestimmen Sie die virtuelle Schnittstelle mit 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)

und herunterfahren mit:

sudo ifconfig tap0 down

Hier ist das Init-Skript, das ich für RedHat geschrieben habe:

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

dann können Sie es wie gewohnt verwenden:

# /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...
Quanten
quelle
1
Dadurch wird es in Ordnung gebracht, aber der openvpn-Prozess wird nicht beendet. Wenn ich die Verbindung wieder herstellen möchte, muss ich die Schnittstelle wieder herstellen, und dann muss ich den openvpn-Prozess beenden und dann openvpn --config <blah> erneut ausführen. Ich (und ich denke, das OP) habe mich gefragt, ob dies so beabsichtigt ist oder ob es einen saubereren Weg gibt, den wir einfach nicht kennen.
JKim
@jkim: An meine Antwort wurde ein Init-Skript für RedHat angehängt.
Quanten
NETT! 123456789101112
dmourati
Ja, das "funktioniert", aber es tötet OpenVPN nicht.
Andrew
1

Einfach laufen sudo pkill openvpnhat für mich ganz gut funktioniert. (Linux Mint 19.1)

Andrew
quelle
0

Ich habe noch nie freien Radius verwendet, bin aber mit einem ähnlichen Problem in OpenVPN vertraut. Wenn die Verbindung über die Befehlszeile gestartet wird, bleibt der VPN-Client entweder an der Eingabeaufforderung am Leben oder er zieht sich in den Hintergrund zurück, es gibt jedoch keinen Befehl zum expliziten Beenden der Verbindung.
Unter Linux kann die Verbindung nur mit einem Befehl "kill" oder "killall" unterbrochen werden. Könnte für Verbindungen mit freiem Radius ähnlich sein.

wolfgangsz
quelle
0

Ich dachte nur, ich würde meinen Kommentar mit einer ausführlicheren Antwort aktualisieren (was möglicherweise nicht relevant ist, wenn man bedenkt, dass ich nichts über den freien Radius weiß).

Ich habe eine Debian Linux-Distribution verwendet und das openvpn-Paket installiert. Die Client-Konfiguration in Debian kann über die Befehlszeile gestartet werden, was zu dem Problem führt, dass es anscheinend keine saubere Möglichkeit gibt, die Verbindung zu beenden / zu verwalten ...

Ich habe heute jedoch erfahren, dass es ein /etc/init.d/openvpn-Skript gibt, das beim Booten ausgeführt wird. Wenn ich die openvpn-Konfigurationsdatei in / etc / openvpn / ablege (die Dateierweiterung muss .conf sein), kann ich die Verbindung steuern mit /etc/init.d/openvpn stop und etc / init.d / openvpn start (oder "service openvpn stop").

Wenn Sie die Konfigurationsdatei in / etc / openvpn / ablegen, wird der VPN-Tunnel beim Booten automatisch gestartet. Es wird auch nach dem automatischen Trennen automatisch wieder verbunden.

JKim
quelle