openVPN ตัดการเชื่อมต่อผ่านบรรทัดคำสั่งใน linux


11

มีวิธีตัดการเชื่อมต่อ openvpn ที่สร้างโดยรัศมีอิสระด้วยบรรทัดคำสั่งเชลล์หรือไม่?

ฉันมีข้อมูลทั้งหมดเกี่ยวกับการเชื่อมต่อ openvpn:

  • ชื่อผู้ใช้
  • IP ของลูกค้า
  • AccountSeassionID
  • ...

TL; DR: sudo pkill openvpn
Andrew

คำตอบ:


9

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

คำสั่ง pkill อนุญาตให้คุณส่งสัญญาณกระบวนการตามชื่อหรือแอ็ตทริบิวต์อื่น

สิ่งนี้จะส่ง SIGTERM ไปที่ openvpn ทำให้เลิกอย่างเรียบร้อยและปิดอินเตอร์เฟส tun คุณอาจ / จะต้องแก้ไขส่วนหลังจาก -f เพื่อให้ตรงกับวิธีที่คุณเริ่มการเชื่อมต่อ openvpn

ฉันพบสิ่งนี้ในส่วนสัญญาณของหน้า man openvpn

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.

ว้าวมีประโยชน์มากและสง่างาม
georgiecasey

OOF! ฉันหวังว่าจะเป็นการเสียดสี
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:

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

@jkim: ผนวกสคริปต์เริ่มต้นสำหรับ RedHat ตามคำตอบของฉัน
quanta

NICE! 123456789101112
dmourati

ใช่สิ่งนี้ "ใช้งานได้" แต่ไม่ได้ฆ่า OpenVPN
แอนดรู


0

ฉันไม่เคยใช้รัศมีฟรี แต่ฉันคุ้นเคยกับปัญหาที่คล้ายกันใน OpenVPN หากการเชื่อมต่อเริ่มต้นจากบรรทัดคำสั่งไคลเอนต์ VPN จะยังคงมีชีวิตอยู่บนพร้อมท์หรือพักเป็นพื้นหลัง แต่ไม่มีคำสั่งให้หยุดการเชื่อมต่ออย่างชัดเจน
ภายใต้ Linux วิธีเดียวที่จะหยุดการเชื่อมต่อคือใช้คำสั่ง "kill" หรือ "killall" อาจคล้ายกันสำหรับการเชื่อมต่อรัศมีฟรี


0

แค่คิดว่าฉันจะอัปเดตความคิดเห็นของฉันด้วยคำตอบแบบเต็ม (ซึ่งอาจไม่เกี่ยวข้องเนื่องจากฉันไม่รู้เกี่ยวกับรัศมีอิสระ)

ฉันใช้ Debian Linux distro และติดตั้งแพ็คเกจ openvpn แล้ว การกำหนดค่าไคลเอนต์ใน Debian สามารถเปิดใช้งานผ่านทางบรรทัดคำสั่งซึ่งนำไปสู่ปัญหานี้อย่างหนึ่งของการที่ดูเหมือนไม่มีวิธีที่เป็นระเบียบในการยุติ / จัดการการเชื่อมต่อ ...

ฉันเรียนรู้วันนี้แม้ว่าจะมีสคริปต์ /etc/init.d/openvpn ที่รันตอนบูทและถ้าฉันวางไฟล์ config openvpn ไว้ใน / etc / openvpn / (นามสกุลไฟล์ต้องเป็น. config) ฉันสามารถควบคุมการเชื่อมต่อได้ โดยใช้ /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.