openVPN rozłącza za pomocą wiersza poleceń w systemie Linux


11

Czy istnieje sposób na rozłączenie połączenia openvpn, które zostało ustanowione przez wolne pole za pomocą wiersza poleceń powłoki?

Mam wszystkie informacje o połączeniu openvpn:

  • Nazwa Użytkownika
  • Adres IP klienta
  • AccountSeassionID
  • ...

TL; DR: sudo pkill openvpn
Andrew

Odpowiedzi:


9

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

polecenie pkill pozwala zasygnalizować proces na podstawie nazwy lub innych atrybutów

Spowoduje to wysłanie SIGTERM do openvpn, powodując, że z wdziękiem zamknie i zamknie interfejs tun. Być może będziesz musiał / a zmodyfikować sekcję po opcji -f, aby była zgodna ze sposobem uruchomienia połączenia openvpn.

Znalazłem to w sekcji Sygnały strony man openvpn.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.

wow, bardzo poręczny i elegancki
georgiecasey

OOF! ^ Mam nadzieję, że to był sarkazm
Andrew

4

Określ interfejs wirtualny za pomocą 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)

i wyłącz go za pomocą:

sudo ifconfig tap0 down

Oto skrypt inicjujący, który napisałem dla RedHata:

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

możesz go używać jak zwykle:

# /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
To usuwa OK, ale nie zabija procesu openvpn. Jeśli chcę przywrócić połączenie ponownie, muszę przywrócić interfejs, a następnie muszę zabić proces openvpn, a następnie ponownie uruchomić openvpn --config <blah>. Ja (i myślę, że OP) zastanawiałem się, czy jest to sposób, w jaki jest przeznaczony, czy może jest to lepszy sposób, którego po prostu nie jesteśmy świadomi.
JKim

@jkim: dołączyłem skrypt inicjujący dla RedHat na podstawie mojej odpowiedzi.
kwanty

MIŁY! 123456789101112
dmourati

Tak, to „działa”, ale nie zabija OpenVPN.
Andrew

1

Po prostu bieganie sudo pkill openvpndziałało mi dobrze. (Linux Mint 19.1)


0

Nigdy nie korzystałem z wolnego promienia, ale znam podobny problem w OpenVPN. Jeśli połączenie zostanie uruchomione z wiersza polecenia, klient VPN albo pozostanie aktywny w wierszu polecenia, albo wycofa się w tło, ale nie ma polecenia jawnego zatrzymania połączenia.
W Linuksie jedynym sposobem na przerwanie połączenia jest użycie polecenia „kill” lub „killall”. Podobnie może być w przypadku połączeń o swobodnym promieniu.


0

Pomyślałem, że zaktualizuję mój komentarz pełniejszą odpowiedzią (co może nie być istotne, biorąc pod uwagę, że nie wiem o wolnym promieniu).

Korzystałem z dystrybucji Linuksa Debiana i zainstalowałem pakiet openvpn. Konfiguracja klienta w Debianie może zostać uruchomiona za pomocą wiersza poleceń, co prowadzi do problemu polegającego na tym, że pozornie nie ma dobrego sposobu na zakończenie / zarządzanie połączeniem ...

Dowiedziałem się jednak dzisiaj, że istnieje skrypt /etc/init.d/openvpn, który działa w czasie uruchamiania i jeśli umieszczę plik konfiguracyjny openvpn w / etc / openvpn / (rozszerzenie pliku musi mieć rozszerzenie .conf), mogę kontrolować połączenie za pomocą /etc/init.d/openvpn stop i etc / init.d / openvpn start (lub „service openvpn stop”).

Umieszczenie pliku konfiguracyjnego w / etc / openvpn / powoduje również automatyczne uruchomienie tunelu VPN podczas uruchamiania. Łączy się również ponownie automatycznie po rozłączeniu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.