181 lines
4.5 KiB
Bash
181 lines
4.5 KiB
Bash
<#!/bin/bash
|
|
|
|
if [[ "${VPN_BASH}" != "" ]]
|
|
then
|
|
return
|
|
else
|
|
declare -g VPN_BASH=1
|
|
fi
|
|
|
|
|
|
|
|
# Includes
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
. /usr/global/lib/network.bash
|
|
|
|
|
|
|
|
|
|
|
|
# Global Variable
|
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
declare -Ag VPN_JOB_TAB
|
|
declare -g VPN_STATUS_FILE="/var/lib/rx3-vpn.status"
|
|
|
|
|
|
|
|
|
|
|
|
if [ ! -v LOG ] || [[ "${LOG}" == "" ]]
|
|
then
|
|
export LOG=":"
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
# vpn_init
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
|
|
vpn_init()
|
|
{
|
|
network_init
|
|
|
|
file_dir_init ${VPN_STATUS_FILE} root apache
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
# vpn_deinit
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
|
|
vpn_deinit()
|
|
{
|
|
network_deinit
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
# vpn_start
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
|
|
vpn_start()
|
|
{
|
|
local job_id=0
|
|
local job_nb
|
|
local dst_id
|
|
local config_file
|
|
local mng_port
|
|
|
|
|
|
for dst_id in ${NETWORK_DST_ID_LIST}
|
|
do
|
|
network_dst_tab_get ${dst_id}
|
|
|
|
if [[ "${dst_type}" == "1" ]]
|
|
then
|
|
config_file="${VPN_CONFIG_FILE/DEVICE/${dst_device}}"
|
|
mng_port=$((2330+$(echo ${dev} | sed -e "s/tun//")))
|
|
|
|
tab_assign VPN_JOB_TAB "${dst_id},PId" "0"
|
|
tab_assign VPN_JOB_TAB "${dst_id},Cmd" "/usr/sbin/openvpn --config ${config_file} --dev ${dst_device} --daemon"
|
|
|
|
${DEBUG} \rm -f ${config_file} 2>/dev/null
|
|
${DEBUG} sed -e "s/TARGET-CFG/${dst_config}-client.conf/" -e "s/VPN-DEVICE/${dst_device}/" -e "s/MNG-PORT/${mng_port}/" <${template_file} >${config_file}
|
|
|
|
echo >>${LOG_FILE} $(date) "Loading config: VPN[${dst_id}] Name: [${dst_name}] Cmd: [${VPN_JOB_TAB["${job_id},Cmd"]}]"
|
|
job_id=$(( ${job_id} + 1))
|
|
fi
|
|
done
|
|
|
|
job_nb=${job_id}
|
|
|
|
|
|
# Main Loop
|
|
|
|
while true
|
|
do
|
|
while [[ "${job_id}" -lt "${job_nb}" ]]
|
|
do
|
|
${DEBUG} kill -0 ${VPN_JOB_TAB["${job_id},PId"]} 2>/dev/null
|
|
rc=$?
|
|
|
|
if [[ ${VPN_JOB_TAB["${job_id},PId]"]} == 0 ]] || [[ $rc != 0 ]]
|
|
then
|
|
echo >> ${LOG_FILE} $(date) "Restarting Cmd: [${VPN_JOB_TAB["${job_id}",Cmd]}]..."
|
|
|
|
eval ${DEBUG} ${VPN_JOB_TAB["${job_id},Cmd"]}
|
|
|
|
VPN_JOB_TAB["${job_id},PId"]="$( ps aux | grep "${VPN_JOB_TAB["Cmd,${job_id}"]}" | grep -v grep | head -1 | awk '{print $2}')"
|
|
VPN_JOB_TAB["${job_id},Date"]="$(date)"
|
|
|
|
echo >> ${LOG_FILE} $(date) "PId: [${VPN_JOB_TAB["${job_id},PId"]}]!"
|
|
fi
|
|
|
|
job_id=$(( ${job_id} + 1))
|
|
done
|
|
|
|
job_id=0
|
|
>${VPN_STATUS_FILE}
|
|
|
|
while [[ ${job_id} -lt ${job_nb} ]]
|
|
do
|
|
echo >>${VPN_STATUS_FILE} "PId: [${VPN_JOB_TAB["${job_id},PId"]}] Date: [${VPN_JOB_TAB["${job_id},Date"]}] Cmd: [${VPN_JOB_TAB["${job_id},Date"]}]"
|
|
job_id=$(( ${job_id} + 1))
|
|
done
|
|
|
|
job_id=0
|
|
|
|
sleep 30
|
|
|
|
network_dst_address_refresh_all
|
|
done
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
# vpn_stop
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
|
|
vpn_stop()
|
|
{
|
|
echo >> ${LOG_FILE} $(date) "Killing daemon: [$(cat ${PID_FILE})]..."
|
|
|
|
kill -15 $(cat ${PID_FILE})
|
|
|
|
while read stat
|
|
do
|
|
echo >> ${LOG_FILE} $(date) "Killing VPN: [$stat] [$(echo "$stat" | sed -e 's/PId: \[//' -e 's/\].*//')]..."
|
|
${DEBUG} kill -15 $(echo "$stat" | sed -e 's/PId: \[//' -e 's/\].*//')
|
|
done <${VPN_STATUS_FILE}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
# vpn_status
|
|
#--------------------------------------------------------------------------------------------------------------------------
|
|
|
|
vpn_status()
|
|
{
|
|
if [ -f ${VPN_STATUS_FILE} ]
|
|
then
|
|
cat ${VPN_STATUS_FILE}
|
|
fi
|
|
}
|