Ngắt kết nối openVPN thông qua dòng lệnh trong linux


11

Có cách nào để ngắt kết nối openvpn được thiết lập bởi bán kính tự do với một dòng lệnh shell?

Tôi có tất cả thông tin về kết nối openvpn:

  • tên tài khoản
  • IP khách hàng
  • AccountS assionID
  • ...

TL; DR: sudo pkill openvpn
Andrew

Câu trả lời:


9

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

lệnh pkill cho phép bạn báo hiệu một quá trình dựa trên tên hoặc các thuộc tính khác

Điều này sẽ gửi SIGTERM đến openvpn khiến nó thoát ra một cách duyên dáng và đóng giao diện điều chỉnh. Bạn có thể / sẽ cần sửa đổi phần sau -f để khớp với cách bạn bắt đầu kết nối openvpn.

Tôi tìm thấy điều này trong phần Tín hiệu của trang man openvpn.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.

wow, rất tiện dụng và thanh lịch
georgiecasey

OOF! ^ Tôi hy vọng đó là sự mỉa mai
Andrew

4

Xác định giao diện ảo với 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)

và tắt nó với:

sudo ifconfig tap0 down

Đây là tập lệnh init mà tôi đã viết cho RedHat dựa trên:

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

sau đó bạn có thể sử dụng nó như bình thường:

# /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
Điều này đưa nó xuống OK, nhưng nó không giết quá trình openvpn. Nếu tôi muốn đưa kết nối trở lại một lần nữa, tôi phải đưa giao diện trở lại, và sau đó tôi phải hủy quá trình openvpn, và sau đó tôi phải chạy openvpn --config <blah> một lần nữa. Tôi (và tôi nghĩ OP) đã tự hỏi liệu đây có phải là cách nó dự định hay không, nếu có một cách gọn gàng hơn mà chúng ta không biết.
JKim

@jkim: thêm một tập lệnh init cho RedHat dựa trên câu trả lời của tôi.
lượng tử

ĐẸP! 123456789101112
dmourati

Vâng, "hoạt động" này nhưng nó không giết OpenVPN.
Andrew

1

Đơn giản chỉ cần chạy sudo pkill openvpnlàm việc tốt cho tôi. (Linux Mint 19.1)


0

Tôi chưa bao giờ sử dụng bán kính tự do, nhưng tôi quen với một vấn đề tương tự trong OpenVPN. Nếu kết nối được bắt đầu từ dòng lệnh, thì máy khách VPN vẫn tồn tại trên dấu nhắc hoặc nó rút lui vào nền, nhưng không có lệnh dừng kết nối rõ ràng.
Trong Linux, cách duy nhất để dừng kết nối là bằng lệnh "kill" hoặc "killall". Có thể tương tự cho các kết nối bán kính tự do.


0

Chỉ cần nghĩ rằng tôi sẽ cập nhật nhận xét của mình bằng một câu trả lời đầy đủ hơn (có thể không liên quan, vì tôi không biết về bán kính tự do) ..

Tôi đã sử dụng bản phân phối Debian Linux và cài đặt gói openvpn. Cấu hình máy khách trong Debian có thể được khởi chạy thông qua dòng lệnh, điều này dẫn đến một vấn đề là dường như không có cách nào gọn gàng để chấm dứt / quản lý kết nối ...

Tôi đã học được ngày hôm nay mặc dù có tập lệnh /etc/init.d/openvpn chạy khi khởi động và nếu tôi đặt tệp cấu hình openvpn trong / etc / openvpn / (phần mở rộng tệp phải là .conf), tôi có thể kiểm soát kết nối bằng cách sử dụng /etc/init.d/openvpn stop và etc / init.d / openvpn start (hoặc "dịch vụ openvpn stop").

Đặt tệp cấu hình vào / etc / openvpn / cũng khiến đường hầm VPN tự động xuất hiện khi khởi động. Nó cũng kết nối lại sau khi ngắt kết nối tự động là tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.