LinuxでのコマンドラインによるopenVPNの切断


11

シェルコマンドラインでfree-radiusによって確立されたopenvpn接続を切断する方法はありますか?

openvpn接続に関するすべての情報があります。

  • ユーザー名
  • クライアントIP
  • AccountSeassionID
  • ...

TL; DR: sudo pkill openvpn
アンドリュー

回答:


9

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

pkillコマンドを使用すると、名前またはその他の属性に基づいてプロセスに信号を送ることができます

これにより、openvpnにSIGTERMが送信され、正常に終了してtunインターフェースが閉じます。openfpn接続を開始した方法と一致するように、-fの後のセクションを変更する必要がある場合があります。

これはopenvpnのmanページのSignalsセクションで見つかりました。

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.

すごい、非常に便利でエレガント
georgiecasey

ウーフ!^私はそれが皮肉だったと思います
Andrew

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ベース用に私が作成したinitスクリプトです。

#! /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>を再度実行する必要があります。私(と私はOPだと思います)は、これが意図した方法なのか、それとも私たちが気付いていないよりきちんとした方法があるのか​​疑問に思っていました。
JKim 2013

@jkim:私の回答に基づいてRedHatの初期化スクリプトを追加しました。
クォンタム2013

いいね!123456789101112
dmourati 2015

ええ、これは「うまくいく」が、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、およびetc / init.d / openvpn start(または「service openvpn stop」)を使用する。

/ etc / openvpn /に設定ファイルを置くと、VPNトンネルが起動時に自動的に起動します。また、切断後に自動的に再接続します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.