리눅스에서 커맨드 라인을 통한 openVPN 연결 끊기


11

쉘 명령 행으로 자유 반경으로 설정된 openvpn 연결을 끊는 방법이 있습니까?

openvpn 연결에 대한 모든 정보가 있습니다.

  • 사용자 이름
  • 클라이언트 IP
  • AccountSeassionID
  • ...

TL; DR : sudo pkill openvpn
앤드류

답변:


9

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

pkill 명령을 사용하면 이름 또는 기타 속성을 기반으로 프로세스에 신호를 보낼 수 있습니다

그러면 SIGTERM이 openvpn으로 전송되어 tun 인터페이스를 정상적으로 종료하고 닫습니다. openvpn 연결을 시작한 방식과 일치하도록 -f 뒤에 섹션을 수정해야 할 수도 있습니다.

openvpn 매뉴얼 페이지의 신호 섹션에서이를 발견했습니다.

   SIGINT, SIGTERM
      Causes OpenVPN to exit gracefully.

와우, 매우 편리하고 우아하다
georgiecasey

돈! ^ 나는 그것이 빈정 거렸다 희망
앤드류

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

@ jkim : 내 대답에 따라 RedHat에 init 스크립트를 추가했습니다.
quanta

좋은! 123456789101112
dmourati

그래, 이것은 "작동"하지만 OpenVPN을 죽이지 않습니다.
앤드류

1

단순히 달리기 sudo pkill openvpn는 나에게 잘 작동 했습니다. (리눅스 민트 19.1)


0

나는 자유 반경을 사용한 적이 없지만 OpenVPN의 비슷한 문제에 익숙합니다. 명령 줄에서 연결이 시작된 경우 VPN 클라이언트는 프롬프트에서 활성 상태를 유지하거나 백그라운드로 후퇴하지만 연결을 명시 적으로 중지하라는 명령은 없습니다.
Linux에서 연결을 중지하는 유일한 방법은 "kill"또는 "killall"명령을 사용하는 것입니다. 자유 반경 연결과 유사 할 수 있습니다.


0

방금 완전한 대답으로 내 의견을 업데이트 할 것이라고 생각했습니다 (자유 반경에 대해 모른다는 점을 고려하면 관련성이 없을 수도 있음).

데비안 리눅스 배포판을 사용하고 openvpn 패키지를 설치했습니다. 데비안의 클라이언트 설정은 커맨드 라인을 통해 시작할 수 있으며, 연결을 종료 / 관리하는 깔끔한 방법이없는이 문제로 이어집니다 ...

부팅시 실행되는 /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.