답변:
pkill -SIGTERM -f 'openvpn --daemon --conf $ OPENVPNCONFFILE'
pkill 명령을 사용하면 이름 또는 기타 속성을 기반으로 프로세스에 신호를 보낼 수 있습니다
그러면 SIGTERM이 openvpn으로 전송되어 tun 인터페이스를 정상적으로 종료하고 닫습니다. openvpn 연결을 시작한 방식과 일치하도록 -f 뒤에 섹션을 수정해야 할 수도 있습니다.
openvpn 매뉴얼 페이지의 신호 섹션에서이를 발견했습니다.
SIGINT, SIGTERM
Causes OpenVPN to exit gracefully.
다음을 사용하여 가상 인터페이스를 결정하십시오 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...
방금 완전한 대답으로 내 의견을 업데이트 할 것이라고 생각했습니다 (자유 반경에 대해 모른다는 점을 고려하면 관련성이 없을 수도 있음).
데비안 리눅스 배포판을 사용하고 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 터널이 자동으로 나타납니다. 또한 연결을 끊은 후에도 자동으로 다시 연결됩니다.
sudo pkill openvpn