6 Commits

Author SHA1 Message Date
b1c51d6cfd - Improve device up api events,
- Improve openvpn stats reporting,
- Add a new conection state for gateways device up with no gateway client conected.
2025-09-01 01:09:29 +02:00
235076b6b9 - Complete the first gateway support implementation,
- More tests needed!
2025-08-26 19:14:05 +02:00
7e05bc0ba0 - Fix cgi execution mode. 2025-08-24 12:55:19 +02:00
5fb45c3944 - Contunue gatway support implementation. 2025-08-24 12:47:58 +02:00
67f1ec7de8 - Start VPN gateways support implementation. 2025-08-23 11:58:29 +02:00
7a2bd651d7 - Move dns.bash from global to local,
- Add installation support of default.bash in local or global.
2025-08-17 11:55:43 +02:00
10 changed files with 579 additions and 167 deletions

View File

@@ -1,5 +1,13 @@
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
Network Rools V 1.0.0 - A. GIBERT - 2025/08/12 Network Tools V 1.1.0 - A. GIBERT - 2025/08/26
------------------------------------------------------------------------------------------------------------------------------------
- Add VPN Gateway support.
------------------------------------------------------------------------------------------------------------------------------------
Network Tools V 1.0.0 - A. GIBERT - 2025/08/12
------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------
- Initial release, - Initial release,

View File

@@ -341,7 +341,7 @@ log_print()
file_lock "${lock_file}" WRITE 8 file_lock "${lock_file}" WRITE 8
fi fi
printf >> "${log_file}" "%s %9s %3s %8s %s\n" "$(date --rfc-3339=seconds -u)" "($BASHPID)" "${log_type}" "${log_prefix}:" "$*" printf >> "${log_file}" "%s %9s %3s %16s %s\n" "$(date --rfc-3339=seconds -u)" "($BASHPID)" "${log_type}" "${log_prefix}:" "$*"
if [[ "${lock_file}" != "" ]] if [[ "${lock_file}" != "" ]]
then then

View File

@@ -12,11 +12,12 @@ fi
# Includes # Includes
#----------------------------------------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------------------------------------
if [[ -e /usr/local/lib/default.bash ]]
then
. /usr/local/lib/default.bash
else
. /usr/global/lib/default.bash . /usr/global/lib/default.bash
fi
#[ -e /var/cache/dns.cache ] && . /var/cache/dns.cache

View File

@@ -12,7 +12,7 @@ fi
# Includes # Includes
#----------------------------------------------------------------------------------------------------------------------------------- #-----------------------------------------------------------------------------------------------------------------------------------
. /usr/global/lib/dns.bash . /usr/local/lib/dns.bash
@@ -168,6 +168,72 @@ network_common_dump()
#--------------------------------------------------------------------------------------------------------------------------
# network_common_openvpn_stats_get
#--------------------------------------------------------------------------------------------------------------------------
network_common_openvpn_stats_get()
{
local device="$1"
local client="$2"
if [[ "${client}" == "" ]]
then
client=".*"
else
if [[ "${device}" == "" ]]
then
tmp="$( echo "${NETWORK_OPENVPN_STATUS}" | grep "CLIENT_LIST,${client},")"
tmp="${tmp/*\//}"
device="${tmp/.status*/}"
fi
fi
if [[ "${device}" != "" ]]
then
if [[ "${NETWORK_OPENVPN_STATUS}" =~ ("${device}.status: TITLE") ]]
then
# OpenVPN Server Mode
OIFS="${IFS}"
IFS=","
set XXX/$( echo "${NETWORK_OPENVPN_STATUS}" | grep "${device}\.status: CLIENT_LIST,${client},") &>/dev/null
IFS="${OIFS}"
tmp="${1/XXX*\//}"
ovpn_stat_device="${tmp/.status*/}"
ovpn_stat_client_name="$2"
ovpn_stat_address_ext="$3"
ovpn_stat_address_int="$4"
ovpn_stat_address_int6="$5"
ovpn_stat_bytes_received="$6"
ovpn_stat_bytes_sent="$7"
ovpn_stat_connected_date="$8"
ovpn_stat_connected_time_t="$9"
ovpn_stat_user_name="$10"
ovpn_stat_client_id="$11"
ovpn_stat_peer_id="$12"
ovpn_stat_cipher="$13"
else
# OpenVPN Client Mode
set XXX/$( echo "${NETWORK_OPENVPN_STATUS}" | grep "${device}\.status:") &>/dev/null
tmp="${1/XXX*\//}"
ovpn_stat_device="${tmp/.status*/}"
ovpn_stat_bytes_received="${18/bytes,}"
ovpn_stat_bytes_sent="${22/bytes,}"
fi
else
ovpn_stat_device=""
fi
}
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
# network_ip_route_tab_load # network_ip_route_tab_load
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
@@ -233,6 +299,7 @@ network_ip_route_tab_dump()
echo "NETWORK_IP_ROUTE_ID_LIST: [${NETWORK_IP_ROUTE_ID_LIST}]" echo "NETWORK_IP_ROUTE_ID_LIST: [${NETWORK_IP_ROUTE_ID_LIST}]"
echo echo
echo "NETWORK_IP_ROUTE_IP_IDX:" echo "NETWORK_IP_ROUTE_IP_IDX:"
for key in "${!NETWORK_IP_ROUTE_IP_IDX[@]}" for key in "${!NETWORK_IP_ROUTE_IP_IDX[@]}"
@@ -242,6 +309,7 @@ network_ip_route_tab_dump()
echo echo
echo "NETWORK_IP_ROUTE_TAB:" echo "NETWORK_IP_ROUTE_TAB:"
for key in "${!NETWORK_IP_ROUTE_TAB[@]}" for key in "${!NETWORK_IP_ROUTE_TAB[@]}"
@@ -263,6 +331,7 @@ network_ip_route_tab_dump()
network_dst_tab_load() network_dst_tab_load()
{ {
ndtl_id=0 ndtl_id=0
vpn_id=0
log_trace "Network" "Loading Dst tab..." log_trace "Network" "Loading Dst tab..."
@@ -290,44 +359,65 @@ network_dst_tab_load()
var_assign NETWORK_TABLE_LIST "${ndtl_table}" INC var_assign NETWORK_TABLE_LIST "${ndtl_table}" INC
tab_assign NETWORK_DST_TAB "${ndtl_id},Status" "$( ip link show dev ${ndtl_device} 2>/dev/null | grep -q ",UP," && echo 1 || echo 0)"
ndtl_host_name="vpn${ndtl_id}.${NETWORK_DST_NAME}" ndtl_status="$( ip link show dev ${ndtl_device} 2>/dev/null | grep -q ",UP," && echo "1" || echo "0")"
if [[ "${ndtl_type}" == "5" ]]
then
ndtl_host_name=""
dns_value=""
else
ndtl_host_name="vpn${vpn_id}.${NETWORK_DST_NAME}"
dns_lookup "A" "${ndtl_host_name}" "NOCACHE"
vpn_id=$((${vpn_id} + 1))
fi
tab_assign NETWORK_DST_TAB "${ndtl_id},Host_Name" "${ndtl_host_name}" tab_assign NETWORK_DST_TAB "${ndtl_id},Host_Name" "${ndtl_host_name}"
dns_lookup "A" "${ndtl_host_name}" "NOCACHE"
tab_assign NETWORK_DST_TAB "${ndtl_id},IP" "${dns_value}" tab_assign NETWORK_DST_TAB "${ndtl_id},IP" "${dns_value}"
case "${ndtl_type}" case "${ndtl_type}"
in in
"0") "0")
set $(ip -s link show ${ndtl_device} 2>/dev/null ) &>/dev/null ndtl_bytes_received="$( cat /sys/class/net/${ndtl_device}/statistics/rx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)"
ndtl_bytes_sent="$( cat /sys/class/net/${ndtl_device}/statistics/tx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)"
ndtl_bytes_received="$( echo ${27} | numfmt --to=iec-i --suffix=B)"
ndtl_bytes_sent="$( echo ${40} | numfmt --to=iec-i --suffix=B)"
ndtl_uptime=""
;; ;;
"1") "1"|"2")
set $( echo "${NETWORK_OPENVPN_STATUS}" | grep ${ndtl_device}) &>/dev/null network_common_openvpn_stats_get "${ndtl_device}" ""
# i=1; while [[ $i -lt 50 ]]; do eval "val=\${$i}"; echo "($i):[${val}]" 1>&2; i=$(( $i + 1)); done if [[ ( "${ndtl_type}" == "1") && ( "${ndtl_status}" == "1") && ( "${ovpn_stat_client_name}" == "") ]]
ndtl_bytes_received="$( echo ${18/bytes,} | numfmt --to=iec-i --suffix=B)"
ndtl_bytes_sent="$( echo ${22/bytes,} | numfmt --to=iec-i --suffix=B)"
ndtl_start_date="$( grep "ext-client-${ndtl_device}.conf" /var/log/rx3-vpn.status 2>/dev/null | sed -e "s/.*Date: \[//" -e "s/\].*//")"
if [[ "${ndtl_start_date}" == "" ]]
then then
ndtl_uptime="" ndtl_status="2"
ndtl_bytes_received=""
ndtl_bytes_sent=""
else else
ndtl_uptime=$( echo "$(($(date +%s) - $(date -d "${ndtl_start_date}" +%s)))" | awk '{days = int($1/86400); print days " day" (( days > 1 ) ? "s" : "") strftime(" %H:%M:%S", $1,1)}') ndtl_bytes_received="$( echo ${ovpn_stat_bytes_received} | numfmt --to=iec-i --suffix=B)"
ndtl_bytes_sent="$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B)"
fi fi
;; ;;
esac esac
tab_assign NETWORK_DST_TAB "${ndtl_id},Status" "${ndtl_status}"
if [[ "${ndtl_status}" == "1" ]]
then
ndtl_start_date="$( stat -c %Z /sys/class/net/${ndtl_device})"
ndtl_uptime="$( echo $(( $(date +%s) - ${ndtl_start_date})) | awk '{days = int($1/86400); print days " day" (( days > 1 ) ? "s" : "") strftime(" %H:%M:%S", $1,1)}')"
else
ndtl_start_date=""
ndtl_uptime=""
fi
tab_assign NETWORK_DST_TAB "${ndtl_id},Bytes_Received" "${ndtl_bytes_received}" tab_assign NETWORK_DST_TAB "${ndtl_id},Bytes_Received" "${ndtl_bytes_received}"
tab_assign NETWORK_DST_TAB "${ndtl_id},Bytes_Sent" "${ndtl_bytes_sent}" tab_assign NETWORK_DST_TAB "${ndtl_id},Bytes_Sent" "${ndtl_bytes_sent}"
tab_assign NETWORK_DST_TAB "${ndtl_id},Start_Date" "${ndtl_start_date}"
tab_assign NETWORK_DST_TAB "${ndtl_id},Uptime" "${ndtl_uptime}" tab_assign NETWORK_DST_TAB "${ndtl_id},Uptime" "${ndtl_uptime}"
tab_assign NETWORK_DST_NAME_IDX "${ndtl_name}" "${ndtl_id}" tab_assign NETWORK_DST_NAME_IDX "${ndtl_name}" "${ndtl_id}"
@@ -375,9 +465,20 @@ network_dst_tab_get()
network_dst_tab_dump() network_dst_tab_dump()
{ {
echo "NETWORK_DST_TYPE:"
for key in "${!NETWORK_DST_TYPE[@]}"
do
echo "[${key}]: [${NETWORK_DST_TYPE[${key}]}]"
done | sort -n
echo
echo "NETWORK_DST_ID_LIST: [${NETWORK_DST_ID_LIST}]" echo "NETWORK_DST_ID_LIST: [${NETWORK_DST_ID_LIST}]"
echo echo
echo "NETWORK_DST_NAME_IDX:" echo "NETWORK_DST_NAME_IDX:"
for key in "${!NETWORK_DST_NAME_IDX[@]}" for key in "${!NETWORK_DST_NAME_IDX[@]}"
@@ -387,6 +488,7 @@ network_dst_tab_dump()
echo echo
echo "NETWORK_DST_DEV_IDX:" echo "NETWORK_DST_DEV_IDX:"
for key in "${!NETWORK_DST_DEV_IDX[@]}" for key in "${!NETWORK_DST_DEV_IDX[@]}"
@@ -396,6 +498,7 @@ network_dst_tab_dump()
echo echo
echo "NETWORK_DST_TAB:" echo "NETWORK_DST_TAB:"
for key in "${!NETWORK_DST_TAB[@]}" for key in "${!NETWORK_DST_TAB[@]}"
@@ -440,6 +543,55 @@ network_dst_tab_dev_lookup()
#--------------------------------------------------------------------------------------------------------------------------
# network_dst_ip_update
#--------------------------------------------------------------------------------------------------------------------------
network_dst_ip_update()
{
local dst_ip_new="$1"
if [[ "${dst_ip}" != "${dst_ip_new}" ]]
then
log_info "Network" "Update ${dst_host_name}: Old: [${dst_ip}] New: [${dst_ip_new}]"
${DEBUG} /usr/local/sbin/ip_host_update "${dst_host_name/.*}" "${dst_host_name#*.}" "${dst_ip_new}" 60
tab_assign NETWORK_DST_TAB "${dst_id},IP" "${dst_ip_new}"
else
log_trace "Network" "Skiping ${dst_host_name}: IP: [${dst_ip}]"
fi
}
#--------------------------------------------------------------------------------------------------------------------------
# network_dst_name_ip_update
#--------------------------------------------------------------------------------------------------------------------------
network_dst_name_ip_update()
{
local dst_name="$1"
local dst_ip_new="$2"
network_dst_tab_name_lookup "${job_name}"
if [[ "${dst_id}" != "" ]]
then
network_dst_tab_get "${dst_id}"
network_dst_ip_update "${dst_ip_new}"
else
log_error "Network: dst name not found: [${dst_name}]"
fi
}
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
# network_src_tab_load # network_src_tab_load
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
@@ -490,13 +642,24 @@ network_src_tab_load()
device_num="$(( ( ${ip_num} - ${ip_base}) / 4))" device_num="$(( ( ${ip_num} - ${ip_base}) / 4))"
nstl_device="${NETWORK_SRC_LOCAL_DEVICE}-${device_num}" nstl_device="${NETWORK_SRC_LOCAL_DEVICE}-${device_num}"
;;& nstl_status="$( ip link show dev ${nstl_device} 2>/dev/null | grep -q ",UP," && echo "1" || echo "0")"
if [[ "${nstl_status}" == 1 ]]
then
nstl_bytes_received="$( cat /sys/class/net/${nstl_device}/statistics/rx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)"
nstl_bytes_sent="$( cat /sys/class/net/${nstl_device}/statistics/tx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)"
nstl_start_date="$( stat -c %Z /sys/class/net/${nstl_device})"
nstl_uptime="$( echo $(( $(date +%s) - ${nstl_start_date})) | awk '{days = int($1/86400); print days " day" (( days > 1 ) ? "s" : "") strftime(" %H:%M:%S", $1,1)}')"
else
nstl_bytes_received=""
nstl_bytes_sent=""
nstl_uptime=""
nstl_last_seen=""
fi
;;
"1") # Routed "1") # Routed
nstl_device="" nstl_device=""
;;&
"0"|"1") # Local + Routed
nstl_status="2" nstl_status="2"
nstl_bytes_received="" nstl_bytes_received=""
@@ -506,28 +669,23 @@ network_src_tab_load()
;; ;;
"2") # OpenVPN "2") # OpenVPN
nstl_device="tun0" network_common_openvpn_stats_get "" "${nstl_host_name}"
nstl_status_line="$( echo "${NETWORK_OPENVPN_STATUS}" | grep "${nstl_device}.log: CLIENT_LIST.*${nstl_ip},")"
if [[ "${nstl_status_line}" == "" ]] if [[ "${ovpn_stat_device}" == "" ]]
then then
nstl_device=""
nstl_status="0" nstl_status="0"
nstl_bytes_received="" nstl_bytes_received=""
nstl_bytes_sent="" nstl_bytes_sent=""
nstl_start_date="" nstl_start_date=""
nstl_uptime="" nstl_uptime=""
nstl_last_seen="$( stat -c "%x" /etc/openvpn/status/${nstl_host_name}.status 2>/dev/null | sed -e 's/\..*//')" nstl_last_seen="$( stat -c "%x" /etc/openvpn/status/${nstl_host_name}.status 2>/dev/null | sed -e 's/\..*//')"
else else
nstl_device="${ovpn_stat_device}"
nstl_status="1" nstl_status="1"
nstl_bytes_received=$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B)
IFS=, nstl_bytes_sent=$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B)
set ${nstl_status_line} &>/dev/null nstl_start_date=${ovpn_stat_connected_date}
unset IFS
nstl_bytes_received=$( echo ${6} | numfmt --to=iec-i --suffix=B)
nstl_bytes_sent=$( echo ${7} | numfmt --to=iec-i --suffix=B)
nstl_start_date=${8}
nstl_uptime=$( echo "$(($(date +%s) - $(date -d "${nstl_start_date}" +%s)))" | awk '{days = int($1/86400); print days " day" (( days > 1 ) ? "s" : "") strftime(" %H:%M:%S", $1,1)}') nstl_uptime=$( echo "$(($(date +%s) - $(date -d "${nstl_start_date}" +%s)))" | awk '{days = int($1/86400); print days " day" (( days > 1 ) ? "s" : "") strftime(" %H:%M:%S", $1,1)}')
nstl_last_seen="$(stat -c "%x" /etc/openvpn/status/${nstl_host_name}.status 2>/dev/null | sed -e 's/\..*//')" nstl_last_seen="$(stat -c "%x" /etc/openvpn/status/${nstl_host_name}.status 2>/dev/null | sed -e 's/\..*//')"
fi fi
@@ -614,6 +772,16 @@ network_src_tab_get()
network_src_tab_dump() network_src_tab_dump()
{ {
echo "NETWORK_SRC_TYPE:"
for key in "${!NETWORK_SRC_TYPE[@]}"
do
echo "[${key}]: [${NETWORK_SRC_TYPE[${key}]}]"
done | sort -n
echo
echo "NETWORK_SRC_ID_LIST: [${NETWORK_SRC_ID_LIST}]" echo "NETWORK_SRC_ID_LIST: [${NETWORK_SRC_ID_LIST}]"
echo echo
@@ -706,7 +874,7 @@ network_route_dst_init()
local dst_id="$1" local dst_id="$1"
network_dst_tab_get ${dst_id} network_dst_tab_get "${dst_id}"
if [[ ${dst_type} == "0" ]] if [[ ${dst_type} == "0" ]]
then then
@@ -726,7 +894,21 @@ network_route_dst_init()
fi fi
target_device=${dst_device} # network_route_rx3_init ${dst_device}
}
#--------------------------------------------------------------------------------------------------------------------------
# network_route_rx3_init
#--------------------------------------------------------------------------------------------------------------------------
network_route_rx3_init()
{
local target_device="$1"
log_trace "Network" "Add [${target_device}] Rx3 routes in VPN tables" log_trace "Network" "Add [${target_device}] Rx3 routes in VPN tables"
@@ -740,7 +922,7 @@ network_route_dst_init()
if [[ "${ip_route_device}" == "${target_device}" ]] if [[ "${ip_route_device}" == "${target_device}" ]]
then then
${DEBUG} ip route add ${ip_route_ip}/${ip_route_mask} table ${dst_table} dev ${ip_route_device} ${DEBUG} ip route add ${ip_route_ip}/${ip_route_mask} dev ${ip_route_device} table ${dst_table}
fi fi
done done
done done
@@ -779,6 +961,111 @@ network_route_other_init()
#--------------------------------------------------------------------------------------------------------------------------
# network_device_init
#--------------------------------------------------------------------------------------------------------------------------
network_device_init()
{
local dst_id="$1"
local device_name="$2"
log_trace "Network" "Init dst_id: [${dst_id}] device_name: [${device_name}]"
if [[ "${dst_id}" == "" ]]
then
network_dst_tab_dev_lookup "${device_name}"
fi
if [[ "${dst_id}" != "" ]]
then
network_route_dst_init "${dst_id}"
device_name="${dst_device}"
fi
network_route_rx3_init "${device_name}"
}
#--------------------------------------------------------------------------------------------------------------------------
# network_device_deinit
#--------------------------------------------------------------------------------------------------------------------------
network_device_deinit()
{
local dst_id="$1"
local device_name="$2"
log_trace "Network" "DeInit dst_id: [${dst_id}] device_name: [${device_name}]"
if [[ "${dst_id}" == "" ]]
then
network_dst_tab_dev_lookup "${device_name}"
fi
if [[ "${dst_id}" != "" ]]
then
network_dst_tab_get "${dst_id}"
network_dst_ip_update "0.0.0.0"
fi
}
#--------------------------------------------------------------------------------------------------------------------------
# network_dst_init
#--------------------------------------------------------------------------------------------------------------------------
#
#network_device_name_init()
#{
# local dst_id="$1"
#
#
# if [[ "${dst_id}" != "" ]]
# then
# network_dst_tab_get "${dst_id}"
#
# network_route_dst_init "${dst_id}"
#
# network_route_rx3_init "${dst_device}"
#
# fi
#
# network_route_rx3_init "${target_device}"
#}
#--------------------------------------------------------------------------------------------------------------------------
# network_device_name_init
#--------------------------------------------------------------------------------------------------------------------------
#
#network_device_name_init()
#{
# local target_device="$1"
#
#
# network_dst_tab_dev_lookup ${target_device}
#
# if [[ "${dst_id}" != "" ]]
# then
# network_route_dst_init "${dst_id}"
# fi
#
# network_route_rx3_init "${target_device}"
#}
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
# network_route_init # network_route_init
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
@@ -787,9 +1074,15 @@ network_route_init()
{ {
for dst_id in ${NETWORK_DST_ID_LIST} for dst_id in ${NETWORK_DST_ID_LIST}
do do
network_route_dst_init ${dst_id} network_device_init "${dst_id}" ""
network_route_other_init ${dst_id} network_route_other_init "${dst_id}"
done done
# for dst_id in ${NETWORK_DST_ID_LIST}
# do
# network_route_dst_init ${dst_id}
# network_route_other_init ${dst_id}
# done
} }
@@ -866,6 +1159,23 @@ network_table_set()
#--------------------------------------------------------------------------------------------------------------------------
# network_dst_address_init_all
#--------------------------------------------------------------------------------------------------------------------------
network_dst_address_init_all()
{
for dst_id in ${NETWORK_DST_ID_LIST}
do
network_dst_tab_get "${dst_id}"
network_dst_ip_update "0.0.0.0"
done
}
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
# network_dst_address_refresh # network_dst_address_refresh
#-------------------------------------------------------------------------------------------------------------------------- #--------------------------------------------------------------------------------------------------------------------------
@@ -873,29 +1183,36 @@ network_table_set()
network_dst_address_refresh() network_dst_address_refresh()
{ {
local dst_id="$1" local dst_id="$1"
local dst_host_name="$2"
local dst_ip_old="$3"
local dst_ip_new local dst_ip_new
local proxy_host="proxy${dst_id}.${NETWORK_DST_PROXY_NAME}" local proxy_host
local proxy_port=8080 local proxy_port=8080
dst_ip_new=$( nc -w ${NETWORK_NC_TIMEOUT} ${proxy_host} ${proxy_port}) network_dst_tab_get "${dst_id}"
if is_valid_ip ${dst_ip_new} if [[ ( "${dst_host_name}" != "" )]]
then then
if [[ "${dst_ip_old}" != "${dst_ip_new}" ]] if [[ ${dst_host_name} =~ ([0-9]+) ]]
then then
log_info "Network" "Update ${dst_host_name}: Old: [${dst_ip_old}] New: [${dst_ip_new}]" proxy_host="proxy${BASH_REMATCH[1]}.${NETWORK_DST_PROXY_NAME}"
${DEBUG} /usr/local/sbin/ip_host_update "${dst_host_name/.*}" "${dst_host_name#*.}" "${dst_ip_new}" 60
tab_assign NETWORK_DST_TAB "${dst_id},IP" "${dst_ip_new}" if [[ ( "${dst_ip}" != "0.0.0.0") && ( "${dst_status}" != 1)]]
then
dst_ip_new="0.0.0.0"
else else
log_trace "Network" "Skiping ${dst_host_name}: IP: [${dst_ip_old}]" dst_ip_new="$( nc -w ${NETWORK_NC_TIMEOUT} ${proxy_host} ${proxy_port} 2>/dev/null)"
fi
if is_valid_ip "${dst_ip_new}"
then
network_dst_ip_update "${dst_ip_new}"
else
log_info "Network" "Skiping: [${dst_host_name}]: Invalid IP: [${dst_ip_new}]"
fi fi
else else
log_info "Network" "Skiping ${dst_host_name}: Invalid IP: [${dst_ip_new}] Old IP: [${dst_ip_old}]" log_info "Network" "Skiping: dst_id: [${dst_id}]: Invalid host_name: [${dst_host_name}]"
fi
fi fi
} }
@@ -911,8 +1228,7 @@ network_dst_address_refresh_all()
{ {
for dst_id in ${NETWORK_DST_ID_LIST} for dst_id in ${NETWORK_DST_ID_LIST}
do do
network_dst_tab_get ${dst_id} network_dst_address_refresh "${dst_id}"
network_dst_address_refresh ${dst_id} ${dst_host_name} ${dst_ip}
done done
} }
@@ -1254,6 +1570,8 @@ network_start()
network_forward_start network_forward_start
network_dst_address_init_all
log_info "Network" "Network started!" log_info "Network" "Network started!"
} }

View File

@@ -200,7 +200,7 @@ vpn_job_tab_init()
do do
network_dst_tab_get ${dst_id} network_dst_tab_get ${dst_id}
if [[ "${dst_type}" == "1" ]] && [[ "${dst_config}" != "" ]] if [[ "${dst_type}" == "2" ]] && [[ "${dst_config}" != "" ]]
then then
config_file="${VPN_CONFIG_FILE/DEVICE/${dst_device}}" config_file="${VPN_CONFIG_FILE/DEVICE/${dst_device}}"
@@ -208,7 +208,7 @@ vpn_job_tab_init()
tab_assign VPN_JOB_TAB "${job_id},Name" "${dst_name}" tab_assign VPN_JOB_TAB "${job_id},Name" "${dst_name}"
tab_assign VPN_JOB_TAB "${job_id},PId" "0" tab_assign VPN_JOB_TAB "${job_id},PId" "0"
tab_assign VPN_JOB_TAB "${job_id},Cmd" "/usr/sbin/openvpn --config ${config_file} --dev ${dst_device} --daemon" tab_assign VPN_JOB_TAB "${job_id},Cmd" "/usr/sbin/openvpn --config ${config_file} --daemon"
tab_assign VPN_JOB_TAB "${job_id},Date" "" tab_assign VPN_JOB_TAB "${job_id},Date" ""
tab_assign VPN_JOB_NAME_IDX "${dst_name}" "${job_id}" tab_assign VPN_JOB_NAME_IDX "${dst_name}" "${job_id}"
@@ -315,6 +315,7 @@ vpn_supervisor()
do do
vpn_job_tab_get "${job_id}" vpn_job_tab_get "${job_id}"
${DEBUG} kill -0 "${job_pid}" 2>/dev/null ${DEBUG} kill -0 "${job_pid}" 2>/dev/null
rc=$? rc=$?
@@ -335,6 +336,8 @@ vpn_supervisor()
tab_assign VPN_JOB_TAB "${job_id},Date" "$(date --rfc-3339=seconds -u)" tab_assign VPN_JOB_TAB "${job_id},Date" "$(date --rfc-3339=seconds -u)"
log_info "VPN" "PId: [${VPN_JOB_TAB["${job_id},PId"]}]!" log_info "VPN" "PId: [${VPN_JOB_TAB["${job_id},PId"]}]!"
network_dst_name_ip_update "${job_name}" "0.0.0.0"
fi fi
done done

View File

@@ -0,0 +1,42 @@
#!/bin/bash
#DEBUG=""
#DEBUG="echo"
#DEBUG=":"
#LOG=":"
#LOG="echo"
#LOG=""
# Includes
#-----------------------------------------------------------------------------------------------------------------------------------
. /usr/local/lib/network.bash
# Global Variables
#-----------------------------------------------------------------------------------------------------------------------------------
#LOG_FILE=/var/log/openvpn/up-down.log
# Main
#-----------------------------------------------------------------------------------------------------------------------------------
network_init
line="[${dev}]: Local_Int_Address: [${ifconfig_local}] Remote_Int_Address: [${ifconfig_pool_remote_ip}] Remote_Ext_Addres: [${untrusted_ip}] Common_Name: [${common_name}] Duration: [${time_duration}]"
log_info "VPN-Client-Down" "$line" " Status: [OK]"
touch /etc/openvpn/status/${common_name}.status
log_trace "VPN-Client-Down" "[${dev}]: Done!"

View File

@@ -0,0 +1,45 @@
#!/bin/bash
#DEBUG=""
#DEBUG="echo"
#DEBUG=":"
#LOG=":"
#LOG="echo"
#LOG=""
# Includes
#-----------------------------------------------------------------------------------------------------------------------------------
. /usr/local/lib/network.bash
# Global Variables
#-----------------------------------------------------------------------------------------------------------------------------------
#LOG_FILE=/var/log/openvpn/up-down.log
# Main
#-----------------------------------------------------------------------------------------------------------------------------------
Output_Param_File="$1"
network_init
line="[${dev}]: Local_Int_Address: [${ifconfig_local}] Remote_Int_Address: [${ifconfig_pool_remote_ip}] Remote_Ext_Addres: [${untrusted_ip}] Common_Name: [${common_name}] Output_Param_File: [${Output_Param_File}]"
log_info "VPN-Client-Up" "$line" " Status: [OK]"
touch /etc/openvpn/status/${common_name}.status
log_trace "VPN-Client-Up" "[${dev}]: Done!"

View File

@@ -39,23 +39,8 @@ Phase="$6"
network_init network_init
network_dst_tab_dev_lookup "${Dev}" log_info "VPN-Down" "[${Dev}]: Local_MTU: [${Local_MTU}] Remote_MTU: [${Remote_MTU}] Local_Address: [${Local_Address}] Local_Netmask: [${Local_Netmask}] Dst_Table: [${dst_table}] Phase: [${Phase}] Status: [OK]"
network_dst_tab_get "${dst_id}"
network_device_deinit "" "${Dev}"
line="[${Dev}]: Local_MTU: [${Local_MTU}] Remote_MTU: [${Remote_MTU}] Local_Address: [${Local_Address}] Local_Netmask: [${Local_Netmask}] Dst_Table: ${dst_table} Phase: ${Phase}"
if [[ "${dst_table}" != "" ]]
then
log_info "VPN-Down" "$line" " Status: [OK]"
remote_address=0.0.0.0
log_trace "VPN-Down" "[${Dev}]: set ${remote_address} to vpn${id}.vpn.rx3"
${DEBUG} ip_host_update vpn${id} vpn.rx3 ${remote_address} 60
else
log_error "VPN-Down" "$line" " Status: [ERROR]!"
fi
log_trace "VPN-Down" "[${Dev}]: Done!" log_trace "VPN-Down" "[${Dev}]: Done!"

View File

@@ -40,20 +40,9 @@ Phase="$6"
network_init network_init
network_dst_tab_dev_lookup "${Dev}"
network_dst_tab_get "${dst_id}"
log_info "VPN-Up" "[${Dev}]: Local_MTU: [${Local_MTU}] Remote_MTU: [${Remote_MTU}] Local_Address: [${Local_Address}] Local_Netmask: [${Local_Netmask}] Phase: [${Phase}] Status: [OK]"
line="[${Dev}]: Local_MTU: [${Local_MTU}] Remote_MTU: [${Remote_MTU}] Local_Address: [${Local_Address}] Local_Netmask: [${Local_Netmask}] Dst_Table: [${dst_table}] Dst_Id: [${dst_id}] Phase: [${Phase}]" network_device_init "" "${Dev}"
if [[ "${dst_table}" != "" ]]
then
log_info "VPN-Up" "$line" " Status: [OK]"
log_trace "VPN-Up" "[${Dev}]: ip route add table: [${dst_table}] default dev: [${Dev}]"
network_route_dst_init ${dst_id}
else
log_error "VPN-Up" "$line" " Status: [ERROR]!"
fi
log_trace "VPN-Up" "[${Dev}]: Done!" log_trace "VPN-Up" "[${Dev}]: Done!"

View File

@@ -109,10 +109,10 @@ Destination_Status_Board()
echo " <H2>Destination Status Board</H2>" echo " <H2>Destination Status Board</H2>"
echo "" echo ""
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">" echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
echo " <TR class=\"header\"><TD class=\"header\">#</TD><TD>Name</TD><TD>Type</TD><TD>Device</TD><TD>IP</TD><TD>Host Name</TD><TD>Config</TD><TD>Table</TD><TD>Status</TD><TD>Bytes In</TD><TD>Bytes Out</TD><TD>UpTime</TD></TR>" echo " <TR class=\"header\"><TD class=\"header\">#</TD><TD>Name</TD><TD>Type</TD><TD>Device</TD><TD>Status</TD><TD>IP</TD><TD>Host Name</TD><TD>Config</TD><TD>Table</TD><TD>Bytes In</TD><TD>Bytes Out</TD><TD>UpTime</TD></TR>"
else else
echo "TABLE: Destination_Status_Board" echo "TABLE: Destination_Status_Board"
echo "#;Name;Type;Device;IP;Host Name;Config;Table;Status;Bytes In;Bytes Out;UpTime" echo "#;Name;Type;Device;Status;IP;Host Name;Config;Table;Bytes In;Bytes Out;UpTime"
fi fi
@@ -127,18 +127,31 @@ Destination_Status_Board()
if [[ "${format}" == "html" ]] if [[ "${format}" == "html" ]]
then then
echo -n "<TR><TD class="header">${dst_id}</TD><TD>${dst_name}</TD><TD>${NETWORK_DST_TYPE[${dst_type}]}</TD><TD>${dst_device}</TD><TD>${dst_ip}</TD><TD>${dst_host_name}</TD><TD>${dst_config:--}</TD><TD>${dst_table}</TD><TD>" echo -n "<TR><TD class="header">${dst_id}</TD><TD>${dst_name}</TD><TD>${NETWORK_DST_TYPE[${dst_type}]}</TD><TD>${dst_device}</TD>"
if [[ "${dst_status}" == 1 ]] case "${dst_status}"
then in
echo -n "<IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></TD>" "0")
else echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></TD>"
echo -n "<IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></TD>" ;;
fi
echo "<TD>${dst_bytes_received:--}</TD><TD>${dst_bytes_sent:--}</TD><TD>${dst_uptime:--}</TD>" "1")
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></TD>"
;;
"2")
echo -n "<TD><IMG SRC=\"/icons/user-unready.png\" TITLE=\"Unready\" ALT=\"Unready\"></TD>"
;;
*)
echo -n "<TD><IMG SRC=\"\" TITLE=\"Unknown\" ALT=\"Unknown\"></TD>"
;;
esac
echo "<TD>${dst_ip:--}</TD><TD>${dst_host_name:--}</TD><TD>${dst_config:--}</TD><TD>${dst_table}</TD><TD>${dst_bytes_received:--}</TD><TD>${dst_bytes_sent:--}</TD><TD>${dst_uptime:--}</TD>"
else else
echo "${dst_id};${dst_name};${NETWORK_DST_TYPE[${dst_type}]};${dst_device};${dst_ip};${dst_host_name};${dst_config};${dst_table};${dst_status};${dst_bytes_received};${dst_bytes_sent};${dst_uptime}" echo "${dst_id};${dst_name};${NETWORK_DST_TYPE[${dst_type}]};${dst_device};${dst_status};${dst_ip};${dst_host_name};${dst_config};${dst_table};${dst_bytes_received};${dst_bytes_sent};${dst_uptime}"
fi fi
done done
@@ -219,6 +232,8 @@ Source_Routing_Board_Line()
do do
network_dst_tab_get ${dst_id} network_dst_tab_get ${dst_id}
if [[ ( "${admin}" == "true") || ( "${dst_type}" != 1) ]]
then
if [[ "${format}" == "html" ]] if [[ "${format}" == "html" ]]
then then
echo -n "<TD><TABLE class=\"${class}\" BORDER=\"0\" WIDTH=\"100%\"><TR><TD class=\"half\">" echo -n "<TD><TABLE class=\"${class}\" BORDER=\"0\" WIDTH=\"100%\"><TR><TD class=\"half\">"
@@ -247,6 +262,7 @@ Source_Routing_Board_Line()
echo -n "0;" echo -n "0;"
fi fi
fi fi
fi
done done
if [[ "${format}" == "html" ]] if [[ "${format}" == "html" ]]
@@ -294,12 +310,15 @@ Source_Routing_Board()
do do
network_dst_tab_get ${dst_id} network_dst_tab_get ${dst_id}
if [[ ( "${admin}" == "true") || ( "${dst_type}" != 1) ]]
then
if [[ "${format}" == "html" ]] if [[ "${format}" == "html" ]]
then then
echo -n "<TD>${dst_name}</TD>" echo -n "<TD>${dst_name}</TD>"
else else
echo -n "${dst_name};" echo -n "${dst_name};"
fi fi
fi
done done
@@ -684,9 +703,11 @@ else
network_src_tab_ip_lookup "${ip}" network_src_tab_ip_lookup "${ip}"
network_src_tab_get "${src_id}" network_src_tab_get "${src_id}"
if [[ ( ${admin} == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]] network_dst_tab_get "${vpn}"
if [[ ( ${admin} == "true") || ( ( "${REMOTE_USER}" == "${src_owner}") && ( "${dst_type}" != 1)) ]]
then then
sudo /usr/local/sbin/rx3_net_adm table_set ${ip} $((${vpn} + 3)) 1>&2 sudo /usr/local/sbin/rx3_net_adm table_set ${ip} ${dst_table} 1>&2
if [[ "$?" == 0 ]] if [[ "$?" == 0 ]]
then then
@@ -695,7 +716,7 @@ else
cmd_status="route_set: KO" cmd_status="route_set: KO"
fi fi
else else
cmd_status="route_set: NOT_AUTHORIZED [${REMOTE_USER}]/[${src_owner}]" cmd_status="route_set: NOT_AUTHORIZED [${REMOTE_USER}]/[${src_owner}]/[${dst_type}]"
fi fi
redirect="?admin=${admin}&amp;filter=${filter}" redirect="?admin=${admin}&amp;filter=${filter}"