відключення openVPN за допомогою командного рядка в Linux


11

Чи є спосіб відключити з'єднання openvpn, встановлене вільним радіусом, командним рядком оболонки?

У мене є вся інформація про openvpn-з'єднання:

  • Ім'я користувача
  • IP клієнта
  • AccountSeassionID
  • ...

TL; DR: sudo pkill openvpn
Андрій

Відповіді:


9

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

команда pkill дозволяє подавати сигнал про процес на основі імені або інших атрибутів

Це надішле SIGTERM на openvpn, змусивши його виграшно закрити та закрити інтерфейс tun. Вам може / знадобиться змінити розділ після -f, щоб він відповідав тому, як ви запустили з'єднання openvpn.

Я знайшов це в розділі «Сигнали» на сторінці відкритого доступу до чоловіка.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.

вау, дуже зручна та елегантна
georgiecasey

OOF! ^ Я сподіваюся, що це був сарказм
Андрій

4

Визначте віртуальний інтерфейс за допомогою 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)

і вимкніть його за допомогою:

sudo ifconfig tap0 down

Ось сценарій init, який я написав для 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

тоді ви можете використовувати його як завжди:

# /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
Це знімає це нормально, але він не вбиває процес openvpn. Якщо я хочу знову відновити з'єднання, мені доведеться повернути інтерфейс назад, а потім мені доведеться вбити процес openvpn, а потім мені доведеться запустити openvpn --config <blah> ще раз. Мені (і я думаю, що ОП) цікавилося, чи це так, як це призначено, чи є акуратний спосіб, про який ми просто не знаємо.
JKim

@jkim: додав сценарій init для RedHat на основі моєї відповіді.
кванта

НІШЕ! 123456789101112
dmourati

Так, це "працює", але OpenVPN не вбиває.
Андрій

1

Просто біг sudo pkill openvpnпрацював для мене просто чудово. (Linux Mint 19.1)


0

Я ніколи не використовував вільний радіус, але мені знайома аналогічна проблема у OpenVPN. Якщо з'єднання запускається з командного рядка, то клієнт VPN або залишається живим у запиті, або відступає на другий план, але немає команди, яка явно припиняла б з'єднання.
В Linux єдиний спосіб зупинити з'єднання - це команда "kill" або "killall". Може бути подібним для підключень вільного радіусу.


0

Просто подумав, що я б оновив свій коментар більш повною відповіддю (що може не бути актуальним, враховуючи, що я не знаю про вільний радіус) ..

Я використовував дистрибутив Debian Linux і встановив пакет openvpn. Конфігурацію клієнта в Debian можна запустити через командний рядок, що призводить до цієї проблеми, що, здавалося б, немає акуратного способу припинити / керувати з'єднанням ...

Сьогодні я дізнався, що існує сценарій /etc/init.d/openvpn, який працює під час завантаження, і якщо я розміщую конфігураційний файл openvpn в / etc / openvpn / (розширення файлу повинно бути .conf), я можу контролювати з'єднання використовуючи /etc/init.d/openvpn зупинку та ін. / init.d / openvpn start (або "сервіс openvpn stop").

Поміщення конфігураційного файлу в / etc / openvpn / також спричиняє тунель VPN автоматично під час завантаження. Після відключення він також підключається автоматично.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.