openVPN отключить через командную строку в Linux


11

Есть ли способ отключить соединение openvpn, которое было установлено free-radius с командной строкой оболочки?

У меня есть вся информация о соединении openvpn:

  • имя пользователя
  • IP-адрес клиента
  • AccountSeassionID
  • ...

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

Ответы:


9

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

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

Это отправит SIGTERM на openvpn, что заставит его корректно выйти и закрыть интерфейс tun. Вам может потребоваться изменить раздел после -f, чтобы он соответствовал тому, как вы установили соединение openvpn.

Я нашел это в разделе Сигналы на странице руководства 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

Вот сценарий инициализации, который я написал для 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: к моему ответу добавлен скрипт инициализации для RedHat.
кванта

ОТЛИЧНО! 123456789101112
dmourati

Да, это «работает», но не убивает OpenVPN.
Андрей


0

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


0

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.