Compare commits
6 Commits
6d2fd44dba
...
network_to
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a6379614d | |||
| bcf1c09fa0 | |||
| 4ed3d26dad | |||
| ad3862a5e0 | |||
| f58ffedef9 | |||
| 360db73a09 |
@@ -1,11 +1,16 @@
|
|||||||
------------------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
Network Tools V 1.2.0 - A. GIBERT - 2026/04/xx
|
Network Tools V 1.2.0 - A. GIBERT - 2026/05/19
|
||||||
------------------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
- Split repository to remove the Rx3 configuration part and push it to rx3-config repo,
|
||||||
|
- Switch this repository to public,
|
||||||
- Migrate Network Tools to the new Rx3 Base Bash library,
|
- Migrate Network Tools to the new Rx3 Base Bash library,
|
||||||
|
- Add ip library,
|
||||||
|
- Move usr/lib, usr/sbin & var/www to lib, sbin & www,
|
||||||
|
- Add dns_host_update() to dns library,
|
||||||
- Add RPM Spec & bash completion files,
|
- Add RPM Spec & bash completion files,
|
||||||
- Move install dir form /usr/locla to usr,
|
- Move install dir form /usr/local to usr,
|
||||||
- Support now rx3-base 1.1.1.
|
- Support now rx3-base 1.1.2.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
217
SPECS/network_tools.spec
Normal file
217
SPECS/network_tools.spec
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Network Tools
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%define name network_tools
|
||||||
|
%define version 1.2.0
|
||||||
|
%define release %mkrel 1rx3
|
||||||
|
|
||||||
|
%global debug_package %{nil}
|
||||||
|
|
||||||
|
%global _webdir %{_localstatedir}/www
|
||||||
|
%global _webcgi %{_webdir}/cgi-bin
|
||||||
|
%global _webhtml %{_webdir}/html
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Package
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
Name: %{name}
|
||||||
|
Version: %{version}
|
||||||
|
Release: %{release}
|
||||||
|
|
||||||
|
Summary: Rx3 Network Tools
|
||||||
|
|
||||||
|
License: GPL
|
||||||
|
URL: https://git.rx3.org/gitea/rx3/%{name}
|
||||||
|
Group: System
|
||||||
|
|
||||||
|
Distribution: Rx3 Free Software
|
||||||
|
Vendor: Rx3
|
||||||
|
Packager: Arnaud G. GIBERT <arnaud@rx3.net>
|
||||||
|
|
||||||
|
BuildArch: noarch
|
||||||
|
|
||||||
|
Requires: %{name}-libs
|
||||||
|
|
||||||
|
Source0: https://git.rx3.org/gitea/rx3/%{name}/archive/%{name}-%{version}.tar.gz
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%description
|
||||||
|
These tools aims to manage network operation on Rx3 systems. This include:
|
||||||
|
- Boot time network setup,
|
||||||
|
- Comand line management tools,
|
||||||
|
- Web interface tools.
|
||||||
|
|
||||||
|
The following topics are tageted:
|
||||||
|
- Virtual network interface,
|
||||||
|
- VPN,
|
||||||
|
- Proxy,
|
||||||
|
- Port forwarding,
|
||||||
|
- Dynamic DNS.
|
||||||
|
|
||||||
|
This release support IPTables and OpenVPN.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%package libs
|
||||||
|
Summary: Rx3 Network Tools Libraries
|
||||||
|
Requires: rx3-base-libs
|
||||||
|
Requires: bind-utils
|
||||||
|
|
||||||
|
|
||||||
|
%description libs
|
||||||
|
These tools aims to manage network operation on Rx3 systems.
|
||||||
|
This is the bash libraires.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Prep
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -n %{name}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Build
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%build
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Install
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%install
|
||||||
|
|
||||||
|
# Config
|
||||||
|
%{__mkdir_p} %{buildroot}%{_sysconfdir}/sysconfig
|
||||||
|
cp etc/sysconfig/* %{buildroot}%{_sysconfdir}/sysconfig
|
||||||
|
%{__mkdir_p} %{buildroot}%{_sysconfdir}/sudoers.d
|
||||||
|
cp etc/sudoers.d/* %{buildroot}%{_sysconfdir}/sudoers.d
|
||||||
|
|
||||||
|
# SystemD
|
||||||
|
%{__mkdir_p} %{buildroot}%{_unitdir}
|
||||||
|
cp lib/systemd/system/* %{buildroot}%{_unitdir}
|
||||||
|
|
||||||
|
# Bash completion
|
||||||
|
%{__mkdir_p} %{buildroot}%{_sysconfdir}/bash_completion.d
|
||||||
|
cp etc/bash_completion.d/* %{buildroot}%{_sysconfdir}/bash_completion.d
|
||||||
|
|
||||||
|
# Lib
|
||||||
|
%{__mkdir_p} %{buildroot}%{_prefix}/lib/rx3
|
||||||
|
cp lib/rx3/*.bash %{buildroot}%{_prefix}/lib/rx3
|
||||||
|
|
||||||
|
# Bin
|
||||||
|
%{__mkdir_p} %{buildroot}%{_sbindir}
|
||||||
|
cp sbin/* %{buildroot}%{_sbindir}
|
||||||
|
|
||||||
|
# WWW
|
||||||
|
%{__mkdir_p} %{buildroot}%{_webcgi}
|
||||||
|
cp www/cgi-bin/*.cgi %{buildroot}%{_webcgi}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Check
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%check
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Post
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%post
|
||||||
|
%_post_service rx3-network
|
||||||
|
%_post_service rx3-vpn
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Preun
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%preun
|
||||||
|
%_preun_service rx3-vpn
|
||||||
|
%_preun_service rx3-network
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Files
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc ReadMe.txt ReleaseNotes.txt ToDo.txt
|
||||||
|
%license COPYING COPYING.LESSER GNU_GPL-3.0.txt GNU_LGPL-3.0.txt GNU_FDL-1.3.txt
|
||||||
|
%config(noreplace) %{_sysconfdir}/sysconfig/*
|
||||||
|
%config(noreplace) %{_sysconfdir}/sudoers.d/*
|
||||||
|
%defattr(644,root,root)
|
||||||
|
%{_sysconfdir}/bash_completion.d/*
|
||||||
|
%{_unitdir}/*.service
|
||||||
|
%defattr(0755,root,root)
|
||||||
|
%{_sbindir}/*
|
||||||
|
%{_webcgi}/*.cgi
|
||||||
|
|
||||||
|
%files libs
|
||||||
|
%doc ReadMe.txt ReleaseNotes.txt ToDo.txt
|
||||||
|
%license COPYING COPYING.LESSER GNU_GPL-3.0.txt GNU_LGPL-3.0.txt GNU_FDL-1.3.txt
|
||||||
|
%defattr(644,root,root)
|
||||||
|
%{_prefix}/lib/rx3/*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# ChangeLog
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Tue May 19 2026 Arnaud G. GIBERT <arnaud@rx3.net> - 1.2.0-1rx3.mga9
|
||||||
|
- Create initial SPEC file for 1.2.0 on Mageia 9
|
||||||
90
etc/bash_completion.d/cert_dump
Normal file
90
etc/bash_completion.d/cert_dump
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 Cert Dump Bash Completion
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Cert Dump Completion
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_cert_dump_completion()
|
||||||
|
{
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
local prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
local opts="-h --help -V --version -v --verbose"
|
||||||
|
|
||||||
|
local pos=0
|
||||||
|
local i
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
# Count non-option positional arguments already provided
|
||||||
|
for (( i=1; i<COMP_CWORD; i++ ))
|
||||||
|
do
|
||||||
|
case "${COMP_WORDS[i]}" in
|
||||||
|
-h|--help|-V|--version|-v|--verbose)
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
pos=$(( pos + 1 ))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Complete options if current word starts with '-'
|
||||||
|
if [[ "${cur}" == -* ]]
|
||||||
|
then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Complete positional arguments
|
||||||
|
case "${pos}" in
|
||||||
|
0)
|
||||||
|
COMPREPLY=( $(compgen -W "ca tc key csr crt" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
case "${prev}" in
|
||||||
|
key|csr|crt)
|
||||||
|
COMPREPLY=( $(compgen -W "$(ls /etc/openvpn/tls/certs/*.crt 2>/dev/null | sed 's|.*/||; s|\.crt$||; s|^ca$||')" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
complete -o filenames -F _cert_dump_completion cert_dump
|
||||||
89
etc/bash_completion.d/ip_host_update
Normal file
89
etc/bash_completion.d/ip_host_update
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 IP Host Update Bash Completion
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# IP Host Update Completion
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_ip_host_update_completion()
|
||||||
|
{
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
local prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
local opts="-h --help -V --version -v --verbose"
|
||||||
|
|
||||||
|
local pos=0
|
||||||
|
local i
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
# Count non-option positional arguments already provided
|
||||||
|
for (( i=1; i<COMP_CWORD; i++ ))
|
||||||
|
do
|
||||||
|
case "${COMP_WORDS[i]}" in
|
||||||
|
-h|--help|-V|--version|-v|--verbose)
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
pos=$(( pos + 1 ))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Complete options if current word starts with '-'
|
||||||
|
if [[ "${cur}" == -* ]]
|
||||||
|
then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Complete positional arguments
|
||||||
|
case "${pos}" in
|
||||||
|
0)
|
||||||
|
COMPREPLY=( $(compgen -W "$(getent hosts | awk '{print $3}' | grep -v '^$')" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
COMPREPLY=( $(compgen -W "$(named-checkconf -p 2>/dev/null | grep -oP 'zone\s+\"\K[^\"]+' | sort -u)" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
COMPREPLY=( $(compgen -W "60 300 600 3600 86400" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
complete -o filenames -F _ip_host_update_completion ip_host_update
|
||||||
80
etc/bash_completion.d/openvpn-status
Normal file
80
etc/bash_completion.d/openvpn-status
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 OpenVPN Status Bash Completion
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# OpenVPN Status Completion
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_openvpn_status_completion()
|
||||||
|
{
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
local prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
local opts="-h --help -V --version -v --verbose"
|
||||||
|
|
||||||
|
local pos=0
|
||||||
|
local i
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
# Count non-option positional arguments already provided
|
||||||
|
for (( i=1; i<COMP_CWORD; i++ ))
|
||||||
|
do
|
||||||
|
case "${COMP_WORDS[i]}" in
|
||||||
|
-h|--help|-V|--version|-v|--verbose)
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
pos=$(( pos + 1 ))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Complete options if current word starts with '-'
|
||||||
|
if [[ "${cur}" == -* ]]
|
||||||
|
then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Complete positional arguments
|
||||||
|
case "${pos}" in
|
||||||
|
0)
|
||||||
|
COMPREPLY=( $(compgen -W "$(ls /var/lib/openvpn/*.status 2>/dev/null | sed 's|.*/||; s|\.status$||')" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
complete -o filenames -F _openvpn_status_completion openvpn-status
|
||||||
93
etc/bash_completion.d/rx3_net_adm
Normal file
93
etc/bash_completion.d/rx3_net_adm
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 Net Adm Bash Completion
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Rx3 Net Adm Completion
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_rx3_net_adm_completion()
|
||||||
|
{
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
local prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
local opts="-h --help -V --version -v --verbose"
|
||||||
|
|
||||||
|
local pos=0
|
||||||
|
local i
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
# Count non-option positional arguments already provided
|
||||||
|
for (( i=1; i<COMP_CWORD; i++ ))
|
||||||
|
do
|
||||||
|
case "${COMP_WORDS[i]}" in
|
||||||
|
-h|--help|-V|--version|-v|--verbose)
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
pos=$(( pos + 1 ))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Complete options if current word starts with '-'
|
||||||
|
if [[ "${cur}" == -* ]]
|
||||||
|
then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Complete positional arguments
|
||||||
|
case "${pos}" in
|
||||||
|
0)
|
||||||
|
COMPREPLY=( $(compgen -W "start stop restart status dump table_set refresh_address" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
case "${prev}" in
|
||||||
|
table_set)
|
||||||
|
COMPREPLY=( $(compgen -W "$(network_dst_tab_dump | grep -oP 'Name.*: \[\K[^\]]+')" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
refresh_address)
|
||||||
|
COMPREPLY=( $(compgen -W "$(network_dst_tab_dump | grep -oP 'Name.*: \[\K[^\]]+')" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
complete -o filenames -F _rx3_net_adm_completion rx3_net_adm
|
||||||
80
etc/bash_completion.d/rx3_vpn_admin
Normal file
80
etc/bash_completion.d/rx3_vpn_admin
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 Vpn Adm Bash Completion
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Rx3 Vpn Adm Completion
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_rx3_vpn_adm_completion()
|
||||||
|
{
|
||||||
|
local cur="${COMP_WORDS[COMP_CWORD]}"
|
||||||
|
local prev="${COMP_WORDS[COMP_CWORD-1]}"
|
||||||
|
local opts="-h --help -V --version -v --verbose"
|
||||||
|
|
||||||
|
local pos=0
|
||||||
|
local i
|
||||||
|
|
||||||
|
COMPREPLY=()
|
||||||
|
|
||||||
|
# Count non-option positional arguments already provided
|
||||||
|
for (( i=1; i<COMP_CWORD; i++ ))
|
||||||
|
do
|
||||||
|
case "${COMP_WORDS[i]}" in
|
||||||
|
-h|--help|-V|--version|-v|--verbose)
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
;;
|
||||||
|
-*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
pos=$(( pos + 1 ))
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Complete options if current word starts with '-'
|
||||||
|
if [[ "${cur}" == -* ]]
|
||||||
|
then
|
||||||
|
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Complete positional arguments
|
||||||
|
case "${pos}" in
|
||||||
|
0)
|
||||||
|
COMPREPLY=( $(compgen -W "start stop restart status dump" -- "${cur}") )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
COMPREPLY=()
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
complete -o filenames -F _rx3_vpn_adm_completion rx3_vpn_adm
|
||||||
2
etc/sudoers.d/rx3-network
Normal file
2
etc/sudoers.d/rx3-network
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Rx3 VPN Admin Board
|
||||||
|
apache ALL= NOPASSWD: /usr/sbin/rx3_net_adm, /usr/sbin/iptables_list, /usr/sbin/cert_dump, /usr/sbin/ns-launch, /usr/sbin/openvpn-status
|
||||||
143
etc/sysconfig/rx3-network
Normal file
143
etc/sysconfig/rx3-network
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Network Config File
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
NETWORK_LOG_FILE="/var/log/network/rx3-network"
|
||||||
|
NETWORK_LOG_LOCK="/var/lock/network/log"
|
||||||
|
|
||||||
|
#NETWORK_LOG_TRACE="DISABLED"
|
||||||
|
#NETWORK_LOG_TRACE="ENABLED"
|
||||||
|
|
||||||
|
ADMIN_USER_LIST="xxx"
|
||||||
|
|
||||||
|
NETWORK_NC_TIMEOUT=10
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# DNS Config
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
DNS_CACHE_FILE="/var/cache/network/dns"
|
||||||
|
DNS_CACHE_LOCK="/var/lock/network/dns"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Network IP Route
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
NETWORK_IP_ROUTE_CONFIG="
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# IP Mask Device
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Not
|
||||||
|
10.0.0.0 24 eth1
|
||||||
|
|
||||||
|
# GW
|
||||||
|
10.0.10.1 32 tun1 # GW1
|
||||||
|
10.0.10.2 32 tun1
|
||||||
|
|
||||||
|
10.0.10.3 32 tun2 # GW2
|
||||||
|
10.0.10.4 32 tun2
|
||||||
|
|
||||||
|
# SUB1
|
||||||
|
10.10.0.0 16 tun1
|
||||||
|
|
||||||
|
# SUB2
|
||||||
|
10.11.0.0 16 tun2
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
172.17.0.0 16 docker0
|
||||||
|
"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Network Dst Config
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
NETWORK_DST_NAME="vpn.rx3"
|
||||||
|
NETWORK_DST_PROXY_NAME="sub0.rx3"
|
||||||
|
|
||||||
|
NETWORK_DST_TYPE=([0]="Local" [1]="Gateway" [2]="OpenVPN")
|
||||||
|
|
||||||
|
NETWORK_DST_CONFIG="
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Name Type Device Config Table
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
NoVPN 0 eth0 - 3
|
||||||
|
|
||||||
|
sub1 1 tun1 - 4
|
||||||
|
sub2 1 tun2 - 5
|
||||||
|
|
||||||
|
VyprVPN-aaa 2 tun10 vyprvpn-aaa 10
|
||||||
|
VyprVPN-bbb 2 tun11 vyprvpn-bbb 11
|
||||||
|
VyprVPN-ccc 2 tun12 vyprvpn-ccc 12
|
||||||
|
"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# Network Src Config
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
NETWORK_SRC_LOCAL_DEVICE="br-vir"
|
||||||
|
NETWORK_SRC_LOCAL_ADDRESS="10.2.0.1"
|
||||||
|
|
||||||
|
NETWORK_SRC_TYPE=([0]="Local" [1]="Routed" [2]="OpenVPN")
|
||||||
|
|
||||||
|
NETWORK_SRC_CONFIG="
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# IP Type Owner Table Port Port
|
||||||
|
# Start Range
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# GW.Rx3 Router
|
||||||
|
10.0.10.1 2 xxx 11 3000 10 # GW1
|
||||||
|
10.0.10.3 2 xxx 11 - 10 # GW2
|
||||||
|
|
||||||
|
# Loc Vir
|
||||||
|
10.2.1.1 0 xxx 11 3100 10
|
||||||
|
10.2.1.5 0 xxx 11 - 10
|
||||||
|
10.2.1.9 0 xxx 11 - 10
|
||||||
|
|
||||||
|
# Sub1
|
||||||
|
10.10.0.1 1 xxx 11 3200 10
|
||||||
|
10.10.0.2 1 xxx 11 - 10
|
||||||
|
10.10.0.3 1 xxx 3 - 10
|
||||||
|
|
||||||
|
# Sub2
|
||||||
|
10.11.0.43 1 xxx 11 3300 10
|
||||||
|
"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
# VPN Config
|
||||||
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
VPN_CONFIG_FILE="/etc/openvpn/ext-client-DEVICE.conf"
|
||||||
|
VPN_TEMPLATE_FILE="/etc/openvpn/template/ext-client-tunx.conf"
|
||||||
|
|
||||||
|
VPN_PID_FILE="/var/lib/network/vpn.pid"
|
||||||
|
VPN_STATUS_FILE="/var/lib/network/vpn.status"
|
||||||
|
VPN_STATUS_LOCK="/var/lock/network/vpn"
|
||||||
|
|
||||||
|
|
||||||
|
# Supervisor main loop sleep delay in second
|
||||||
|
VPN_LOOP_DELAY=30
|
||||||
12
etc/sysconfig/rx3-ns
Normal file
12
etc/sysconfig/rx3-ns
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Domain : Host : Owner
|
||||||
|
NS_LIST=" \
|
||||||
|
vpn.rx3:vpn0:xxx \
|
||||||
|
vpn.rx3:vpn1:xxx \
|
||||||
|
vpn.rx3:vpn2:xxx \
|
||||||
|
vpn.rx3:vpn3:xxx \
|
||||||
|
vpn.rx3:vpn4:xxx \
|
||||||
|
vpn.rx3:vpn5:xxx \
|
||||||
|
vpn.rx3:vpn6:xxx \
|
||||||
|
vpn.rx3:vpn7:xxx \
|
||||||
|
vpn.rx3:vpn8:xxx \
|
||||||
|
vpn.rx3:vpn9:xxx"
|
||||||
@@ -36,7 +36,7 @@ fi
|
|||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
. "${RX3_LIB_DIR}/base.bash"
|
. "${RX3_LIB_DIR}/ip.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -46,14 +46,14 @@ fi
|
|||||||
# Global Variable
|
# Global Variable
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
declare -Ag DNS_A_TAB
|
declare -Ag DNS_A_TAB=()
|
||||||
declare -g DNS_A_ID_LIST
|
declare -g DNS_A_ID_LIST=""
|
||||||
|
|
||||||
declare -Ag DNS_PTR_TAB
|
declare -Ag DNS_PTR_TAB=()
|
||||||
declare -g DNS_PTR_ID_LIST
|
declare -g DNS_PTR_ID_LIST=""
|
||||||
|
|
||||||
declare -g DNS_CACHE_FILE
|
declare -g DNS_CACHE_FILE=""
|
||||||
declare -g DNS_CACHE_LOCK
|
declare -g DNS_CACHE_LOCK=""
|
||||||
#declare -g DNS_CACHE_LOCK="${DNS_CACHE_FILE}"
|
#declare -g DNS_CACHE_LOCK="${DNS_CACHE_FILE}"
|
||||||
|
|
||||||
declare -g DNS_CACHE_UPDATED=0
|
declare -g DNS_CACHE_UPDATED=0
|
||||||
@@ -63,7 +63,7 @@ declare -g DNS_CACHE_UPDATED=0
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_tab_load
|
# Dns Tab Load
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_tab_load()
|
dns_tab_load()
|
||||||
@@ -106,7 +106,7 @@ dns_tab_load()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_tab_save
|
# Dns Tab Save
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_tab_save()
|
dns_tab_save()
|
||||||
@@ -142,7 +142,7 @@ dns_tab_save()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_tab_get
|
# Dns Tab Get
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_tab_get()
|
dns_tab_get()
|
||||||
@@ -184,7 +184,7 @@ dns_tab_get()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_tab_put
|
# Dns Tab Put
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_tab_put()
|
dns_tab_put()
|
||||||
@@ -212,31 +212,31 @@ dns_tab_put()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_lookup
|
# Dns Lookup
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_lookup()
|
dns_lookup()
|
||||||
{
|
{
|
||||||
dl_type="$1"
|
dl_type="$1"
|
||||||
dl_key="$2"
|
dl_key="$2"
|
||||||
dl_flag="$3"
|
dl_flag="${3:-"CACHE"}"
|
||||||
|
|
||||||
|
|
||||||
if [[ "${dl_flag}" != "NOCACHE" ]]
|
if [[ "${dl_flag}" != "NOCACHE" ]]
|
||||||
then
|
then
|
||||||
dns_tab_get ${dl_type} ${dl_key}
|
{ dns_tab_get ${dl_type} ${dl_key}; rc=$?; } || true
|
||||||
else
|
else
|
||||||
false
|
rc=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$?" != "0" ]]
|
if [[ "${rc}" != "0" ]]
|
||||||
then
|
then
|
||||||
log_trace "DNS" "Out of Cache: Type: [${dl_type}] Key: [${dl_key}] Flag: [${dl_flag}]"
|
#log_trace "DNS" "Out of Cache: Type: [${dl_type}] Key: [${dl_key}] Flag: [${dl_flag}]"
|
||||||
|
|
||||||
case ${dl_type}
|
case ${dl_type}
|
||||||
in
|
in
|
||||||
"A")
|
"A")
|
||||||
dns_value="$( dig +short ${dl_key} 2>/dev/null)"
|
dns_value="$( dig +short ${dl_key} 2>/dev/null | ip_ip_filter)"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"PTR")
|
"PTR")
|
||||||
@@ -257,7 +257,7 @@ dns_lookup()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_tab_dump
|
# Dns Tab Dump
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_tab_dump()
|
dns_tab_dump()
|
||||||
@@ -292,13 +292,35 @@ dns_tab_dump()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_init
|
# Dns Host Update
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_init()
|
dns_host_update()
|
||||||
{
|
{
|
||||||
file_dir_init ${DNS_CACHE_FILE} root apache
|
local host="$1"
|
||||||
file_dir_init ${DNS_CACHE_LOCK} root apache
|
local zone="$2"
|
||||||
|
local ip="$3"
|
||||||
|
local ttl="$4"
|
||||||
|
|
||||||
|
local date="$(date --rfc-3339=seconds)"
|
||||||
|
local rc
|
||||||
|
|
||||||
|
|
||||||
|
log_info "DNS" "Host: [${host}] Zone: [${zone}] IP: [${ip}] TTL: [${ttl}] Date: [${date}]"
|
||||||
|
|
||||||
|
(
|
||||||
|
echo "prereq yxrrset ${host}.${zone}. A"
|
||||||
|
echo "update delete ${host}.${zone}. A"
|
||||||
|
echo "update add ${host}.${zone}. ${ttl} A ${ip}"
|
||||||
|
echo "update delete ${host}.${zone}. TXT"
|
||||||
|
echo "update add ${host}.${zone}. ${ttl} TXT ${date}"
|
||||||
|
echo ""
|
||||||
|
) | sudo nsupdate || rc="$?"
|
||||||
|
|
||||||
|
if [[ "${rc}" == "0" ]]
|
||||||
|
then
|
||||||
|
dns_tab_put "A" "${host}.${zone}" "${ip}"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -306,7 +328,21 @@ dns_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# dns_deinit
|
# Dns Init
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
dns_init()
|
||||||
|
{
|
||||||
|
file_dir_init "${DNS_CACHE_FILE}" root apache
|
||||||
|
file_dir_init "${DNS_CACHE_LOCK}" root apache
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Dns Deinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
dns_deinit()
|
dns_deinit()
|
||||||
236
usr/sbin/rx3_net_adm → lib/rx3/ip.bash
Executable file → Normal file
236
usr/sbin/rx3_net_adm → lib/rx3/ip.bash
Executable file → Normal file
@@ -1,7 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Rx3 Net Adm
|
# Rx3 IP Library
|
||||||
#
|
#
|
||||||
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
# mailto:arnaud@rx3.net
|
# mailto:arnaud@rx3.net
|
||||||
@@ -22,6 +22,13 @@
|
|||||||
#
|
#
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
if [[ "${RX3_IP_LIB}" != "" ]]
|
||||||
|
then
|
||||||
|
return
|
||||||
|
else
|
||||||
|
declare -g RX3_IP_LIB=1
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
@@ -29,7 +36,7 @@
|
|||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
. "${RX3_LIB_DIR}/network.bash"
|
. "${RX3_LIB_DIR}/base.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -39,179 +46,100 @@
|
|||||||
# Global Variable
|
# Global Variable
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
RETVAL=0
|
|
||||||
prog="rx3-net"
|
|
||||||
|
|
||||||
#DEBUG=""
|
|
||||||
#DEBUG="echo"
|
|
||||||
#DEBUG=":"
|
|
||||||
|
|
||||||
#LOG=":"
|
|
||||||
#LOG="echo"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# Start
|
# Is Valid Ip
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
start()
|
ip_is_valid_ip()
|
||||||
{
|
{
|
||||||
echo "Starting..."
|
local ip=$1
|
||||||
|
local regex='^([0-9]{1,3}\.){3}[0-9]{1,3}$'
|
||||||
|
|
||||||
if [ -r /var/lock/subsys/rx3-net ]
|
|
||||||
|
if [[ $ip =~ $regex ]]
|
||||||
then
|
then
|
||||||
echo "already started"
|
IFS='.' read -r o1 o2 o3 o4 <<< "$ip"
|
||||||
RETVAL=0
|
|
||||||
|
for octet in $o1 $o2 $o3 $o4
|
||||||
|
do
|
||||||
|
if (( octet < 0 || octet > 255 ))
|
||||||
|
then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
return 0
|
||||||
else
|
else
|
||||||
network_start
|
return 1
|
||||||
|
|
||||||
RETVAL=$?
|
|
||||||
[ "$RETVAL" = 0 ] && touch /var/lock/subsys/rx3-net
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Stop
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
stop()
|
|
||||||
{
|
|
||||||
echo "Stopping..."
|
|
||||||
|
|
||||||
if [ -r /var/lock/subsys/rx3-net ]
|
|
||||||
then
|
|
||||||
network_stop
|
|
||||||
|
|
||||||
RETVAL=$?
|
|
||||||
else
|
|
||||||
echo "already stopped"
|
|
||||||
RETVAL=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/rx3-net
|
|
||||||
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Status
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
status()
|
|
||||||
{
|
|
||||||
network_status
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Dump
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
dump()
|
|
||||||
{
|
|
||||||
network_tab_dump
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Table_Set
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
table_set()
|
|
||||||
{
|
|
||||||
echo "Setting ip:$1 table:$2"
|
|
||||||
|
|
||||||
network_table_set $1 $2
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Address_Refresh
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
address_refresh()
|
|
||||||
{
|
|
||||||
dst_id="$1"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${dst_id}" != "" ]]
|
|
||||||
then
|
|
||||||
echo "Refreshing address: [${dst_id}]..."
|
|
||||||
|
|
||||||
network_dst_tab_get ${dst_id}
|
|
||||||
network_dst_address_refresh ${dst_id} ${dst_host_name} ${dst_ip}
|
|
||||||
else
|
|
||||||
echo "Refreshing all address..."
|
|
||||||
|
|
||||||
network_dst_address_refresh_all
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# Main
|
# Ip To Num
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_init
|
ip_ip_to_num()
|
||||||
|
{
|
||||||
case "$1" in
|
local ip="$1"
|
||||||
start)
|
local a
|
||||||
start
|
local b
|
||||||
;;
|
local c
|
||||||
|
local d
|
||||||
stop)
|
|
||||||
stop
|
|
||||||
;;
|
|
||||||
|
|
||||||
restart)
|
|
||||||
stop
|
|
||||||
sleep 1
|
|
||||||
start
|
|
||||||
;;
|
|
||||||
|
|
||||||
status)
|
|
||||||
status
|
|
||||||
;;
|
|
||||||
|
|
||||||
dump)
|
IFS=. read -r a b c d <<< "${ip}"
|
||||||
dump
|
|
||||||
;;
|
|
||||||
|
|
||||||
table_set)
|
|
||||||
table_set $2 $3
|
|
||||||
;;
|
|
||||||
|
|
||||||
refresh_address)
|
echo $(( (a << 24) + (b << 16) + (c << 8) + d ))
|
||||||
address_refresh $2
|
}
|
||||||
;;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Num To Ip
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ip_num_to_ip()
|
||||||
|
{
|
||||||
|
local num="$1"
|
||||||
|
|
||||||
|
|
||||||
|
# Optional safety check
|
||||||
|
if (( num < 0 || num > 4294967295 ))
|
||||||
|
then
|
||||||
|
echo_error "num_to_ip: value out of range (0‑4294967295)"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Extract each byte by shifting and masking
|
||||||
|
local a=$(( (num >> 24) & 255 ))
|
||||||
|
local b=$(( (num >> 16) & 255 ))
|
||||||
|
local c=$(( (num >> 8) & 255 ))
|
||||||
|
local d=$(( num & 255 ))
|
||||||
|
|
||||||
|
printf '%d.%d.%d.%d\n' "$a" "$b" "$c" "$d"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# IP Filter
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ip_ip_filter()
|
||||||
|
{
|
||||||
|
grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'
|
||||||
|
}
|
||||||
|
|
||||||
*)
|
|
||||||
echo "Usage: $0 {start|stop|restart|status|dump|table_set|refresh_address}"
|
|
||||||
RETVAL=1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
network_deinit
|
|
||||||
|
|
||||||
exit $RETVAL
|
|
||||||
@@ -48,20 +48,20 @@ fi
|
|||||||
|
|
||||||
declare -g NETWORK_OPENVPN_STATUS
|
declare -g NETWORK_OPENVPN_STATUS
|
||||||
|
|
||||||
declare -Ag NETWORK_IP_ROUTE_TAB
|
declare -Ag NETWORK_IP_ROUTE_TAB=()
|
||||||
declare -g NETWORK_IP_ROUTE_ID_LIST
|
declare -g NETWORK_IP_ROUTE_ID_LIST=""
|
||||||
declare -Ag NETWORK_IP_ROUTE_IP_IDX
|
declare -Ag NETWORK_IP_ROUTE_IP_IDX=()
|
||||||
|
|
||||||
declare -g NETWORK_SRC_TYPE
|
declare -g NETWORK_SRC_TYPE=""
|
||||||
declare -Ag NETWORK_SRC_TAB
|
declare -Ag NETWORK_SRC_TAB=()
|
||||||
declare -g NETWORK_SRC_ID_LIST
|
declare -g NETWORK_SRC_ID_LIST=""
|
||||||
declare -Ag NETWORK_SRC_IP_IDX
|
declare -Ag NETWORK_SRC_IP_IDX=""
|
||||||
|
|
||||||
declare -g NETWORK_DST_TYPE
|
declare -g NETWORK_DST_TYPE=""
|
||||||
declare -Ag NETWORK_DST_TAB
|
declare -Ag NETWORK_DST_TAB=()
|
||||||
declare -g NETWORK_DST_ID_LIST
|
declare -g NETWORK_DST_ID_LIST=""
|
||||||
declare -Ag NETWORK_DST_NAME_IDX
|
declare -Ag NETWORK_DST_NAME_IDX=()
|
||||||
declare -Ag NETWORK_DST_DEV_IDX
|
declare -Ag NETWORK_DST_DEV_IDX=()
|
||||||
|
|
||||||
declare -g NETWORK_CONFIG_FILE="/etc/sysconfig/rx3-network"
|
declare -g NETWORK_CONFIG_FILE="/etc/sysconfig/rx3-network"
|
||||||
declare -g NETWORK_CONFIG_LOCK="/var/lock/network/config"
|
declare -g NETWORK_CONFIG_LOCK="/var/lock/network/config"
|
||||||
@@ -71,7 +71,7 @@ declare -g NETWORK_LOG_FILE
|
|||||||
declare -g NETWORK_LOG_LOCK
|
declare -g NETWORK_LOG_LOCK
|
||||||
#declare -g NETWORK_LOG_LOCK="${NETWORK_LOG_FILE}"
|
#declare -g NETWORK_LOG_LOCK="${NETWORK_LOG_FILE}"
|
||||||
|
|
||||||
declare -g NETWORK_LOG_TRACE
|
declare -g NETWORK_LOG_TRACE="DISABLE"
|
||||||
|
|
||||||
declare -g NETWORK_NC_TIMEOUT
|
declare -g NETWORK_NC_TIMEOUT
|
||||||
|
|
||||||
@@ -80,96 +80,14 @@ declare -g NETWORK_NC_TIMEOUT
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# is_valid_ip
|
# Network Common Load
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
is_valid_ip()
|
|
||||||
{
|
|
||||||
local ip=$1
|
|
||||||
local regex='^([0-9]{1,3}\.){3}[0-9]{1,3}$'
|
|
||||||
|
|
||||||
|
|
||||||
if [[ $ip =~ $regex ]]
|
|
||||||
then
|
|
||||||
IFS='.' read -r o1 o2 o3 o4 <<< "$ip"
|
|
||||||
|
|
||||||
for octet in $o1 $o2 $o3 $o4
|
|
||||||
do
|
|
||||||
if (( octet < 0 || octet > 255 ))
|
|
||||||
then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# ip_to_num
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
ip_to_num()
|
|
||||||
{
|
|
||||||
local ip="$1"
|
|
||||||
local a
|
|
||||||
local b
|
|
||||||
local c
|
|
||||||
local d
|
|
||||||
|
|
||||||
IFS=. read -r a b c d <<< "${ip}"
|
|
||||||
|
|
||||||
echo $(( (a << 24) + (b << 16) + (c << 8) + d ))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# num_to_ip
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
num_to_ip()
|
|
||||||
{
|
|
||||||
local num="$1"
|
|
||||||
|
|
||||||
|
|
||||||
# Optional safety check
|
|
||||||
if (( num < 0 || num > 4294967295 ))
|
|
||||||
then
|
|
||||||
echo_error "num_to_ip: value out of range (0‑4294967295)"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extract each byte by shifting and masking
|
|
||||||
local a=$(( (num >> 24) & 255 ))
|
|
||||||
local b=$(( (num >> 16) & 255 ))
|
|
||||||
local c=$(( (num >> 8) & 255 ))
|
|
||||||
local d=$(( num & 255 ))
|
|
||||||
|
|
||||||
printf '%d.%d.%d.%d\n' "$a" "$b" "$c" "$d"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# network_common_load
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_common_load()
|
network_common_load()
|
||||||
{
|
{
|
||||||
log_trace "Network" "Loading common..."
|
log_trace "Network" "Loading common..."
|
||||||
|
|
||||||
NETWORK_OPENVPN_STATUS="$( sudo /usr/local/sbin/openvpn-status)"
|
NETWORK_OPENVPN_STATUS="$( sudo openvpn-status)"
|
||||||
NETWORK_TABLE_LIST=""
|
NETWORK_TABLE_LIST=""
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,7 +96,7 @@ network_common_load()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_common_dump
|
# Network Common Dump
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_common_dump()
|
network_common_dump()
|
||||||
@@ -194,7 +112,7 @@ network_common_dump()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_common_openvpn_stats_get
|
# Network Common Openvpn Stats Get
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_common_openvpn_stats_get()
|
network_common_openvpn_stats_get()
|
||||||
@@ -209,7 +127,7 @@ network_common_openvpn_stats_get()
|
|||||||
else
|
else
|
||||||
if [[ "${device}" == "" ]]
|
if [[ "${device}" == "" ]]
|
||||||
then
|
then
|
||||||
tmp="$( echo "${NETWORK_OPENVPN_STATUS}" | grep "CLIENT_LIST,${client},")"
|
tmp="$( echo "${NETWORK_OPENVPN_STATUS}" | grep "CLIENT_LIST,${client},")" || true
|
||||||
tmp="${tmp/*\//}"
|
tmp="${tmp/*\//}"
|
||||||
device="${tmp/.status*/}"
|
device="${tmp/.status*/}"
|
||||||
fi
|
fi
|
||||||
@@ -223,7 +141,7 @@ network_common_openvpn_stats_get()
|
|||||||
|
|
||||||
OIFS="${IFS}"
|
OIFS="${IFS}"
|
||||||
IFS=","
|
IFS=","
|
||||||
set XXX/$( echo "${NETWORK_OPENVPN_STATUS}" | grep "${device}\.status: CLIENT_LIST,${client},") &>/dev/null
|
set XXX/$( echo "${NETWORK_OPENVPN_STATUS}" | grep "${device}\.status: CLIENT_LIST,${client},") &>/dev/null || true
|
||||||
IFS="${OIFS}"
|
IFS="${OIFS}"
|
||||||
|
|
||||||
tmp="${1/XXX*\//}"
|
tmp="${1/XXX*\//}"
|
||||||
@@ -243,12 +161,15 @@ network_common_openvpn_stats_get()
|
|||||||
else
|
else
|
||||||
# OpenVPN Client Mode
|
# OpenVPN Client Mode
|
||||||
|
|
||||||
set XXX/$( echo "${NETWORK_OPENVPN_STATUS}" | grep "${device}\.status:") &>/dev/null
|
set XXX/$( echo "${NETWORK_OPENVPN_STATUS}" | grep "${device}\.status:") &>/dev/null || true
|
||||||
|
|
||||||
tmp="${1/XXX*\//}"
|
tmp="${1:-""}"
|
||||||
|
tmp="${tmp/XXX*\//}"
|
||||||
ovpn_stat_device="${tmp/.status*/}"
|
ovpn_stat_device="${tmp/.status*/}"
|
||||||
ovpn_stat_bytes_received="${18/bytes,}"
|
tmp="${18:-0}"
|
||||||
ovpn_stat_bytes_sent="${22/bytes,}"
|
ovpn_stat_bytes_received="${tmp/bytes,/}"
|
||||||
|
tmp="${22:-0}"
|
||||||
|
ovpn_stat_bytes_sent="${tmp/bytes,/}"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
ovpn_stat_device=""
|
ovpn_stat_device=""
|
||||||
@@ -260,7 +181,7 @@ network_common_openvpn_stats_get()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_ip_route_tab_load
|
# Network Ip Route Tab Load
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_ip_route_tab_load()
|
network_ip_route_tab_load()
|
||||||
@@ -299,7 +220,7 @@ network_ip_route_tab_load()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_ip_route_tab_get
|
# Network Ip Route Tab Get
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_ip_route_tab_get()
|
network_ip_route_tab_get()
|
||||||
@@ -316,7 +237,7 @@ network_ip_route_tab_get()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_ip_route_tab_dump
|
# Network Ip Route Tab Dump
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_ip_route_tab_dump()
|
network_ip_route_tab_dump()
|
||||||
@@ -350,7 +271,7 @@ network_ip_route_tab_dump()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_tab_load
|
# Network Dst Tab Load
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_tab_load()
|
network_dst_tab_load()
|
||||||
@@ -385,7 +306,7 @@ network_dst_tab_load()
|
|||||||
var_assign NETWORK_TABLE_LIST "${ndtl_table}" INC
|
var_assign NETWORK_TABLE_LIST "${ndtl_table}" INC
|
||||||
|
|
||||||
|
|
||||||
ndtl_status="$( ip link show dev ${ndtl_device} 2>/dev/null | grep -q ",UP," && echo "1" || echo "0")"
|
ndtl_status="$( ip link show dev ${ndtl_device} 2>/dev/null | grep -q ",UP," && echo "1" || echo "0")" || true
|
||||||
|
|
||||||
|
|
||||||
if [[ "${ndtl_type}" == "5" ]]
|
if [[ "${ndtl_type}" == "5" ]]
|
||||||
@@ -404,8 +325,8 @@ network_dst_tab_load()
|
|||||||
case "${ndtl_type}"
|
case "${ndtl_type}"
|
||||||
in
|
in
|
||||||
"0")
|
"0")
|
||||||
ndtl_bytes_received="$( cat /sys/class/net/${ndtl_device}/statistics/rx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)"
|
ndtl_bytes_received="$( cat /sys/class/net/${ndtl_device}/statistics/rx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)" || true
|
||||||
ndtl_bytes_sent="$( cat /sys/class/net/${ndtl_device}/statistics/tx_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)" || true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"1"|"2")
|
"1"|"2")
|
||||||
@@ -418,8 +339,8 @@ network_dst_tab_load()
|
|||||||
ndtl_bytes_received=""
|
ndtl_bytes_received=""
|
||||||
ndtl_bytes_sent=""
|
ndtl_bytes_sent=""
|
||||||
else
|
else
|
||||||
ndtl_bytes_received="$( echo ${ovpn_stat_bytes_received} | numfmt --to=iec-i --suffix=B)"
|
ndtl_bytes_received="$( echo ${ovpn_stat_bytes_received} | numfmt --to=iec-i --suffix=B)" || true
|
||||||
ndtl_bytes_sent="$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B)"
|
ndtl_bytes_sent="$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B)" || true
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -434,10 +355,10 @@ network_dst_tab_load()
|
|||||||
if [[ "${ndtl_type}" == "1" ]]
|
if [[ "${ndtl_type}" == "1" ]]
|
||||||
then
|
then
|
||||||
ndtl_start_date="${ovpn_stat_connected_date}"
|
ndtl_start_date="${ovpn_stat_connected_date}"
|
||||||
ndtl_uptime="$( echo $(( $(date +%s) - ${ovpn_stat_connected_time_t})) | awk '{days = int($1/86400); print days " day" (( days > 1 ) ? "s" : "") strftime(" %H:%M:%S", $1,1)}')"
|
ndtl_uptime="$( echo $(( $(date +%s) - ${ovpn_stat_connected_time_t})) | awk '{days = int($1/86400); print days " day" (( days > 1 ) ? "s" : "") strftime(" %H:%M:%S", $1,1)}')" || true
|
||||||
else
|
else
|
||||||
ndtl_start_date="$( stat -c %Z /sys/class/net/${ndtl_device})"
|
ndtl_start_date="$( stat -c %Z /sys/class/net/${ndtl_device})" || true
|
||||||
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)}')"
|
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)}')" || true
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
ndtl_start_date=""
|
ndtl_start_date=""
|
||||||
@@ -463,7 +384,7 @@ network_dst_tab_load()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_tab_get
|
# Network Dst Tab Get
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_tab_get()
|
network_dst_tab_get()
|
||||||
@@ -490,7 +411,7 @@ network_dst_tab_get()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_tab_dump
|
# Network Dst Tab Dump
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_tab_dump()
|
network_dst_tab_dump()
|
||||||
@@ -544,14 +465,14 @@ network_dst_tab_dump()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_tab_name_lookup
|
# Network Dst Tab Name Lookup
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_tab_name_lookup()
|
network_dst_tab_name_lookup()
|
||||||
{
|
{
|
||||||
dst_name="$1"
|
dst_name="$1"
|
||||||
|
|
||||||
dst_id=${NETWORK_DST_NAME_IDX["${dst_name}"]}
|
dst_id=${NETWORK_DST_NAME_IDX["${dst_name}"]:-}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -559,14 +480,14 @@ network_dst_tab_name_lookup()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_tab_dev_lookup
|
# Network Dst Tab Dev Lookup
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_tab_dev_lookup()
|
network_dst_tab_dev_lookup()
|
||||||
{
|
{
|
||||||
dst_device="$1"
|
dst_device="$1"
|
||||||
|
|
||||||
dst_id=${NETWORK_DST_DEV_IDX["${dst_device}"]}
|
dst_id=${NETWORK_DST_DEV_IDX["${dst_device}"]:-}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -574,7 +495,7 @@ network_dst_tab_dev_lookup()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_ip_update
|
# Network Dst Ip Update
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_ip_update()
|
network_dst_ip_update()
|
||||||
@@ -598,7 +519,30 @@ network_dst_ip_update()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_name_ip_update
|
# 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}]"
|
||||||
|
|
||||||
|
dns_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()
|
network_dst_name_ip_update()
|
||||||
@@ -623,7 +567,7 @@ network_dst_name_ip_update()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_src_tab_load
|
# Network Src Tab Load
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_src_tab_load()
|
network_src_tab_load()
|
||||||
@@ -635,7 +579,7 @@ network_src_tab_load()
|
|||||||
|
|
||||||
log_trace "Network" "Loading Src tab..."
|
log_trace "Network" "Loading Src tab..."
|
||||||
|
|
||||||
ip_base=$( ip_to_num ${NETWORK_SRC_LOCAL_ADDRESS})
|
ip_base=$( ip_ip_to_num ${NETWORK_SRC_LOCAL_ADDRESS}) || true
|
||||||
|
|
||||||
while IFS= read -r line
|
while IFS= read -r line
|
||||||
do
|
do
|
||||||
@@ -668,21 +612,23 @@ network_src_tab_load()
|
|||||||
# [[ $nstl_host_name =~ ([0-9]+) ]]
|
# [[ $nstl_host_name =~ ([0-9]+) ]]
|
||||||
# nstl_device="${NETWORK_SRC_LOCAL_DEVICE}-${BASH_REMATCH[1]}"
|
# nstl_device="${NETWORK_SRC_LOCAL_DEVICE}-${BASH_REMATCH[1]}"
|
||||||
|
|
||||||
ip_num=$(ip_to_num ${nstl_ip})
|
ip_num=$(ip_ip_to_num ${nstl_ip})
|
||||||
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")"
|
nstl_status="$( ip link show dev ${nstl_device} 2>/dev/null | grep -q ",UP," && echo "1" || echo "0")" || true
|
||||||
|
|
||||||
if [[ "${nstl_status}" == 1 ]]
|
if [[ "${nstl_status}" == 1 ]]
|
||||||
then
|
then
|
||||||
nstl_bytes_received="$( cat /sys/class/net/${nstl_device}/statistics/rx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)"
|
nstl_bytes_received="$( cat /sys/class/net/${nstl_device}/statistics/rx_bytes 2>/dev/null | numfmt --to=iec-i --suffix=B)" || true
|
||||||
nstl_bytes_sent="$( cat /sys/class/net/${nstl_device}/statistics/tx_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)" || true
|
||||||
nstl_start_date="$( stat -c %Z /sys/class/net/${nstl_device})"
|
nstl_start_date="$( stat -c %Z /sys/class/net/${nstl_device})" || true
|
||||||
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)}')"
|
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)}')" || true
|
||||||
|
nstl_last_seen=""
|
||||||
else
|
else
|
||||||
nstl_bytes_received=""
|
nstl_bytes_received=""
|
||||||
nstl_bytes_sent=""
|
nstl_bytes_sent=""
|
||||||
|
nstl_start_date=""
|
||||||
nstl_uptime=""
|
nstl_uptime=""
|
||||||
nstl_last_seen=""
|
nstl_last_seen=""
|
||||||
fi
|
fi
|
||||||
@@ -694,6 +640,7 @@ network_src_tab_load()
|
|||||||
|
|
||||||
nstl_bytes_received=""
|
nstl_bytes_received=""
|
||||||
nstl_bytes_sent=""
|
nstl_bytes_sent=""
|
||||||
|
nstl_start_date=""
|
||||||
nstl_uptime=""
|
nstl_uptime=""
|
||||||
nstl_last_seen=""
|
nstl_last_seen=""
|
||||||
;;
|
;;
|
||||||
@@ -709,15 +656,15 @@ network_src_tab_load()
|
|||||||
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/\..*//')" || true
|
||||||
else
|
else
|
||||||
nstl_device="${ovpn_stat_device}"
|
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)
|
nstl_bytes_received=$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B) || true
|
||||||
nstl_bytes_sent=$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B)
|
nstl_bytes_sent=$( echo ${ovpn_stat_bytes_sent} | numfmt --to=iec-i --suffix=B) || true
|
||||||
nstl_start_date=${ovpn_stat_connected_date}
|
nstl_start_date=${ovpn_stat_connected_date}
|
||||||
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)}') || true
|
||||||
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/\..*//')" || true
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -743,6 +690,7 @@ network_src_tab_load()
|
|||||||
tab_assign NETWORK_SRC_TAB "${nstl_id},Status" "${nstl_status}"
|
tab_assign NETWORK_SRC_TAB "${nstl_id},Status" "${nstl_status}"
|
||||||
tab_assign NETWORK_SRC_TAB "${nstl_id},Bytes_Received" "${nstl_bytes_received}"
|
tab_assign NETWORK_SRC_TAB "${nstl_id},Bytes_Received" "${nstl_bytes_received}"
|
||||||
tab_assign NETWORK_SRC_TAB "${nstl_id},Bytes_Sent" "${nstl_bytes_sent}"
|
tab_assign NETWORK_SRC_TAB "${nstl_id},Bytes_Sent" "${nstl_bytes_sent}"
|
||||||
|
tab_assign NETWORK_SRC_TAB "${nstl_id},Start_Date" "${nstl_start_date}"
|
||||||
tab_assign NETWORK_SRC_TAB "${nstl_id},Uptime" "${nstl_uptime}"
|
tab_assign NETWORK_SRC_TAB "${nstl_id},Uptime" "${nstl_uptime}"
|
||||||
tab_assign NETWORK_SRC_TAB "${nstl_id},Last_Seen" "${nstl_last_seen}"
|
tab_assign NETWORK_SRC_TAB "${nstl_id},Last_Seen" "${nstl_last_seen}"
|
||||||
|
|
||||||
@@ -759,7 +707,7 @@ network_src_tab_load()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_src_tab_get
|
# Network Src Tab Get
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_src_tab_get()
|
network_src_tab_get()
|
||||||
@@ -797,7 +745,7 @@ network_src_tab_get()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_src_tab_dump
|
# Network Src Tab Dump
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_src_tab_dump()
|
network_src_tab_dump()
|
||||||
@@ -839,14 +787,14 @@ network_src_tab_dump()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_src_tab_ip_lookup
|
# Network Src Tab Ip Lookup
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_src_tab_ip_lookup()
|
network_src_tab_ip_lookup()
|
||||||
{
|
{
|
||||||
src_ip="$1"
|
src_ip="$1"
|
||||||
|
|
||||||
src_id=${NETWORK_SRC_IP_IDX["${src_ip}"]}
|
src_id=${NETWORK_SRC_IP_IDX["${src_ip}"]:-}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -854,7 +802,7 @@ network_src_tab_ip_lookup()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_tab_load
|
# Network Tab Load
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_tab_load()
|
network_tab_load()
|
||||||
@@ -877,7 +825,7 @@ network_tab_load()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_tab_dump
|
# Network Tab Dump
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_tab_dump()
|
network_tab_dump()
|
||||||
@@ -896,7 +844,7 @@ network_tab_dump()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_route_dst_init
|
# Network Route Dst Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_route_dst_init()
|
network_route_dst_init()
|
||||||
@@ -912,14 +860,14 @@ network_route_dst_init()
|
|||||||
|
|
||||||
if [[ "$(ip route list match 0.0.0.0 table main)" != "" ]]
|
if [[ "$(ip route list match 0.0.0.0 table main)" != "" ]]
|
||||||
then
|
then
|
||||||
${DEBUG} ip route add $(ip route list match 0.0.0.0 table main) table ${dst_table}
|
${DEBUG} ip route add $(ip route list match 0.0.0.0 table main) table ${dst_table} || true
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log_trace "Network" "Define default route to device: [${dst_device}] into table: [${dst_table}]"
|
log_trace "Network" "Define default route to device: [${dst_device}] into table: [${dst_table}]"
|
||||||
|
|
||||||
if [[ "$(ip link show ${dst_device})" != "" ]]
|
if [[ "$(ip link show ${dst_device})" != "" ]]
|
||||||
then
|
then
|
||||||
${DEBUG} ip route add default dev ${dst_device} table ${dst_table}
|
${DEBUG} ip route add default dev ${dst_device} table ${dst_table} || true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -932,7 +880,7 @@ network_route_dst_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_route_rx3_init
|
# Network Route Rx3 Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_route_rx3_init()
|
network_route_rx3_init()
|
||||||
@@ -952,7 +900,7 @@ network_route_rx3_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} dev ${ip_route_device} table ${dst_table}
|
${DEBUG} ip route add ${ip_route_ip}/${ip_route_mask} dev ${ip_route_device} table ${dst_table} || true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
@@ -963,7 +911,7 @@ network_route_rx3_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_route_other_init
|
# Network Route Other Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_route_other_init()
|
network_route_other_init()
|
||||||
@@ -982,7 +930,7 @@ network_route_other_init()
|
|||||||
|
|
||||||
if [[ "${dst_id}" == "" ]]
|
if [[ "${dst_id}" == "" ]]
|
||||||
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} table ${dst_table} dev ${ip_route_device} || true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -992,7 +940,7 @@ network_route_other_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_device_init
|
# Network Device Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_device_init()
|
network_device_init()
|
||||||
@@ -1022,7 +970,7 @@ network_device_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_device_deinit
|
# Network Device Deinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_device_deinit()
|
network_device_deinit()
|
||||||
@@ -1051,7 +999,7 @@ network_device_deinit()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_route_init
|
# Network Route Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_route_init()
|
network_route_init()
|
||||||
@@ -1074,7 +1022,7 @@ network_route_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_route_deinit
|
# Network Route Deinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_route_deinit()
|
network_route_deinit()
|
||||||
@@ -1087,7 +1035,7 @@ network_route_deinit()
|
|||||||
do
|
do
|
||||||
network_ip_route_tab_get ${ip_route_id}
|
network_ip_route_tab_get ${ip_route_id}
|
||||||
|
|
||||||
${DEBUG} ip route del ${ip_route_ip}/${ip_route_mask} table ${table} dev ${ip_route_device} 2>/dev/null
|
${DEBUG} ip route del ${ip_route_ip}/${ip_route_mask} table ${table} dev ${ip_route_device} 2>/dev/null || true
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
@@ -1098,7 +1046,7 @@ network_route_deinit()
|
|||||||
|
|
||||||
log_trace "Network" "Remove default route in table: [${dst_table}]"
|
log_trace "Network" "Remove default route in table: [${dst_table}]"
|
||||||
|
|
||||||
${DEBUG} ip route del default table ${dst_table} 2>/dev/null
|
${DEBUG} ip route del default table ${dst_table} 2>/dev/null || true
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1107,7 +1055,7 @@ network_route_deinit()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_table_set
|
# Network Table Set
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_table_set()
|
network_table_set()
|
||||||
@@ -1135,7 +1083,7 @@ network_table_set()
|
|||||||
|
|
||||||
${DEBUG} sed "/^NETWORK_SRC_CONFIG=\"/,/^\"/ { s/^\(${nts_ip//./\\.}[[:space:]]\+\([^\t ]\+[[:space:]]\+\)\{2\}\)[^[:space:]]\+/\1${nts_table}/ }" -i ${NETWORK_CONFIG_FILE}
|
${DEBUG} sed "/^NETWORK_SRC_CONFIG=\"/,/^\"/ { s/^\(${nts_ip//./\\.}[[:space:]]\+\([^\t ]\+[[:space:]]\+\)\{2\}\)[^[:space:]]\+/\1${nts_table}/ }" -i ${NETWORK_CONFIG_FILE}
|
||||||
|
|
||||||
${DEBUG} ip rule del from ${nts_ip} 2>/dev/null
|
${DEBUG} ip rule del from ${nts_ip} 2>/dev/null || true
|
||||||
${DEBUG} ip rule add from ${nts_ip} table ${nts_table}
|
${DEBUG} ip rule add from ${nts_ip} table ${nts_table}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1144,7 +1092,7 @@ network_table_set()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_address_init_all
|
# Network Dst Address Init All
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_address_init_all()
|
network_dst_address_init_all()
|
||||||
@@ -1161,7 +1109,7 @@ network_dst_address_init_all()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_address_refresh
|
# Network Dst Address Refresh
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_address_refresh()
|
network_dst_address_refresh()
|
||||||
@@ -1188,10 +1136,10 @@ network_dst_address_refresh()
|
|||||||
log_info "Network" "Reseting IP: [${dst_host_name}]: IP: [${dst_ip_new}] Status: (${dst_status})"
|
log_info "Network" "Reseting IP: [${dst_host_name}]: IP: [${dst_ip_new}] Status: (${dst_status})"
|
||||||
dst_ip_new="0.0.0.0"
|
dst_ip_new="0.0.0.0"
|
||||||
else
|
else
|
||||||
dst_ip_new="$( nc -w "${NETWORK_NC_TIMEOUT}" "${proxy_host}" "${proxy_port}" 2>/dev/null)"
|
dst_ip_new="$( nc -w "${NETWORK_NC_TIMEOUT}" "${proxy_host}" "${proxy_port}" 2>/dev/null)" || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if is_valid_ip "${dst_ip_new}"
|
if ip_is_valid_ip "${dst_ip_new}"
|
||||||
then
|
then
|
||||||
if [[ "${dst_ip}" != "${dst_ip_new}" ]]
|
if [[ "${dst_ip}" != "${dst_ip_new}" ]]
|
||||||
then
|
then
|
||||||
@@ -1216,7 +1164,7 @@ network_dst_address_refresh()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_dst_address_refresh_all
|
# Network Dst Address Refresh All
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_dst_address_refresh_all()
|
network_dst_address_refresh_all()
|
||||||
@@ -1232,7 +1180,7 @@ network_dst_address_refresh_all()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# bridge_up
|
# Bridge Up
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
function bridge_up
|
function bridge_up
|
||||||
@@ -1259,12 +1207,12 @@ function bridge_up
|
|||||||
|
|
||||||
log_trace "Network" "Configure IP rule and routing [${bu_bridge_device}]..."
|
log_trace "Network" "Configure IP rule and routing [${bu_bridge_device}]..."
|
||||||
|
|
||||||
${DEBUG} ip rule del from ${bu_peer_address} 2>/dev/null
|
${DEBUG} ip rule del from ${bu_peer_address} 2>/dev/null || true
|
||||||
${DEBUG} ip rule add from ${bu_peer_address} table ${bu_table}
|
${DEBUG} ip rule add from ${bu_peer_address} table ${bu_table}
|
||||||
|
|
||||||
for bu_tab in ${NETWORK_TABLE_LIST}
|
for bu_tab in ${NETWORK_TABLE_LIST}
|
||||||
do
|
do
|
||||||
${DEBUG} ip route add ${bu_bridge_network}/${bu_bridge_mask} dev ${bu_bridge_device} table ${bu_tab}
|
${DEBUG} ip route add ${bu_bridge_network}/${bu_bridge_mask} dev ${bu_bridge_device} table ${bu_tab} || true
|
||||||
done
|
done
|
||||||
# set +x
|
# set +x
|
||||||
}
|
}
|
||||||
@@ -1274,7 +1222,7 @@ function bridge_up
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# bridge_down
|
# Bridge Down
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
function bridge_down
|
function bridge_down
|
||||||
@@ -1294,12 +1242,13 @@ function bridge_down
|
|||||||
${DEBUG} ip route del ${bd_bridge_network}/${bd_bridge_mask} dev ${bd_bridge_device} table ${bd_tab} 2>/dev/null || true
|
${DEBUG} ip route del ${bd_bridge_network}/${bd_bridge_mask} dev ${bd_bridge_device} table ${bd_tab} 2>/dev/null || true
|
||||||
done
|
done
|
||||||
|
|
||||||
${DEBUG} ip rule del from ${bd_peer_address} table ${bd_table} 2>/dev/null
|
${DEBUG} ip rule del from ${bd_peer_address} table ${bd_table} 2>/dev/null || true
|
||||||
|
|
||||||
|
|
||||||
log_trace "Network" "Remove bridge [${bd_bridge_device}]..."
|
log_trace "Network" "Remove bridge [${bd_bridge_device}]..."
|
||||||
|
|
||||||
${DEBUG} ip link show ${bd_bridge_device} &>/dev/null && ${DEBUG} ip link del ${bd_bridge_device}
|
# ${DEBUG} ip link show ${bd_bridge_device} &>/dev/null && ${DEBUG} ip link del ${bd_bridge_device}
|
||||||
|
${DEBUG} ip link del ${bd_bridge_device} || true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1307,7 +1256,7 @@ function bridge_down
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_bridge_init
|
# Network Bridge Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_bridge_init()
|
network_bridge_init()
|
||||||
@@ -1336,7 +1285,7 @@ network_bridge_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_bridge_deinit
|
# Network Bridge Deinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_bridge_deinit()
|
network_bridge_deinit()
|
||||||
@@ -1365,7 +1314,7 @@ network_bridge_deinit()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_forward_add
|
# Network Forward Add
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_forward_add()
|
network_forward_add()
|
||||||
@@ -1384,7 +1333,7 @@ network_forward_add()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_forward_remove
|
# Network Forward Remove
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_forward_remove()
|
network_forward_remove()
|
||||||
@@ -1402,7 +1351,7 @@ network_forward_remove()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_forward_start
|
# Network Forward Start
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_forward_start()
|
network_forward_start()
|
||||||
@@ -1433,7 +1382,7 @@ network_forward_start()
|
|||||||
|
|
||||||
if [[ "${src_type}" != "0" ]]
|
if [[ "${src_type}" != "0" ]]
|
||||||
then
|
then
|
||||||
${DEBUG} ip rule del from ${src_ip} 2>/dev/null
|
${DEBUG} ip rule del from ${src_ip} 2>/dev/null || true
|
||||||
${DEBUG} ip rule add from ${src_ip} table ${src_table}
|
${DEBUG} ip rule add from ${src_ip} table ${src_table}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1449,7 +1398,7 @@ network_forward_start()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_forward_stop
|
# Network Forward Stop
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_forward_stop()
|
network_forward_stop()
|
||||||
@@ -1460,7 +1409,7 @@ network_forward_stop()
|
|||||||
do
|
do
|
||||||
network_src_tab_get ${src_id}
|
network_src_tab_get ${src_id}
|
||||||
|
|
||||||
${DEBUG} ip rule del from ${src_ip} 2>/dev/null
|
${DEBUG} ip rule del from ${src_ip} 2>/dev/null || true
|
||||||
|
|
||||||
if [[ "${src_port_range}" != "0" ]]
|
if [[ "${src_port_range}" != "0" ]]
|
||||||
then
|
then
|
||||||
@@ -1477,14 +1426,14 @@ network_forward_stop()
|
|||||||
|
|
||||||
if [[ "${dst_type}" != "0" ]]
|
if [[ "${dst_type}" != "0" ]]
|
||||||
then
|
then
|
||||||
${DEBUG} iptables -t nat -D PREROUTING -i ${dst_device} -j PREROUTING-VPN 2>/dev/null
|
${DEBUG} iptables -t nat -D PREROUTING -i ${dst_device} -j PREROUTING-VPN 2>/dev/null || true
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
log_trace "Network" "Delete VPN forward chain"
|
log_trace "Network" "Delete VPN forward chain"
|
||||||
|
|
||||||
${DEBUG} iptables -t nat -X PREROUTING-VPN 2>/dev/null
|
${DEBUG} iptables -t nat -X PREROUTING-VPN 2>/dev/null || true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1492,19 +1441,11 @@ network_forward_stop()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_init
|
# Network Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_init()
|
network_init()
|
||||||
{
|
{
|
||||||
file_dir_init ${NETWORK_CONFIG_LOCK} root apache
|
|
||||||
file_lock ${NETWORK_CONFIG_LOCK} READ 9
|
|
||||||
|
|
||||||
[ -e "${NETWORK_CONFIG_FILE}" ] && . "${NETWORK_CONFIG_FILE}"
|
|
||||||
|
|
||||||
file_unlock 9
|
|
||||||
|
|
||||||
|
|
||||||
# By default Loggin is enabled
|
# By default Loggin is enabled
|
||||||
# export LOG="" to disable it
|
# export LOG="" to disable it
|
||||||
|
|
||||||
@@ -1523,6 +1464,14 @@ network_init()
|
|||||||
export ECHO=":"
|
export ECHO=":"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
file_dir_init ${NETWORK_CONFIG_LOCK} root apache
|
||||||
|
file_lock ${NETWORK_CONFIG_LOCK} READ 9
|
||||||
|
|
||||||
|
[ -e "${NETWORK_CONFIG_FILE}" ] && . "${NETWORK_CONFIG_FILE}"
|
||||||
|
|
||||||
|
file_unlock 9
|
||||||
|
|
||||||
|
|
||||||
log_set "${NETWORK_LOG_FILE}" "${NETWORK_LOG_LOCK}" "${ECHO}" "${NETWORK_LOG_TRACE}"
|
log_set "${NETWORK_LOG_FILE}" "${NETWORK_LOG_LOCK}" "${ECHO}" "${NETWORK_LOG_TRACE}"
|
||||||
|
|
||||||
|
|
||||||
@@ -1539,7 +1488,7 @@ network_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_deinit
|
# Network Deinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_deinit()
|
network_deinit()
|
||||||
@@ -1569,7 +1518,7 @@ network_deinit()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_reinit
|
# Network Reinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_reinit()
|
network_reinit()
|
||||||
@@ -1583,7 +1532,7 @@ network_reinit()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_start
|
# Network Start
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_start()
|
network_start()
|
||||||
@@ -1606,7 +1555,7 @@ network_start()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_stop
|
# Network Stop
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_stop()
|
network_stop()
|
||||||
@@ -1629,7 +1578,7 @@ network_stop()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# network_status
|
# Network Status
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
network_status()
|
network_status()
|
||||||
@@ -1651,7 +1600,7 @@ network_status()
|
|||||||
then
|
then
|
||||||
echo ${src_device}
|
echo ${src_device}
|
||||||
fi
|
fi
|
||||||
done | sort -u
|
done | sort -Vu
|
||||||
|
|
||||||
echo "DST"
|
echo "DST"
|
||||||
for dst_id in ${NETWORK_DST_ID_LIST}
|
for dst_id in ${NETWORK_DST_ID_LIST}
|
||||||
@@ -1662,7 +1611,7 @@ network_status()
|
|||||||
then
|
then
|
||||||
echo ${dst_device}
|
echo ${dst_device}
|
||||||
fi
|
fi
|
||||||
done | sort -u
|
done | sort -Vu
|
||||||
) | while read entry
|
) | while read entry
|
||||||
do
|
do
|
||||||
case ${entry}
|
case ${entry}
|
||||||
@@ -1678,11 +1627,11 @@ network_status()
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
*)
|
*)
|
||||||
ip address show $entry | sed -e 's/^[^:]*: //'
|
ip address show $entry | sed -e 's/^[^:]*: //' || true
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Rules:"
|
echo "Rules:"
|
||||||
|
|
||||||
@@ -1698,15 +1647,15 @@ network_status()
|
|||||||
do
|
do
|
||||||
echo "Table ${table}:"
|
echo "Table ${table}:"
|
||||||
|
|
||||||
ip route list table ${table}
|
ip route list table ${table} || true
|
||||||
echo
|
echo
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Forward:"
|
echo "Forward:"
|
||||||
|
|
||||||
iptables -t nat -L PREROUTING -v -n
|
iptables -t nat -L PREROUTING -v -n || true
|
||||||
echo
|
echo
|
||||||
|
|
||||||
iptables -t nat -L PREROUTING-VPN -v -n
|
iptables -t nat -L PREROUTING-VPN -v -n || true
|
||||||
}
|
}
|
||||||
@@ -46,9 +46,9 @@ fi
|
|||||||
# Global Variable
|
# Global Variable
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
declare -Ag VPN_JOB_TAB
|
declare -Ag VPN_JOB_TAB=()
|
||||||
declare -Ag VPN_JOB_ID_LIST
|
declare -g VPN_JOB_ID_LIST=""
|
||||||
declare -Ag VPN_JOB_NAME_IDX
|
declare -Ag VPN_JOB_NAME_IDX=()
|
||||||
|
|
||||||
declare -g VPN_PID_FILE
|
declare -g VPN_PID_FILE
|
||||||
declare -g VPN_STATUS_FILE
|
declare -g VPN_STATUS_FILE
|
||||||
@@ -59,7 +59,7 @@ declare -g VPN_STATUS_LOCK
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_config_make
|
# VPN Config Make
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_config_make()
|
vpn_config_make()
|
||||||
@@ -81,7 +81,7 @@ vpn_config_make()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_config_make_all
|
# VPN Config Make All
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_config_make_all()
|
vpn_config_make_all()
|
||||||
@@ -108,7 +108,7 @@ vpn_config_make_all()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_job_tab_load
|
# VPN Job Tab Load
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_job_tab_load()
|
vpn_job_tab_load()
|
||||||
@@ -153,7 +153,7 @@ vpn_job_tab_load()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_job_tab_get
|
# VPN Job Tab Get
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_job_tab_get()
|
vpn_job_tab_get()
|
||||||
@@ -172,7 +172,7 @@ vpn_job_tab_get()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_job_tab_save
|
# VPN Job Tab Save
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_job_tab_save()
|
vpn_job_tab_save()
|
||||||
@@ -211,7 +211,7 @@ VPN_STATUS="
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_job_tab_init
|
# VPN Job Tab Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_job_tab_init()
|
vpn_job_tab_init()
|
||||||
@@ -252,7 +252,7 @@ vpn_job_tab_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_job_tab_deinit
|
# VPN Job Tab Deinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_job_tab_deinit()
|
vpn_job_tab_deinit()
|
||||||
@@ -286,7 +286,7 @@ vpn_job_tab_deinit()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_job_tab_dump
|
# VPN Job Tab Dump
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_job_tab_dump()
|
vpn_job_tab_dump()
|
||||||
@@ -318,7 +318,7 @@ vpn_job_tab_dump()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_supervisor
|
# VPN Supervisor
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_supervisor()
|
vpn_supervisor()
|
||||||
@@ -383,7 +383,7 @@ vpn_supervisor()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_kill_jobs
|
# VPN Kill Jobs
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_jobs_kill()
|
vpn_jobs_kill()
|
||||||
@@ -415,7 +415,7 @@ vpn_jobs_kill()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_init
|
# VPN Init
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_init()
|
vpn_init()
|
||||||
@@ -447,7 +447,7 @@ vpn_init()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_deinit
|
# VPN Deinit
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_deinit()
|
vpn_deinit()
|
||||||
@@ -460,7 +460,7 @@ vpn_deinit()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_start
|
# VPN Start
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_start()
|
vpn_start()
|
||||||
@@ -502,7 +502,7 @@ vpn_start()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_stop
|
# VPN Stop
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_stop()
|
vpn_stop()
|
||||||
@@ -545,7 +545,7 @@ vpn_stop()
|
|||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
# vpn_status
|
# VPN Status
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
vpn_status()
|
vpn_status()
|
||||||
@@ -8,11 +8,11 @@ Before=docker.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStart=/usr/local/sbin/rx3_net_adm start
|
ExecStart=/usr/sbin/rx3_net_adm start
|
||||||
ExecStartPost=/usr/local/sbin/rx3_net_adm status
|
ExecStartPost=/usr/sbin/rx3_net_adm status
|
||||||
ExecStop=/usr/local/sbin/rx3_net_adm stop
|
ExecStop=/usr/sbin/rx3_net_adm stop
|
||||||
ExecStopPost=/usr/local/sbin/rx3_net_adm status
|
ExecStopPost=/usr/sbin/rx3_net_adm status
|
||||||
ExecReload=/usr/local/sbin/rx3_net_adm restart
|
ExecReload=/usr/sbin/rx3_net_adm restart
|
||||||
RemainAfterExit=yes
|
RemainAfterExit=yes
|
||||||
TimeoutStartSec=30s
|
TimeoutStartSec=30s
|
||||||
TimeoutStopSec=15s
|
TimeoutStopSec=15s
|
||||||
@@ -8,11 +8,11 @@ Before=docker.service
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=oneshot
|
Type=oneshot
|
||||||
ExecStart=/usr/local/sbin/rx3_vpn_adm start
|
ExecStart=/usr/sbin/rx3_vpn_adm start
|
||||||
ExecStartPost=/usr/local/sbin/rx3_vpn_adm status
|
ExecStartPost=/usr/sbin/rx3_vpn_adm status
|
||||||
ExecStop=/usr/local/sbin/rx3_vpn_adm stop
|
ExecStop=/usr/sbin/rx3_vpn_adm stop
|
||||||
ExecStopPost=/usr/local/sbin/rx3_vpn_adm status
|
ExecStopPost=/usr/sbin/rx3_vpn_adm status
|
||||||
ExecReload=/usr/local/sbin/rx3_vpn_adm restart
|
ExecReload=/usr/sbin/rx3_vpn_adm restart
|
||||||
RemainAfterExit=yes
|
RemainAfterExit=yes
|
||||||
TimeoutStartSec=30s
|
TimeoutStartSec=30s
|
||||||
TimeoutStopSec=15s
|
TimeoutStopSec=15s
|
||||||
275
sbin/cert_dump
Executable file
275
sbin/cert_dump
Executable file
@@ -0,0 +1,275 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 Cert Dump
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/base.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.2.0"
|
||||||
|
declare -g NAME="cert_dump"
|
||||||
|
declare -g HELP="usage: [-h | --help] | [-V | --version] | [-v | --verbose] {ca|tc|key|csr|crt} [host]"
|
||||||
|
|
||||||
|
declare -g MODE="DEFAULT"
|
||||||
|
declare -g VERBOSE="FALSE"
|
||||||
|
declare -g DRY_RUN="FALSE"
|
||||||
|
declare -g RETVAL=0
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
declare -g OPENVPN_DIR="/etc/openvpn"
|
||||||
|
declare -g TYPE=""
|
||||||
|
declare -g HOST=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Version Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_version_print()
|
||||||
|
{
|
||||||
|
version_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Help Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_help_print()
|
||||||
|
{
|
||||||
|
cdu_version_print
|
||||||
|
help_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Arg Parse
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_args_parse()
|
||||||
|
{
|
||||||
|
tmp_args=$(getopt -o hvV --long help,verbose,version -n "${NAME}" -- "$@")
|
||||||
|
|
||||||
|
if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi
|
||||||
|
|
||||||
|
eval set -- "${tmp_args}"
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
# Options
|
||||||
|
-h|--help) MODE="EXIT"; cdu_help_print; shift;;
|
||||||
|
-V|--version) MODE="EXIT"; cdu_version_print; shift;;
|
||||||
|
-v|--verbose) VERBOSE="TRUE"; shift;;
|
||||||
|
|
||||||
|
# End of options
|
||||||
|
--) shift; break;;
|
||||||
|
*) echo "args_parse internal error [$1]!"; exit 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${MODE}" != "EXIT" ]]
|
||||||
|
then
|
||||||
|
if [[ "${#}" -lt "1" ]]
|
||||||
|
then
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Not enough args!"
|
||||||
|
cdu_help_print
|
||||||
|
else
|
||||||
|
case "$1" in
|
||||||
|
"ca"|"tc")
|
||||||
|
MODE="$(echo "$1" | tr '[:lower:]' '[:upper:]')"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"key"|"csr"|"crt")
|
||||||
|
if [[ "${#}" -lt "2" ]]
|
||||||
|
then
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Missing host argument for type: [$1]"
|
||||||
|
cdu_help_print
|
||||||
|
else
|
||||||
|
MODE="$(echo "$1" | tr '[:lower:]' '[:upper:]')"
|
||||||
|
HOST="$2"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Invalid type: [$1]"
|
||||||
|
cdu_help_print
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Cert Dump Ca
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_cert_dump_ca()
|
||||||
|
{
|
||||||
|
cat "${OPENVPN_DIR}/tls/certs/ca.crt"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Cert Dump Tc
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_cert_dump_tc()
|
||||||
|
{
|
||||||
|
cat "${OPENVPN_DIR}/tls/private/tc.key"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Cert Dump Key
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_cert_dump_key()
|
||||||
|
{
|
||||||
|
local host="$1"
|
||||||
|
|
||||||
|
cat "${OPENVPN_DIR}/tls/private/${host}.key"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Cert Dump Csr
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_cert_dump_csr()
|
||||||
|
{
|
||||||
|
local host="$1"
|
||||||
|
|
||||||
|
cat "${OPENVPN_DIR}/tls/certs/${host}.csr"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Cert Dump Crt
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_cert_dump_crt()
|
||||||
|
{
|
||||||
|
local host="$1"
|
||||||
|
|
||||||
|
cat "${OPENVPN_DIR}/tls/certs/${host}.crt"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
cdu_args_parse "$@"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "${MODE}" == "EXIT" ]]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
case "${MODE}" in
|
||||||
|
"CA")
|
||||||
|
cdu_cert_dump_ca
|
||||||
|
;;
|
||||||
|
|
||||||
|
"TC")
|
||||||
|
cdu_cert_dump_tc
|
||||||
|
;;
|
||||||
|
|
||||||
|
"KEY")
|
||||||
|
cdu_cert_dump_key "${HOST}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"CSR")
|
||||||
|
cdu_cert_dump_csr "${HOST}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"CRT")
|
||||||
|
cdu_cert_dump_crt "${HOST}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
cdu_help_print
|
||||||
|
RETVAL=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
183
sbin/ip_host_update
Executable file
183
sbin/ip_host_update
Executable file
@@ -0,0 +1,183 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 IP Host Update
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/dns.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.0.0"
|
||||||
|
declare -g NAME="ip_host_update"
|
||||||
|
declare -g HELP="usage: [-h | --help] | [-V | --version] | [-v | --verbose] <host> <zone> <ip> <ttl>"
|
||||||
|
|
||||||
|
declare -g MODE="DEFAULT"
|
||||||
|
declare -g VERBOSE="FALSE"
|
||||||
|
declare -g DRY_RUN="FALSE"
|
||||||
|
declare -g RETVAL=0
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
declare -g HOST=""
|
||||||
|
declare -g ZONE=""
|
||||||
|
declare -g IP=""
|
||||||
|
declare -g TTL=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Version Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ihu_version_print()
|
||||||
|
{
|
||||||
|
version_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Help Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ihu_help_print()
|
||||||
|
{
|
||||||
|
ihu_version_print
|
||||||
|
help_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Arg Parse
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ihu_args_parse()
|
||||||
|
{
|
||||||
|
tmp_args=$(getopt -o hvV --long help,verbose,version -n "${NAME}" -- "$@")
|
||||||
|
|
||||||
|
if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi
|
||||||
|
|
||||||
|
eval set -- "${tmp_args}"
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
# Options
|
||||||
|
-h|--help) MODE="EXIT"; ihu_help_print; shift;;
|
||||||
|
-V|--version) MODE="EXIT"; ihu_version_print; shift;;
|
||||||
|
-v|--verbose) VERBOSE="TRUE"; shift;;
|
||||||
|
|
||||||
|
# End of options
|
||||||
|
--) shift; break;;
|
||||||
|
*) echo "args_parse internal error [$1]!"; exit 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${MODE}" != "EXIT" ]]
|
||||||
|
then
|
||||||
|
if [[ "${#}" -lt "4" ]]
|
||||||
|
then
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Not enough args!"
|
||||||
|
ihu_help_print
|
||||||
|
else
|
||||||
|
MODE="UPDATE"
|
||||||
|
HOST="$1"
|
||||||
|
ZONE="$2"
|
||||||
|
IP="$3"
|
||||||
|
TTL="$4"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Host Update
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ihu_host_update()
|
||||||
|
{
|
||||||
|
local host="$1"
|
||||||
|
local zone="$2"
|
||||||
|
local ip="$3"
|
||||||
|
local ttl="$4"
|
||||||
|
|
||||||
|
dns_host_update "${host}" "${zone}" "${ip}" "${ttl}"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ihu_args_parse "$@"
|
||||||
|
|
||||||
|
if [[ "${MODE}" == "EXIT" ]]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "${MODE}" in
|
||||||
|
UPDATE)
|
||||||
|
ihu_host_update "${HOST}" "${ZONE}" "${IP}" "${TTL}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 <host> <zone> <ip> <ttl>"
|
||||||
|
RETVAL=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
75
sbin/openvpn-client-down
Executable file
75
sbin/openvpn-client-down
Executable file
@@ -0,0 +1,75 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 OpenVPN Client Down
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/network.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.2.0"
|
||||||
|
declare -g NAME="openvpn-client-down"
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
network_init
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
line="[${dev}]: Local_Int_Address: [${ifconfig_local}] Remote_Int_Address: [${ifconfig_pool_remote_ip}] Remote_Ext_Address: [${untrusted_ip}] Common_Name: [${common_name}] Duration: [${time_duration}]"
|
||||||
|
|
||||||
|
log_info "VPN-Client-Down" "${line}"
|
||||||
|
|
||||||
|
touch /etc/openvpn/status/${common_name}.status
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log_trace "VPN-Client-Down" "[${dev}]: Done!"
|
||||||
|
|
||||||
|
network_deinit
|
||||||
77
sbin/openvpn-client-up
Executable file
77
sbin/openvpn-client-up
Executable file
@@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 OpenVPN Client Up
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/network.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.0.0"
|
||||||
|
declare -g NAME="openvpn-client-up"
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
network_init
|
||||||
|
|
||||||
|
output_param_file="$1"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
line="[${dev}]: Local_Int_Address: [${ifconfig_local}] Remote_Int_Address: [${ifconfig_pool_remote_ip}] Remote_Ext_Address: [${untrusted_ip}] Common_Name: [${common_name}] Output_Param_File: [${output_param_file}]"
|
||||||
|
|
||||||
|
log_info "VPN-Client-Up" "${line}"
|
||||||
|
|
||||||
|
touch /etc/openvpn/status/${common_name}.status
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
log_trace "VPN-Client-Up" "[${dev}]: Done!"
|
||||||
|
|
||||||
|
network_deinit
|
||||||
79
sbin/openvpn-down
Executable file
79
sbin/openvpn-down
Executable file
@@ -0,0 +1,79 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 OpenVPN Down
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/network.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.0.0"
|
||||||
|
declare -g NAME="openvpn-down"
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
dev="$1"
|
||||||
|
local_mtu="$2"
|
||||||
|
remote_mtu="$3"
|
||||||
|
local_address="$4"
|
||||||
|
local_netmask="$5"
|
||||||
|
phase="$6"
|
||||||
|
|
||||||
|
|
||||||
|
network_init
|
||||||
|
|
||||||
|
|
||||||
|
log_info "VPN-Down" "[${dev}]: Local_MTU: [${local_mtu}] Remote_MTU: [${remote_mtu}] Local_Address: [${local_address}] Local_Netmask: [${local_netmask}] Phase: [${phase}]"
|
||||||
|
|
||||||
|
|
||||||
|
network_device_deinit "" "${dev}"
|
||||||
|
|
||||||
|
log_trace "VPN-Down" "[${dev}]: Done!"
|
||||||
|
|
||||||
|
network_deinit
|
||||||
193
sbin/openvpn-status
Executable file
193
sbin/openvpn-status
Executable file
@@ -0,0 +1,193 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 OpenVPN Status
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/base.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.0.0"
|
||||||
|
declare -g NAME="openvpn-status"
|
||||||
|
declare -g HELP="usage: [-h | --help] | [-V | --version] | [-v | --verbose] [dev]"
|
||||||
|
|
||||||
|
declare -g MODE="DEFAULT"
|
||||||
|
declare -g VERBOSE="FALSE"
|
||||||
|
declare -g DRY_RUN="FALSE"
|
||||||
|
declare -g RETVAL=0
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
declare -g STATUS_DIR="/var/lib/openvpn"
|
||||||
|
declare -g DEV=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Version Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ovs_version_print()
|
||||||
|
{
|
||||||
|
version_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Help Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ovs_help_print()
|
||||||
|
{
|
||||||
|
ovs_version_print
|
||||||
|
help_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Arg Parse
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ovs_args_parse()
|
||||||
|
{
|
||||||
|
tmp_args=$(getopt -o hvV --long help,verbose,version -n "${NAME}" -- "$@")
|
||||||
|
|
||||||
|
if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi
|
||||||
|
|
||||||
|
eval set -- "${tmp_args}"
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
# Options
|
||||||
|
-h|--help) MODE="EXIT"; ovs_help_print; shift;;
|
||||||
|
-V|--version) MODE="EXIT"; ovs_version_print; shift;;
|
||||||
|
-v|--verbose) VERBOSE="TRUE"; shift;;
|
||||||
|
|
||||||
|
# End of options
|
||||||
|
--) shift; break;;
|
||||||
|
*) echo "args_parse internal error [$1]!"; exit 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${MODE}" != "EXIT" ]]
|
||||||
|
then
|
||||||
|
if [[ "${#}" -ge "1" ]]
|
||||||
|
then
|
||||||
|
MODE="DEVICE"
|
||||||
|
DEV="$1"
|
||||||
|
else
|
||||||
|
MODE="ALL"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Status Device
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ovs_status_device()
|
||||||
|
{
|
||||||
|
local dev="$1"
|
||||||
|
|
||||||
|
cat "${STATUS_DIR}/${dev}.status"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Status All
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ovs_status_all()
|
||||||
|
{
|
||||||
|
awk '{print FILENAME ": " $0}' "${STATUS_DIR}"/*.status
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ovs_args_parse "$@"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "${MODE}" == "EXIT" ]]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
case "${MODE}" in
|
||||||
|
DEVICE)
|
||||||
|
ovs_status_device "${DEV}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
ALL)
|
||||||
|
ovs_status_all
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 [dev]"
|
||||||
|
RETVAL=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
78
sbin/openvpn-up
Executable file
78
sbin/openvpn-up
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 OpenVPN Up
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/network.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.0.0"
|
||||||
|
declare -g NAME="openvpn-up"
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
dev="$1"
|
||||||
|
local_mtu="$2"
|
||||||
|
remote_mtu="$3"
|
||||||
|
local_address="$4"
|
||||||
|
local_netmask="$5"
|
||||||
|
phase="$6"
|
||||||
|
|
||||||
|
|
||||||
|
network_init
|
||||||
|
|
||||||
|
|
||||||
|
log_info "VPN-Up" "[${dev}]: Local_MTU: [${local_mtu}] Remote_MTU: [${remote_mtu}] Local_Address: [${local_address}] Local_Netmask: [${local_netmask}] Phase: [${phase}]"
|
||||||
|
|
||||||
|
|
||||||
|
network_device_init "" "${dev}"
|
||||||
|
|
||||||
|
log_trace "VPN-Up" "[${dev}]: Done!"
|
||||||
|
|
||||||
|
|
||||||
|
network_deinit
|
||||||
320
sbin/rx3_net_adm
Executable file
320
sbin/rx3_net_adm
Executable file
@@ -0,0 +1,320 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 Net Adm
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/network.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.2.0"
|
||||||
|
declare -g NAME="rx3_net_adm"
|
||||||
|
declare -g HELP="usage: [-h | --help] | [-V | --version] | [-v | --verbose] {start|stop|restart|status|dump|table_set|refresh_address} [args...]"
|
||||||
|
|
||||||
|
declare -g MODE="DEFAULT"
|
||||||
|
declare -g VERBOSE="FALSE"
|
||||||
|
declare -g DRY_RUN="FALSE"
|
||||||
|
declare -g RETVAL=0
|
||||||
|
declare -g prog="rx3-net"
|
||||||
|
|
||||||
|
declare -g DEBUG="${DEBUG-}"
|
||||||
|
#declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g ECHO="${ECHO-}"
|
||||||
|
#declare -g ECHO="echo"
|
||||||
|
#declare -g ECHO=":"
|
||||||
|
|
||||||
|
#declare -g LOG=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Version Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_version_print()
|
||||||
|
{
|
||||||
|
version_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Help Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_help_print()
|
||||||
|
{
|
||||||
|
rna_version_print
|
||||||
|
help_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Arg Parse
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_args_parse()
|
||||||
|
{
|
||||||
|
tmp_args=$(getopt -o hvV --long help,verbose,version -n "${NAME}" -- "$@")
|
||||||
|
|
||||||
|
if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi
|
||||||
|
|
||||||
|
eval set -- "${tmp_args}"
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
# Options
|
||||||
|
-h|--help) MODE="EXIT"; rna_help_print; shift;;
|
||||||
|
-V|--version) MODE="EXIT"; rna_version_print; shift;;
|
||||||
|
-v|--verbose) VERBOSE="TRUE"; shift;;
|
||||||
|
|
||||||
|
# End of options
|
||||||
|
--) shift; break;;
|
||||||
|
*) echo "args_parse internal error [$1]!"; exit 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${MODE}" != "EXIT" ]]
|
||||||
|
then
|
||||||
|
if [[ "${#}" -lt "1" ]]
|
||||||
|
then
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Not enough args!"
|
||||||
|
rna_help_print
|
||||||
|
else
|
||||||
|
case "$1" in
|
||||||
|
start|stop|restart|status|dump|table_set|refresh_address)
|
||||||
|
MODE="$(echo "$1" | tr '[:lower:]' '[:upper:]')"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Invalid command: [$1]"
|
||||||
|
rna_help_print
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Start
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_start()
|
||||||
|
{
|
||||||
|
echo "Starting..."
|
||||||
|
|
||||||
|
if [ -r /var/lock/subsys/rx3-net ]
|
||||||
|
then
|
||||||
|
echo "already started"
|
||||||
|
RETVAL=0
|
||||||
|
else
|
||||||
|
network_start
|
||||||
|
|
||||||
|
RETVAL=$?
|
||||||
|
[ "${RETVAL}" = 0 ] && touch /var/lock/subsys/rx3-net
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Stop
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_stop()
|
||||||
|
{
|
||||||
|
echo "Stopping..."
|
||||||
|
|
||||||
|
if [ -r /var/lock/subsys/rx3-net ]
|
||||||
|
then
|
||||||
|
network_stop
|
||||||
|
|
||||||
|
RETVAL=$?
|
||||||
|
else
|
||||||
|
echo "already stopped"
|
||||||
|
RETVAL=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ "${RETVAL}" = 0 ] && rm -f /var/lock/subsys/rx3-net
|
||||||
|
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Status
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_status()
|
||||||
|
{
|
||||||
|
network_status
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Dump
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_dump()
|
||||||
|
{
|
||||||
|
network_tab_dump
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Table Set
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_table_set()
|
||||||
|
{
|
||||||
|
echo "Setting ip:$1 table:$2"
|
||||||
|
|
||||||
|
network_table_set "$1" "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Address Refresh
|
||||||
|
#--------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_address_refresh()
|
||||||
|
{
|
||||||
|
dst_id="$1"
|
||||||
|
|
||||||
|
if [[ "${dst_id}" != "" ]]
|
||||||
|
then
|
||||||
|
echo "Refreshing address: [${dst_id}]..."
|
||||||
|
|
||||||
|
network_dst_tab_get "${dst_id}"
|
||||||
|
network_dst_address_refresh "${dst_id}" "${dst_host_name}" "${dst_ip}"
|
||||||
|
else
|
||||||
|
echo "Refreshing all address..."
|
||||||
|
|
||||||
|
network_dst_address_refresh_all
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rna_args_parse "$@"
|
||||||
|
|
||||||
|
if [[ "${MODE}" == "EXIT" ]]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
network_init
|
||||||
|
|
||||||
|
case "${MODE}" in
|
||||||
|
START)
|
||||||
|
rna_start
|
||||||
|
;;
|
||||||
|
|
||||||
|
STOP)
|
||||||
|
rna_stop
|
||||||
|
;;
|
||||||
|
|
||||||
|
RESTART)
|
||||||
|
rna_stop
|
||||||
|
sleep 1
|
||||||
|
rna_start
|
||||||
|
;;
|
||||||
|
|
||||||
|
STATUS)
|
||||||
|
rna_status
|
||||||
|
;;
|
||||||
|
|
||||||
|
DUMP)
|
||||||
|
rna_dump
|
||||||
|
;;
|
||||||
|
|
||||||
|
TABLE_SET)
|
||||||
|
rna_table_set "$2" "$3"
|
||||||
|
;;
|
||||||
|
|
||||||
|
REFRESH_ADDRESS)
|
||||||
|
rna_address_refresh "$2"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|restart|status|dump|table_set|refresh_address}"
|
||||||
|
RETVAL=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
network_deinit
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
271
sbin/rx3_vpn_adm
Executable file
271
sbin/rx3_vpn_adm
Executable file
@@ -0,0 +1,271 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 Vpn Adm
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/vpn.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.2.0"
|
||||||
|
declare -g NAME="rx3_vpn_adm"
|
||||||
|
declare -g HELP="usage: [-h | --help] | [-V | --version] | [-v | --verbose] {start | stop | restart | status | dump} [args...]"
|
||||||
|
|
||||||
|
declare -g MODE="DEFAULT"
|
||||||
|
declare -g VERBOSE="FALSE"
|
||||||
|
declare -g DRY_RUN="FALSE"
|
||||||
|
declare -g RETVAL=0
|
||||||
|
declare -g prog="rx3-vpn"
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
declare -g LOG=""
|
||||||
|
#declare -g LOG=":"
|
||||||
|
#declare -g LOG="echo"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Version Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_version_print()
|
||||||
|
{
|
||||||
|
version_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Help Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_help_print()
|
||||||
|
{
|
||||||
|
rva_version_print
|
||||||
|
help_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Arg Parse
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_args_parse()
|
||||||
|
{
|
||||||
|
tmp_args=$(getopt -o hvV --long help,verbose,version -n "${NAME}" -- "$@")
|
||||||
|
|
||||||
|
if [ $? != 0 ]; then echo "Terminating..." >&2; exit 1; fi
|
||||||
|
|
||||||
|
eval set -- "${tmp_args}"
|
||||||
|
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
# Options
|
||||||
|
-h|--help) MODE="EXIT"; rva_help_print; shift;;
|
||||||
|
-V|--version) MODE="EXIT"; rva_version_print; shift;;
|
||||||
|
-v|--verbose) VERBOSE="TRUE"; shift;;
|
||||||
|
|
||||||
|
# End of options
|
||||||
|
--) shift; break;;
|
||||||
|
*) echo "args_parse internal error [$1]!"; exit 1;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${MODE}" != "EXIT" ]]
|
||||||
|
then
|
||||||
|
if [[ "${#}" -lt "1" ]]
|
||||||
|
then
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Not enough args!"
|
||||||
|
rva_help_print
|
||||||
|
else
|
||||||
|
case "$1" in
|
||||||
|
start|stop|restart|status|dump)
|
||||||
|
MODE="$(echo "$1" | tr '[:lower:]' '[:upper:]')"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
MODE="EXIT"
|
||||||
|
|
||||||
|
echo_error "Invalid command: [$1]"
|
||||||
|
rva_help_print
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Start
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_start()
|
||||||
|
{
|
||||||
|
echo "Starting..."
|
||||||
|
|
||||||
|
if [ -r /var/lock/subsys/rx3-vpn ]
|
||||||
|
then
|
||||||
|
echo "already started"
|
||||||
|
RETVAL=0
|
||||||
|
else
|
||||||
|
vpn_start
|
||||||
|
|
||||||
|
RETVAL=$?
|
||||||
|
[ "${RETVAL}" = 0 ] && touch /var/lock/subsys/rx3-vpn
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Stop
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_stop()
|
||||||
|
{
|
||||||
|
echo "Stopping..."
|
||||||
|
|
||||||
|
if [ -r /var/lock/subsys/rx3-vpn ]
|
||||||
|
then
|
||||||
|
vpn_stop
|
||||||
|
|
||||||
|
RETVAL=$?
|
||||||
|
else
|
||||||
|
echo "already stopped"
|
||||||
|
RETVAL=0
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ "${RETVAL}" = 0 ] && rm -f /var/lock/subsys/rx3-vpn
|
||||||
|
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Status
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_status()
|
||||||
|
{
|
||||||
|
vpn_status
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Dump
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_dump()
|
||||||
|
{
|
||||||
|
vpn_job_tab_dump
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
rva_args_parse "$@"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if [[ "${MODE}" == "EXIT" ]]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
vpn_init
|
||||||
|
|
||||||
|
case "${MODE}" in
|
||||||
|
START)
|
||||||
|
rva_start
|
||||||
|
;;
|
||||||
|
|
||||||
|
STOP)
|
||||||
|
rva_stop
|
||||||
|
;;
|
||||||
|
|
||||||
|
RESTART)
|
||||||
|
rva_stop
|
||||||
|
sleep 1
|
||||||
|
rva_start
|
||||||
|
;;
|
||||||
|
|
||||||
|
STATUS)
|
||||||
|
rva_status
|
||||||
|
;;
|
||||||
|
|
||||||
|
DUMP)
|
||||||
|
rva_dump
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 {start|stop|restart|status|dump}"
|
||||||
|
RETVAL=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
vpn_deinit
|
||||||
|
|
||||||
|
exit ${RETVAL}
|
||||||
@@ -1,404 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
if [[ "${DEFAULT_BASH}" != "" ]]
|
|
||||||
then
|
|
||||||
return
|
|
||||||
else
|
|
||||||
declare -g DEFAULT_BASH=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Global Variable
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
declare -g LOG_FILE=""
|
|
||||||
declare -g LOG_LOCK=""
|
|
||||||
declare -g LOG_ECHO=""
|
|
||||||
declare -g LOG_TRACE="DISABLED"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Default Options
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
shopt -s extglob
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Print Version
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
version_print()
|
|
||||||
{
|
|
||||||
echo "$VERSION" | sed -e 's/.*: //' -e 's/-/ /' -e 's/_/\./g' -e 's/\$$//'
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Prin Help
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
help_print()
|
|
||||||
{
|
|
||||||
echo "${NAME} ${HELP}"
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Quote Str
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
quote_str()
|
|
||||||
{
|
|
||||||
local quoted=${1//\'/\'\\\'\'}
|
|
||||||
printf "'%s'" "$quoted"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Escape Str
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
escape_str()
|
|
||||||
{
|
|
||||||
echo "$*" | sed -e "s/\"/\\\\\"/g"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Line Echo
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
line_echo()
|
|
||||||
{
|
|
||||||
string="$1"
|
|
||||||
count="$2"
|
|
||||||
|
|
||||||
echo -en "\e[2K\r"
|
|
||||||
|
|
||||||
if [[ "${count}" != "" ]]
|
|
||||||
then
|
|
||||||
printf "%05d: %s" "${count}"
|
|
||||||
echo -en "${string}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Err Echo
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
err_echo()
|
|
||||||
{
|
|
||||||
echo "$@" 1>&2
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Exec CMD
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
exec_cmd()
|
|
||||||
{
|
|
||||||
cmd="$1"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${verbose}" == "true" ]]
|
|
||||||
then
|
|
||||||
echo "${cmd}" 1>&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${dry_run}" != "true" ]]
|
|
||||||
then
|
|
||||||
eval "${cmd}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# tab_assign
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
tab_assign()
|
|
||||||
{
|
|
||||||
declare -n ta_tab=$1
|
|
||||||
ta_key=$2
|
|
||||||
ta_value=$3
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${ta_value}" == "-" ]]
|
|
||||||
then
|
|
||||||
ta_value=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
ta_tab[${ta_key}]="${ta_value}"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# var_assign
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
var_assign()
|
|
||||||
{
|
|
||||||
declare -n va_var=$1
|
|
||||||
va_value=$2
|
|
||||||
va_mode=$3
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${va_value}" == "-" ]]
|
|
||||||
then
|
|
||||||
va_value=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${va_mode}" == "INC" ]]
|
|
||||||
then
|
|
||||||
va_var="${va_var} ${va_value}"
|
|
||||||
else
|
|
||||||
va_var="${va_value}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# file_dir_init
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
file_dir_init()
|
|
||||||
{
|
|
||||||
local File="$1"
|
|
||||||
local Owner="$2"
|
|
||||||
local Group="$3"
|
|
||||||
|
|
||||||
local dir
|
|
||||||
|
|
||||||
|
|
||||||
if [ ! -f ${File} ]
|
|
||||||
then
|
|
||||||
if [[ "$( id -u)" != "0" ]]
|
|
||||||
then
|
|
||||||
${ECHO} "Can't perform file init of: [${File}] as non root user!"
|
|
||||||
else
|
|
||||||
dir="$( dirname ${File})"
|
|
||||||
|
|
||||||
if [ ! -d ${dir} ]
|
|
||||||
then
|
|
||||||
${ECHO} "Initializing directory: [${dir}]"
|
|
||||||
|
|
||||||
mkdir ${dir}
|
|
||||||
chmod ug+rwx ${dir}
|
|
||||||
chown ${Owner}:${Group} ${dir}
|
|
||||||
fi
|
|
||||||
|
|
||||||
${ECHO} "Initializing file: [${File}]"
|
|
||||||
|
|
||||||
>${File}
|
|
||||||
chmod ug+rw ${File}
|
|
||||||
chown ${Owner}:${Group} ${File}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# file_lock
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
file_lock()
|
|
||||||
{
|
|
||||||
local file="$1"
|
|
||||||
local mode="$2"
|
|
||||||
local desc="$3"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ ( "${mode}" == "EXCLUSIVE" ) || ( "${mode}" == "WRITE" ) ]]
|
|
||||||
then
|
|
||||||
flag="-x"
|
|
||||||
else
|
|
||||||
flag="-s"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${desc}" == "" ]]
|
|
||||||
then
|
|
||||||
desc="9"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
eval "exec ${desc}<>\"\${file}\""
|
|
||||||
|
|
||||||
if ! flock ${flag} -w 5 ${desc}
|
|
||||||
then
|
|
||||||
err_echo "Failed to acquire [${mode}] lock on: [${file}]"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# file_unlock
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
file_unlock()
|
|
||||||
{
|
|
||||||
local desc="$1"
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${desc}" == "" ]]
|
|
||||||
then
|
|
||||||
desc="9"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
eval "exec ${desc}<&-"
|
|
||||||
eval "exec ${desc}>&-"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# log_set
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
log_set()
|
|
||||||
{
|
|
||||||
local log_file="$1"
|
|
||||||
local lock_file="$2"
|
|
||||||
local echo_function="$3"
|
|
||||||
local log_trace="$4"
|
|
||||||
|
|
||||||
|
|
||||||
LOG_FILE="${log_file}"
|
|
||||||
LOG_LOCK="${lock_file}"
|
|
||||||
LOG_ECHO="${echo_function}"
|
|
||||||
|
|
||||||
if [[ ${log_trace} != "" ]]
|
|
||||||
then
|
|
||||||
LOG_TRACE="${log_trace}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# log_print
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
log_print()
|
|
||||||
{
|
|
||||||
local log_file="$1"
|
|
||||||
local lock_file="$2"
|
|
||||||
local echo_function="$3"
|
|
||||||
local log_type="$4"
|
|
||||||
local log_prefix="$5"
|
|
||||||
|
|
||||||
|
|
||||||
shift; shift; shift; shift; shift
|
|
||||||
|
|
||||||
if [[ "${log_type}" != "TRA" ]] || [[ "${LOG_TRACE}" != "DISABLED" ]]
|
|
||||||
then
|
|
||||||
${echo_function} "($BASHPID):" "$*"
|
|
||||||
|
|
||||||
if [[ "${log_file}" != "" ]]
|
|
||||||
then
|
|
||||||
if [[ "${lock_file}" != "" ]]
|
|
||||||
then
|
|
||||||
file_lock "${lock_file}" WRITE 8
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf >> "${log_file}" "%s %9s %3s %16s %s\n" "$(date --rfc-3339=seconds -u)" "($BASHPID)" "${log_type}" "${log_prefix}:" "$*"
|
|
||||||
|
|
||||||
if [[ "${lock_file}" != "" ]]
|
|
||||||
then
|
|
||||||
file_unlock 8
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# log_trace
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
log_trace()
|
|
||||||
{
|
|
||||||
log_print "${LOG_FILE}" "${LOG_LOCK}" "${LOG_ECHO}" "TRA" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# log_info
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
log_info()
|
|
||||||
{
|
|
||||||
log_print "${LOG_FILE}" "${LOG_LOCK}" "${LOG_ECHO}" "INF" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# log_warning
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
log_warning()
|
|
||||||
{
|
|
||||||
log_print "${LOG_FILE}" "${LOG_LOCK}" "${LOG_ECHO}" "WRN" "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# log_error
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
log_error()
|
|
||||||
{
|
|
||||||
log_print "${LOG_FILE}" "${LOG_LOCK}" "${LOG_ECHO}" "ERR" "$@"
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
OPENVPN_DIR=/etc/openvpn
|
|
||||||
|
|
||||||
type=$1
|
|
||||||
host=$2
|
|
||||||
|
|
||||||
case "${type}"
|
|
||||||
in
|
|
||||||
"ca")
|
|
||||||
cat ${OPENVPN_DIR}/tls/certs/ca.crt
|
|
||||||
;;
|
|
||||||
|
|
||||||
"tc")
|
|
||||||
cat ${OPENVPN_DIR}/tls/private/tc.key
|
|
||||||
;;
|
|
||||||
|
|
||||||
"key")
|
|
||||||
cat ${OPENVPN_DIR}/tls/private/${host}.key
|
|
||||||
;;
|
|
||||||
|
|
||||||
"csr")
|
|
||||||
cat ${OPENVPN_DIR}/tls/certs/${host}.csr
|
|
||||||
;;
|
|
||||||
|
|
||||||
"crt")
|
|
||||||
cat ${OPENVPN_DIR}/tls/certs/${host}.crt
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
host=$1
|
|
||||||
zone=$2
|
|
||||||
ip=$3
|
|
||||||
ttl=$4
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
date="$(date --rfc-3339 seconds)"
|
|
||||||
|
|
||||||
(
|
|
||||||
echo "prereq yxrrset ${host}.${zone}. A"
|
|
||||||
echo "update delete ${host}.${zone}. A"
|
|
||||||
echo "update add ${host}.${zone}. ${ttl} A ${ip}"
|
|
||||||
echo "update delete ${host}.${zone}. TXT"
|
|
||||||
echo "update add ${host}.${zone}. ${ttl} TXT ${date}"
|
|
||||||
echo ""
|
|
||||||
) | nsupdate
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
#!/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!"
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
#!/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!"
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
#DEBUG=""
|
|
||||||
#DEBUG="echo"
|
|
||||||
#DEBUG=":"
|
|
||||||
|
|
||||||
#LOG=":"
|
|
||||||
#LOG="echo"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Includes
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
. /usr/local/lib/network.bash
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Global Variables
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#LOG_FILE=/var/log/openvpn/up-down.log
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Main
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Dev="$1"
|
|
||||||
Local_MTU="$2"
|
|
||||||
Remote_MTU="$3"
|
|
||||||
Local_Address="$4"
|
|
||||||
Local_Netmask="$5"
|
|
||||||
Phase="$6"
|
|
||||||
|
|
||||||
|
|
||||||
network_init
|
|
||||||
|
|
||||||
|
|
||||||
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_device_deinit "" "${Dev}"
|
|
||||||
|
|
||||||
log_trace "VPN-Down" "[${Dev}]: Done!"
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
dev=$1
|
|
||||||
|
|
||||||
if [[ "$1" != "" ]]
|
|
||||||
then
|
|
||||||
cat /var/lib/openvpn/$dev.status
|
|
||||||
else
|
|
||||||
awk '{print FILENAME ": " $0}' /var/lib/openvpn/*.status
|
|
||||||
fi
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
#!/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
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Dev="$1"
|
|
||||||
Local_MTU="$2"
|
|
||||||
Remote_MTU="$3"
|
|
||||||
Local_Address="$4"
|
|
||||||
Local_Netmask="$5"
|
|
||||||
Phase="$6"
|
|
||||||
|
|
||||||
|
|
||||||
network_init
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
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]"
|
|
||||||
|
|
||||||
network_device_init "" "${Dev}"
|
|
||||||
|
|
||||||
log_trace "VPN-Up" "[${Dev}]: Done!"
|
|
||||||
@@ -1,137 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
RETVAL=0
|
|
||||||
|
|
||||||
#DEBUG=""
|
|
||||||
#DEBUG="echo"
|
|
||||||
#DEBUG=":"
|
|
||||||
|
|
||||||
#LOG=":"
|
|
||||||
#LOG="echo"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Includes
|
|
||||||
#-----------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
. /usr/local/lib/vpn.bash
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Start
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
start()
|
|
||||||
{
|
|
||||||
echo "Starting..."
|
|
||||||
|
|
||||||
if [ -r /var/lock/subsys/rx3-vpn ]
|
|
||||||
then
|
|
||||||
echo "already started"
|
|
||||||
RETVAL=0
|
|
||||||
else
|
|
||||||
vpn_start
|
|
||||||
|
|
||||||
RETVAL=$?
|
|
||||||
[ "$RETVAL" = 0 ] && touch /var/lock/subsys/rx3-vpn
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Stop
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
stop()
|
|
||||||
{
|
|
||||||
echo "Stopping..."
|
|
||||||
|
|
||||||
if [ -r /var/lock/subsys/rx3-vpn ]
|
|
||||||
then
|
|
||||||
vpn_stop
|
|
||||||
|
|
||||||
RETVAL=$?
|
|
||||||
else
|
|
||||||
echo "already stopped"
|
|
||||||
RETVAL=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ "$RETVAL" = 0 ] && rm -f /var/lock/subsys/rx3-vpn
|
|
||||||
|
|
||||||
echo
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Status
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
status()
|
|
||||||
{
|
|
||||||
vpn_status
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Dump
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
dump()
|
|
||||||
{
|
|
||||||
vpn_job_tab_dump
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Main
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
vpn_init
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
start
|
|
||||||
;;
|
|
||||||
|
|
||||||
stop)
|
|
||||||
stop
|
|
||||||
;;
|
|
||||||
|
|
||||||
restart)
|
|
||||||
stop
|
|
||||||
sleep 1
|
|
||||||
start
|
|
||||||
;;
|
|
||||||
|
|
||||||
status)
|
|
||||||
status
|
|
||||||
;;
|
|
||||||
|
|
||||||
dump)
|
|
||||||
dump
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "Usage: $0 {start|stop|restart|status|dump}"
|
|
||||||
RETVAL=1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
vpn_deinit
|
|
||||||
|
|
||||||
exit $RETVAL
|
|
||||||
@@ -1,460 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
. /etc/sysconfig/rx3-ns
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Lookup Domain Owner ()
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Lookup_Domain_Owner ()
|
|
||||||
{
|
|
||||||
for ldo_blk in ${NS_LIST}
|
|
||||||
do
|
|
||||||
OIFS=${IFS}
|
|
||||||
IFS=:
|
|
||||||
set ${ldo_blk}
|
|
||||||
ldo_domain=$1
|
|
||||||
ldo_host=$2
|
|
||||||
ldo_owner=$3
|
|
||||||
IFS=${OIFS}
|
|
||||||
|
|
||||||
if [[ "${host}.${domain}" == "${ldo_host}.${ldo_domain}" ]]
|
|
||||||
then
|
|
||||||
echo ${ldo_owner}
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Header Print
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Header_Print ()
|
|
||||||
{
|
|
||||||
case "${format}"
|
|
||||||
in
|
|
||||||
"html")
|
|
||||||
echo "Content-type: text/html"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"
|
|
||||||
echo "<HTML>"
|
|
||||||
echo " <HEAD>"
|
|
||||||
echo " <META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">"
|
|
||||||
|
|
||||||
if [[ "${refresh}" == "yes" ]]
|
|
||||||
then
|
|
||||||
echo " <META http-equiv=\"Refresh\" content=\"300\">"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo " <META http-equiv=\"Pragma\" content=\"no-cache\">"
|
|
||||||
echo " <LINK REL=\"shortcut icon\" HREF=\"/favicon.ico\" TYPE=\"image/x-icon\">"
|
|
||||||
echo " <LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"/tdsots/default.css\">"
|
|
||||||
echo " <TITLE>Rx3 NS Admin: ${cmd_status}</Title>"
|
|
||||||
|
|
||||||
echo " </HEAD>"
|
|
||||||
echo " <BODY>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"txt")
|
|
||||||
echo "Content-disposition: attachment; filename=${file_name}"
|
|
||||||
echo "Content-type: text/plain"
|
|
||||||
echo ""
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Tailer
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Footer_Print ()
|
|
||||||
{
|
|
||||||
case "${format}"
|
|
||||||
in
|
|
||||||
"html")
|
|
||||||
echo " </BODY>"
|
|
||||||
echo ""
|
|
||||||
echo "</HTML>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Main
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Args
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
cmd=""
|
|
||||||
format=""
|
|
||||||
ip=""
|
|
||||||
host=""
|
|
||||||
domain=""
|
|
||||||
redirect=""
|
|
||||||
|
|
||||||
remote_ip="${REMOTE_ADDR}"
|
|
||||||
|
|
||||||
if [[ "${QUERY_STRING}" != "" ]]
|
|
||||||
then
|
|
||||||
OIFS=${IFS}
|
|
||||||
IFS="\&"
|
|
||||||
set ${QUERY_STRING}
|
|
||||||
IFS=${OIFS}
|
|
||||||
|
|
||||||
i=$#
|
|
||||||
|
|
||||||
while [[ "${i}" != 0 ]]
|
|
||||||
do
|
|
||||||
var=${1/=*/}
|
|
||||||
arg=${1/*=/}
|
|
||||||
|
|
||||||
case "${var}"
|
|
||||||
in
|
|
||||||
"format")
|
|
||||||
format=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"cmd")
|
|
||||||
cmd=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"host")
|
|
||||||
host=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"domain")
|
|
||||||
domain=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"ip")
|
|
||||||
ip=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"ttl")
|
|
||||||
ttl=${arg}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
shift
|
|
||||||
i=$((i - 1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${format}" == "" ]]
|
|
||||||
then
|
|
||||||
format="html"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Usage_Print
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Usage_Print ()
|
|
||||||
{
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
echo " <H2>Rx3 NS Admin Service Usage</H2>"
|
|
||||||
echo ""
|
|
||||||
echo " <table border="1" cols=1 width="95%" nosave align=\"CENTER\">"
|
|
||||||
echo " <tr>"
|
|
||||||
echo " <td>"
|
|
||||||
echo " <table border="0" cols=1 width="95%" nosave align=\"CENTER\">"
|
|
||||||
echo " <tr>"
|
|
||||||
echo " <td>"
|
|
||||||
echo " <pre>"
|
|
||||||
|
|
||||||
echo " <BR>"
|
|
||||||
echo " - cmd=address_get: Get the host IP address<br>"
|
|
||||||
echo " + [format=html|txt]: Output request format (Default to "html")<br>"
|
|
||||||
echo " + host=<Host Name>: Host name to show<br>"
|
|
||||||
echo " + domain=<Domaine Name>: Domain name of the host name<br>"
|
|
||||||
echo "<br>"
|
|
||||||
echo " - cmd=address_set: Set the host IP address<br>"
|
|
||||||
echo " + [format=html|txt]: Output request format (Default to "html")<br>"
|
|
||||||
echo " + host=<Host Name>: Host name to set<br>"
|
|
||||||
echo " + domain=<Domaine Name>: Domain name of the host name<br>"
|
|
||||||
echo " + [ip=<IP Address>]: IP address to be set (Default to requestor address)<br>"
|
|
||||||
echo " + [ttl=<TTL>]: TTL to be set (Default to 600)<br>"
|
|
||||||
echo "<br>"
|
|
||||||
echo " - Example: https://www.rx3.net/cgi-bin-private/ns-admin_board.cgi?cmd=address_get&host=vpn0&domain=vpn.rx3<br>"
|
|
||||||
|
|
||||||
echo " </pre>"
|
|
||||||
echo " </td>"
|
|
||||||
echo " </tr>"
|
|
||||||
echo " </table>"
|
|
||||||
echo " </td>"
|
|
||||||
echo " </tr>"
|
|
||||||
echo " </table>"
|
|
||||||
else
|
|
||||||
echo "Rx3 NS Service Usage:"
|
|
||||||
echo " - cmd=address_get: Get the host IP address"
|
|
||||||
echo " + [format=html|txt]: Output request format (Default to "html")"
|
|
||||||
echo " + host=<Host Name>: Host name to show"
|
|
||||||
echo " + domain=<Domaine Name>: Domain name of the host name"
|
|
||||||
echo ""
|
|
||||||
echo " - cmd=address_set: Set the host IP address"
|
|
||||||
echo " + [format=html|txt]: Output request format (Default to "html")"
|
|
||||||
echo " + host=<Host Name>: Host name to set"
|
|
||||||
echo " + domain=<Domaine Name>: Domain name of the host name"
|
|
||||||
echo " + [ip=<IP Address>]: IP address to be set (Default to requestor address)"
|
|
||||||
echo " + [ttl=<TTL>]: TTL to be set (Default to 600)<br>"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Main Board Print
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Main_Board_Print ()
|
|
||||||
{
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo ""
|
|
||||||
echo " <H1>Rx3 NS Admin Board</H1>"
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo ""
|
|
||||||
echo " <b>Date: $(/bin/date)</b><br>"
|
|
||||||
echo " </P>"
|
|
||||||
echo " <HR>"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
echo " <H2>Rx3 NS Status Board</H2>"
|
|
||||||
echo ""
|
|
||||||
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
|
||||||
echo " <TR class=\"header\"><TD class=\"header\">#</TD><TD>Domain</TD><TD>Host</TD><TD>Address</TD><TD>Owner</TD><TD>TTL</TD><TD>Date</TD></TR>"
|
|
||||||
else
|
|
||||||
echo "TABLE: RX3-NS_Status_Board"
|
|
||||||
echo "#;Domain;Host;Address;Owner;TTL;Date"
|
|
||||||
fi
|
|
||||||
|
|
||||||
idx=0
|
|
||||||
|
|
||||||
for blk in ${NS_LIST}
|
|
||||||
do
|
|
||||||
OIFS=${IFS}
|
|
||||||
IFS=:
|
|
||||||
set ${blk}
|
|
||||||
domain=$1
|
|
||||||
host=$2
|
|
||||||
owner=$3
|
|
||||||
IFS=${OIFS}
|
|
||||||
|
|
||||||
address=$(dig -t A ${host}.${domain}. | grep "^${host}.${domain}" | awk '{print $5}')
|
|
||||||
ttl=$(dig -t A ${host}.${domain}. | grep "^${host}.${domain}" | awk '{print $2}')
|
|
||||||
date=$(dig -t TXT ${host}.${domain}. | grep "^${host}.${domain}" | awk '{print $5 " " $6}' | sed -e "s/\"//g")
|
|
||||||
|
|
||||||
if [[ "${REMOTE_USER}" == "${owner}" ]]
|
|
||||||
then
|
|
||||||
class="default"
|
|
||||||
else
|
|
||||||
class="dark"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo "<TR class="${class}"><TD class=header>${idx}</TD><TD>${domain}</TD><TD>${host}</TD><TD>${address}</TD><TD>${owner}</TD><TD>${ttl}</TD><TD>${date}</TD></TR>"
|
|
||||||
else
|
|
||||||
echo "${domain};${host};${address};${owner};${ttl};${date}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
idx=$((${idx}+1))
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " </TABLE>"
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
Usage_Print
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Command Handler
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
case "${cmd}"
|
|
||||||
in
|
|
||||||
"")
|
|
||||||
cmd_status="OK"
|
|
||||||
refresh="yes"
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
|
|
||||||
Main_Board_Print
|
|
||||||
|
|
||||||
Footer_Print
|
|
||||||
;;
|
|
||||||
|
|
||||||
"address_set")
|
|
||||||
owner=$(Lookup_Domain_Owner)
|
|
||||||
|
|
||||||
if [[ "${owner}" != "" ]]
|
|
||||||
then
|
|
||||||
if [[ "${REMOTE_USER}" == "${owner}" ]]
|
|
||||||
then
|
|
||||||
if [[ "${ip}" == "" ]]
|
|
||||||
then
|
|
||||||
ip="${remote_ip}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${ttl}" == "" ]]
|
|
||||||
then
|
|
||||||
ttl="600"
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo /usr/local/sbin/ip_host_update ${host} ${domain} ${ip} ${ttl}
|
|
||||||
|
|
||||||
if [[ "$?" == 0 ]]
|
|
||||||
then
|
|
||||||
status="OK"
|
|
||||||
else
|
|
||||||
status="KO"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
status="KO - Not Authorized"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
status="KO - Domain not found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cmd_status="${cmd}: ${status}"
|
|
||||||
refresh="no"
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <table border="1" cols=1 width="95%" nosave align=\"CENTER\">"
|
|
||||||
echo " <tr>"
|
|
||||||
echo " <td>"
|
|
||||||
echo " <table border="0" cols=1 width="95%" nosave align=\"CENTER\">"
|
|
||||||
echo " <tr>"
|
|
||||||
echo " <td>"
|
|
||||||
echo " <pre>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Set $host.$domain. to ${ip} with TTL ${ttl}: ${status}"
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " </pre>"
|
|
||||||
echo " </td>"
|
|
||||||
echo " </tr>"
|
|
||||||
echo " </table>"
|
|
||||||
echo " </td>"
|
|
||||||
echo " </tr>"
|
|
||||||
echo " </table>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
Footer_Print
|
|
||||||
;;
|
|
||||||
|
|
||||||
"address_get")
|
|
||||||
|
|
||||||
owner=$(Lookup_Domain_Owner)
|
|
||||||
if [[ "${owner}" != "" ]]
|
|
||||||
then
|
|
||||||
# if [[ "${REMOTE_USER}" == "${owner}" ]]
|
|
||||||
# then
|
|
||||||
# host_info="$(host ${host}.${domain})"
|
|
||||||
host_info="$(dig -t ANY ${host}.${domain}.)"
|
|
||||||
|
|
||||||
if [[ "$?" == 0 ]]
|
|
||||||
then
|
|
||||||
status="OK"
|
|
||||||
else
|
|
||||||
status="KO"
|
|
||||||
fi
|
|
||||||
# else
|
|
||||||
# status="KO - Not Authorized"
|
|
||||||
# fi
|
|
||||||
else
|
|
||||||
status="KO - Domain not found"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cmd_status="${cmd}: ${status}"
|
|
||||||
refresh="no"
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <table border="1" cols=1 width="95%" nosave align=\"CENTER\">"
|
|
||||||
echo " <tr>"
|
|
||||||
echo " <td>"
|
|
||||||
echo " <table border="0" cols=1 width="95%" nosave align=\"CENTER\">"
|
|
||||||
echo " <tr>"
|
|
||||||
echo " <td>"
|
|
||||||
echo " <pre>"
|
|
||||||
|
|
||||||
echo "$host.$domain.: ${status}"
|
|
||||||
echo "<br>"
|
|
||||||
else
|
|
||||||
echo "$host.$domain.:"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "${host_info}"
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " </pre>"
|
|
||||||
echo " </td>"
|
|
||||||
echo " </tr>"
|
|
||||||
echo " </table>"
|
|
||||||
echo " </td>"
|
|
||||||
echo " </tr>"
|
|
||||||
echo " </table>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
Footer_Print
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
cmd_status="${cmd}: UNKNOWN_CMD"
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
Footer_Print
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -1,874 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
time_in=$(date +%s%N)
|
|
||||||
|
|
||||||
|
|
||||||
# No Log please
|
|
||||||
export LOG=""
|
|
||||||
|
|
||||||
. /usr/local/lib/network.bash
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Header Print
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Header_Print()
|
|
||||||
{
|
|
||||||
case "${format}"
|
|
||||||
in
|
|
||||||
"html")
|
|
||||||
echo "Content-type: text/html"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"
|
|
||||||
echo "<HTML>"
|
|
||||||
echo " <HEAD>"
|
|
||||||
echo " <META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">"
|
|
||||||
echo " <META http-equiv=\"Refresh\" content=\"300\">"
|
|
||||||
echo " <META http-equiv=\"Pragma\" content=\"no-cache\">"
|
|
||||||
echo " <LINK REL=\"shortcut icon\" HREF=\"/favicon.ico\" TYPE=\"image/x-icon\">"
|
|
||||||
echo " <LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"/tdsots/default.css\">"
|
|
||||||
|
|
||||||
if [[ "${cmd_status}" == "" ]]
|
|
||||||
then
|
|
||||||
echo " <TITLE>Rx3 VPN Admin Board</Title>"
|
|
||||||
else
|
|
||||||
echo " <TITLE>Rx3 VPN Admin Board: ${cmd_status}</Title>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${redirect}" != "" ]]
|
|
||||||
then
|
|
||||||
echo " <meta http-equiv=\"REFRESH\" content=\"1; URL=${redirect}\">"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo " </HEAD>"
|
|
||||||
echo " <BODY>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"csv")
|
|
||||||
echo "Content-type: text/csv"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "SOF"
|
|
||||||
|
|
||||||
if [[ "${redirect}" != "" ]]
|
|
||||||
then
|
|
||||||
echo "CMD: ${cmd_status}"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
"txt")
|
|
||||||
echo "Content-disposition: attachment; filename=${file_name}"
|
|
||||||
echo "Content-type: text/plain"
|
|
||||||
echo ""
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Tailer
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Footer_Print()
|
|
||||||
{
|
|
||||||
case "${format}"
|
|
||||||
in
|
|
||||||
"html")
|
|
||||||
echo " </BODY>"
|
|
||||||
echo ""
|
|
||||||
echo "</HTML>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"csv")
|
|
||||||
echo ""
|
|
||||||
echo "EOF"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Destination Status Board
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Destination_Status_Board()
|
|
||||||
{
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
echo " <H2>Destination Status Board</H2>"
|
|
||||||
echo ""
|
|
||||||
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
|
||||||
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
|
|
||||||
echo "TABLE: Destination_Status_Board"
|
|
||||||
echo "#;Name;Type;Device;Status;IP;Host Name;Config;Table;Bytes In;Bytes Out;UpTime"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
for dst_id in ${NETWORK_DST_ID_LIST}
|
|
||||||
do
|
|
||||||
network_dst_tab_get ${dst_id}
|
|
||||||
|
|
||||||
if [[ ${dst_status} == 0 ]]
|
|
||||||
then
|
|
||||||
dst_ip="-"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ( "${status}" == "" ) || ( "${status}" == "${dst_status}") ]]
|
|
||||||
then
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
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>"
|
|
||||||
|
|
||||||
case "${dst_status}"
|
|
||||||
in
|
|
||||||
"0")
|
|
||||||
echo -n "<TD><A HREF=\"?admin=${admin}&user=${user}&status=${dst_status}\"><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></A></TD>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"1")
|
|
||||||
echo -n "<TD><A HREF=\"?admin=${admin}&user=${user}&status=${dst_status}\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></A></TD>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"2")
|
|
||||||
echo -n "<TD><A HREF=\"?admin=${admin}&user=${user}&status=${dst_status}\"><IMG SRC=\"/icons/user-unready.png\" TITLE=\"Unready\" ALT=\"Unready\"></A></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
|
|
||||||
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
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " </TABLE>"
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Source Routing Board Line
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Source_Routing_Board_Line()
|
|
||||||
{
|
|
||||||
src_id=$1
|
|
||||||
|
|
||||||
network_src_tab_get ${src_id}
|
|
||||||
|
|
||||||
if [[ ( "${user}" == "") || ( "${user}" == "owner") || ( "${user}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
if [[ ( "${admin}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
class="default"
|
|
||||||
else
|
|
||||||
if [[ "${user}" == "owner" ]]
|
|
||||||
then
|
|
||||||
class="skip"
|
|
||||||
else
|
|
||||||
class="dark"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# user == user not owner of this line
|
|
||||||
|
|
||||||
class="skip"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ( "${status}" != "") && ( "${status}" != "${src_status}") ]]
|
|
||||||
then
|
|
||||||
class="skip"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${class}" != "skip" ]]
|
|
||||||
then
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo -n "<TR class="${class}"><TD class="header">${src_id}</TD>"
|
|
||||||
|
|
||||||
echo -n "<TD>${NETWORK_SRC_TYPE[${src_type}]}</TD><TD>${src_ip}</TD><TD>${src_host_name:--}</TD>"
|
|
||||||
|
|
||||||
echo -n "<TD>${src_device:--}</TD>"
|
|
||||||
|
|
||||||
case "${src_status}"
|
|
||||||
in
|
|
||||||
"0")
|
|
||||||
echo -n "<TD><A HREF=\"?admin=${admin}&user=${user}&status=${src_status}\"><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></A></TD>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"1")
|
|
||||||
echo -n "<TD><A HREF=\"?admin=${admin}&user=${user}&status=${src_status}\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></A></TD>"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"2")
|
|
||||||
echo -n "<TD><A HREF=\"?admin=${admin}&user=${user}&status=${src_status}\">-</A></TD>"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
echo -n "${src_id};${NETWORK_SRC_TYPE[${src_type}]};${src_ip};${src_host_name};${src_device};${src_status};"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
for dst_id in ${NETWORK_DST_ID_LIST}
|
|
||||||
do
|
|
||||||
network_dst_tab_get ${dst_id}
|
|
||||||
|
|
||||||
if [[ ( "${admin}" == "true") || ( "${dst_type}" != 1) ]]
|
|
||||||
then
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD><TABLE class=\"${class}\" BORDER=\"0\" WIDTH=\"100%\"><TR><TD class=\"half\">"
|
|
||||||
|
|
||||||
if [[ "${dst_table}" == "${src_table}" ]]
|
|
||||||
then
|
|
||||||
echo -n "<IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></TD><TD> "
|
|
||||||
else
|
|
||||||
echo -n "<IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></TD><TD>"
|
|
||||||
|
|
||||||
if [[ ( ${admin} == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
echo -n "<A HREF=\"?cmd=route_set&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&vpn=${dst_id}\"><IMG SRC=\"/icons/user-invisible.png\" TITLE=\"Activate\" ALT=\"Activate\"></A>"
|
|
||||||
else
|
|
||||||
echo -n " "
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n "</TD></TR></TABLE></TD>"
|
|
||||||
else
|
|
||||||
|
|
||||||
if [[ "${dst_table}" == "${src_table}" ]]
|
|
||||||
then
|
|
||||||
echo -n "1;"
|
|
||||||
else
|
|
||||||
echo -n "0;"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
if [[ "${port_range}" != "0" ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD>${src_port_range}</TD><TD>${src_port_start:--}</TD><TD>${src_port_end:--}</TD>"
|
|
||||||
else
|
|
||||||
echo -n "<TD>${src_port_range}</TD><TD>-</TD><TD>-</TD>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "<TD><A HREF=\"?admin=${admin}&user=${src_owner}&status=${status}\">${src_owner}</A></TD><TD>${src_bytes_received:--}</TD><TD>${src_bytes_sent:--}</TD><TD>${src_uptime:--}</TD><TD>${src_last_seen:--}</TD></TR>"
|
|
||||||
else
|
|
||||||
echo "${src_port_range};${src_port_start};${src_port_end};${src_owner};${src_bytes_received};${src_bytes_sent};${src_uptime};${src_last_seen}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Source Routing Board
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Source_Routing_Board()
|
|
||||||
{
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
echo " <H2>Source Routing Board</H2>"
|
|
||||||
echo ""
|
|
||||||
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
|
||||||
echo -n " <TR class="header"><TD class="header">#</TD><TD>Type</TD><TD>IP</TD><TD>Host Name</TD><TD>Device</TD><TD>Status</TD>"
|
|
||||||
else
|
|
||||||
echo "TABLE: Source_Routing_Board"
|
|
||||||
echo -n "#;Type;IP;Host Name;Status;Device;"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
for dst_id in ${NETWORK_DST_ID_LIST}
|
|
||||||
do
|
|
||||||
network_dst_tab_get ${dst_id}
|
|
||||||
|
|
||||||
if [[ ( "${admin}" == "true") || ( "${dst_type}" != 1) ]]
|
|
||||||
then
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD>${dst_name}</TD>"
|
|
||||||
else
|
|
||||||
echo -n "${dst_name};"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo "<TD>Port Range</TD><TD>From Port</TD><TD>To Port</TD><TD>Owner</TD><TD>Bytes In</TD><TD>Bytes Out</TD><TD>UpTime</TD><TD>Last Seen</TD></TR>"
|
|
||||||
else
|
|
||||||
echo "Port Range;From Port;To Port;Owner;Bytes In;Bytes Out;UpTime;Last Seen"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
for src_id in ${NETWORK_SRC_ID_LIST}
|
|
||||||
do
|
|
||||||
Source_Routing_Board_Line ${src_id}
|
|
||||||
done
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " </TABLE>"
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
else
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# OpenVPN Board
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
VPN_OpenVPN_Board()
|
|
||||||
{
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
echo " <H2>OpenVPN Board</H2>"
|
|
||||||
echo ""
|
|
||||||
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
|
||||||
echo " <TR class="header"><TD class="header" ROWSPAN=3>#</TD><TD ROWSPAN=3>IP</TD><TD ROWSPAN=3>Host Name</TD><TD COLSPAN=4>Configuration</TD><TD COLSPAN=5>Certificates</TD></TR><TR class=\"header\"><TD COLSPAN=2>Default Route VPN</TD><TD COLSPAN=2>No Default Route VPN</TD><TD ROWSPAN=2>CA Certificate (.crt)</TD><TD ROWSPAN=2>TC Certificate (.key)</TD><TD ROWSPAN=2>Private Key (.key)</TD><TD ROWSPAN=2>Cerificate Signing Request (.csr)</TD><TD ROWSPAN=2>Public Certificate (.crt)</TD></TR><TR class=\"header\"><TD>External Crt</TD><TD>Inline Crt</TD><TD>External Crt</TD><TD>Inline Crt</TD></TR>"
|
|
||||||
else
|
|
||||||
echo "TABLE: OpenVPN_Board"
|
|
||||||
echo "#;IP;Host Name;Certificate"
|
|
||||||
fi
|
|
||||||
|
|
||||||
idx=0
|
|
||||||
|
|
||||||
for src_id in ${NETWORK_SRC_ID_LIST}
|
|
||||||
do
|
|
||||||
network_src_tab_get ${src_id}
|
|
||||||
|
|
||||||
if [[ "${src_type}" == 2 ]]
|
|
||||||
then
|
|
||||||
if [[ ( "${user}" == "") || ( "${user}" == "owner") || ( "${user}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
if [[ ( "${admin}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
class="default"
|
|
||||||
else
|
|
||||||
if [[ "${user}" == "owner" ]]
|
|
||||||
then
|
|
||||||
class="skip"
|
|
||||||
else
|
|
||||||
class="dark"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# user == user not owner of this line
|
|
||||||
|
|
||||||
class="skip"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ( "${status}" != "") && ( "${status}" != "${src_status}") ]]
|
|
||||||
then
|
|
||||||
class="skip"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if [[ "${class}" != "skip" ]]
|
|
||||||
then
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo -n " <TR class=\"${class}\"><TD class=\"header\">${idx}</TD><TD>${src_ip}</TD><TD>${src_host_name}</TD>"
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&defroute=true&type=ext\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Default Route External Certificates\" ALT=\"Configuration External Certificates\"></A></TD>"
|
|
||||||
|
|
||||||
if [[ ( "${admin}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&defroute=true&type=inline\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Default Route Inline Certificates\" ALT=\"Configuration Inline Certificates\"></A></TD>"
|
|
||||||
else
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Inline Certificates\" ALT=\"Configuration Inline Certificates\"></TD>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&defroute=false&type=ext\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration NoDefault Route External Certificates\" ALT=\"Configuration External Certificates\"></A></TD>"
|
|
||||||
|
|
||||||
if [[ ( "${admin}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&defroute=false&type=inline\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration NoDefault Route Inline Certificates\" ALT=\"Configuration Inline Certificates\"></A></TD>"
|
|
||||||
else
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Inline Certificates\" ALT=\"Configuration Inline Certificates\"></TD>"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -n "${idx};${src_ip};${src_host_name}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&type=ca\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"CA Certificate\" ALT=\"CA Certificate\"></A></TD>"
|
|
||||||
|
|
||||||
if [[ ( "${admin}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&type=tc\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"TC Certificate\" ALT=\"TC Certificate\"></A></TD>"
|
|
||||||
|
|
||||||
if [[ -f /etc/openvpn/tls/certs/${src_host_name}.crt ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&type=key\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></A></TD>"
|
|
||||||
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&type=csr\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Certificate Signing Request\" ALT=\"Certificat Signing Request\"></A></TD>"
|
|
||||||
echo "<TD><A HREF=\"?cmd=cert_download&admin=${admin}&user=${user}&status=${status}&ip=${src_ip}&type=crt\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></A></TD></TR>"
|
|
||||||
else
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></TD>"
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Certificat Signing Request\" ALT=\"Certificat Signing Request\"></TD>"
|
|
||||||
echo "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></TD></TR>"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"TC Certificate\" ALT=\"TC Certificate\"></TD>"
|
|
||||||
|
|
||||||
if [[ -f /etc/openvpn/tls/certs/${src_host_name}.crt ]]
|
|
||||||
then
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></TD>"
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Certificat Signing Request\" ALT=\"Certificat Signing Request\"></TD>"
|
|
||||||
echo "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></TD></TR>"
|
|
||||||
else
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></TD>"
|
|
||||||
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Certificat Signing Request\" ALT=\"Certificat Signing Request\"></TD>"
|
|
||||||
echo "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></TD></TR>"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [[ -f /etc/openvpn/tls/certs/${src_host_name}.crt ]]
|
|
||||||
then
|
|
||||||
echo ";1"
|
|
||||||
else
|
|
||||||
echo ";0"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
idx=$(( ${idx} + 1))
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " </TABLE>"
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " </P>"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Main Board Print
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
Main_Board_Print()
|
|
||||||
{
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
if [[ "${admin}" == "true" ]]
|
|
||||||
then
|
|
||||||
admin_mode=" - Admin Mode"
|
|
||||||
else
|
|
||||||
admin_mode=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "${user}"
|
|
||||||
in
|
|
||||||
"")
|
|
||||||
user_mode="All"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"owner")
|
|
||||||
user_mode="My"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
user_mode="${user}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
case "${status}"
|
|
||||||
in
|
|
||||||
"")
|
|
||||||
status_mode="All"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"0")
|
|
||||||
status_mode="Down"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"1")
|
|
||||||
status_mode="UP"
|
|
||||||
;;
|
|
||||||
|
|
||||||
"2")
|
|
||||||
status_mode="Not Conected"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
status_mode="Unkwown"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
echo " <H1>VPN Admin Board: ${user_mode} VPN - ${status_mode} Status${admin_mode}</H1>"
|
|
||||||
|
|
||||||
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo ""
|
|
||||||
echo " <b>Date: $(/bin/date)</b><br>"
|
|
||||||
echo " </P>"
|
|
||||||
echo " <HR>"
|
|
||||||
echo ""
|
|
||||||
fi
|
|
||||||
|
|
||||||
Destination_Status_Board
|
|
||||||
Source_Routing_Board
|
|
||||||
VPN_OpenVPN_Board
|
|
||||||
|
|
||||||
if [[ "${format}" == "html" ]]
|
|
||||||
then
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo -n " "
|
|
||||||
|
|
||||||
if [[ " ${ADMIN_USER_LIST} " == *" ${REMOTE_USER} "* ]]
|
|
||||||
then
|
|
||||||
if [[ "${admin}" == "true" ]]
|
|
||||||
then
|
|
||||||
echo -n "<A HREF=\"?user=${user}&status=${status}\">Non Admin Mode</A>"
|
|
||||||
else
|
|
||||||
echo -n "<A HREF=\"?admin=true&user=${user}&status=${status}\">Admin Mode</A>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n " "
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${user}" != "" ]]
|
|
||||||
then
|
|
||||||
echo -n "<A HREF=\"?admin=${admin}&status=${status}\">All VPN</A>"
|
|
||||||
echo -n " "
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${status}" != "" ]]
|
|
||||||
then
|
|
||||||
echo -n "<A HREF=\"?admin=${admin}&user=${user}\">All Status</A>"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo " </P>"
|
|
||||||
|
|
||||||
time_out=$(date +%s%N)
|
|
||||||
elaps=$((${time_out} - ${time_in}))
|
|
||||||
elaps_sec=$((${elaps} / 1000000000))
|
|
||||||
elaps_mili=$(( ( ${elaps} / 1000000) - ( ${elaps_sec} * 1000)))
|
|
||||||
|
|
||||||
echo " <P>"
|
|
||||||
echo " <BR>"
|
|
||||||
echo " <BR>"
|
|
||||||
printf "Page generated in %d.%03d seconds" ${elaps_sec} ${elaps_mili}
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
echo " <HR>"
|
|
||||||
echo ""
|
|
||||||
echo " <P>"
|
|
||||||
echo " <A HREF=\"/tdsots/admin/\">Rx3 Admin</A>"
|
|
||||||
echo " </P>"
|
|
||||||
echo ""
|
|
||||||
echo " <HR>"
|
|
||||||
echo ""
|
|
||||||
echo " <P>"
|
|
||||||
echo " <A HREF=\"http://www.hertgen.com/anybrowser/\"> <IMG SRC=\"/images/anyb09.png\" ALT=\"Best Viewed With Any Browser\"></A>"
|
|
||||||
echo " <A HREF=\"http://validator.w3.org/check?uri=referer\"><IMG SRC=\"/images/valid-html401.png\" ALT=\"Valid HTML 4.01!\"></A>"
|
|
||||||
echo " <A HREF=\"http://jigsaw.w3.org/css-validator/\"> <IMG SRC=\"/images/valid-css.png\" ALT=\"Valid CSS!\"></A>"
|
|
||||||
echo " </P>"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Main
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Args
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
cmd=""
|
|
||||||
format=""
|
|
||||||
user=""
|
|
||||||
status=""
|
|
||||||
ip=""
|
|
||||||
vpn=""
|
|
||||||
type=""
|
|
||||||
redirect=""
|
|
||||||
cmd_status=""
|
|
||||||
admin=""
|
|
||||||
|
|
||||||
if [[ "${QUERY_STRING}" != "" ]]
|
|
||||||
then
|
|
||||||
OIFS=${IFS}
|
|
||||||
IFS="\&"
|
|
||||||
set ${QUERY_STRING}
|
|
||||||
IFS=${OIFS}
|
|
||||||
|
|
||||||
i=$#
|
|
||||||
|
|
||||||
while [[ "${i}" != 0 ]]
|
|
||||||
do
|
|
||||||
var=${1/=*/}
|
|
||||||
arg=${1/*=/}
|
|
||||||
|
|
||||||
case "${var}"
|
|
||||||
in
|
|
||||||
"cmd")
|
|
||||||
cmd=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"format")
|
|
||||||
format=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"admin")
|
|
||||||
admin=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"filter")
|
|
||||||
filter=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"user")
|
|
||||||
user=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"status")
|
|
||||||
status=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"ip")
|
|
||||||
ip=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"vpn")
|
|
||||||
vpn=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"type")
|
|
||||||
type=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"filename")
|
|
||||||
filename=${arg}
|
|
||||||
;;
|
|
||||||
|
|
||||||
"defroute")
|
|
||||||
defroute=${arg}
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
shift
|
|
||||||
i=$((i - 1))
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${format}" == "" ]]
|
|
||||||
then
|
|
||||||
format="html"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
# Command Handler
|
|
||||||
#--------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
network_init
|
|
||||||
|
|
||||||
#network_tab_dump
|
|
||||||
|
|
||||||
if [[ ( ${admin} == "true") && ( " ${ADMIN_USER_LIST} " != *" ${REMOTE_USER} "*) ]]
|
|
||||||
then
|
|
||||||
cmd_status="${cmd}: Admin NOT_AUTHORIZED"
|
|
||||||
|
|
||||||
redirect="?user=${user}&up=${up}"
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
Footer_Print
|
|
||||||
else
|
|
||||||
|
|
||||||
case "${cmd}"
|
|
||||||
in
|
|
||||||
"")
|
|
||||||
Header_Print
|
|
||||||
Main_Board_Print
|
|
||||||
Footer_Print
|
|
||||||
;;
|
|
||||||
|
|
||||||
"route_set")
|
|
||||||
network_src_tab_ip_lookup "${ip}"
|
|
||||||
network_src_tab_get "${src_id}"
|
|
||||||
|
|
||||||
network_dst_tab_get "${vpn}"
|
|
||||||
|
|
||||||
if [[ ( ${admin} == "true") || ( ( "${REMOTE_USER}" == "${src_owner}") && ( "${dst_type}" != 1)) ]]
|
|
||||||
then
|
|
||||||
sudo /usr/local/sbin/rx3_net_adm table_set ${ip} ${dst_table} 1>&2
|
|
||||||
|
|
||||||
if [[ "$?" == 0 ]]
|
|
||||||
then
|
|
||||||
cmd_status="route_set: OK"
|
|
||||||
else
|
|
||||||
cmd_status="route_set: KO"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
cmd_status="route_set: NOT_AUTHORIZED [${REMOTE_USER}]/[${src_owner}]/[${dst_type}]"
|
|
||||||
fi
|
|
||||||
|
|
||||||
redirect="?admin=${admin}&filter=${filter}"
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
Footer_Print
|
|
||||||
;;
|
|
||||||
|
|
||||||
"cert_download")
|
|
||||||
network_src_tab_ip_lookup "${ip}"
|
|
||||||
network_src_tab_get "${src_id}"
|
|
||||||
|
|
||||||
if [[ ( ${admin} == "true") || ( "${REMOTE_USER}" == "${src_owner}") || ( "${type}" == "ca") || ( "${type}" == "crt") ]]
|
|
||||||
then
|
|
||||||
cmd_status="cert_download: OK"
|
|
||||||
format="txt"
|
|
||||||
|
|
||||||
case "${type}"
|
|
||||||
in
|
|
||||||
"ca")
|
|
||||||
file_name="ca.crt"
|
|
||||||
host_name=""
|
|
||||||
;;
|
|
||||||
|
|
||||||
"tc")
|
|
||||||
file_name="tc.key"
|
|
||||||
host_name=""
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
host_name=$(host ${ip} | sed -e 's/.*domain name pointer //' -e 's/.$//')
|
|
||||||
file_name="${host_name}.${type}"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
sudo /usr/local/sbin/cert_dump ${type} ${host_name}
|
|
||||||
else
|
|
||||||
cmd_status="cert_download: NOT_AUTHORIZED"
|
|
||||||
|
|
||||||
redirect="?admin=${admin}&filter=${filter}"
|
|
||||||
|
|
||||||
format="html"
|
|
||||||
Header_Print
|
|
||||||
Footer_Print
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
"config_download")
|
|
||||||
network_src_tab_ip_lookup "${ip}"
|
|
||||||
network_src_tab_get "${src_id}"
|
|
||||||
|
|
||||||
if [[ ( ${admin} == "true") || ( "${REMOTE_USER}" == "${src_owner}") || ( "${type}" == "ext") ]]
|
|
||||||
then
|
|
||||||
cmd_status="config_download: OK"
|
|
||||||
|
|
||||||
host_name=$(host ${ip} | sed -e 's/.*domain name pointer //' -e 's/.$//')
|
|
||||||
template_name="rx3-client.ovpn"
|
|
||||||
|
|
||||||
if [[ "${defroute}" == "false" ]]
|
|
||||||
then
|
|
||||||
defroute_pipe="sed s/#pull-filter/pull-filter/"
|
|
||||||
route_type="nodefroute"
|
|
||||||
else
|
|
||||||
defroute_pipe="cat"
|
|
||||||
route_type="defroute"
|
|
||||||
fi
|
|
||||||
|
|
||||||
format="txt"
|
|
||||||
|
|
||||||
if [[ "${type}" == "ext" ]]
|
|
||||||
then
|
|
||||||
file_name="${host_name}-${route_type}-external.ovpn"
|
|
||||||
Header_Print
|
|
||||||
|
|
||||||
sed </etc/openvpn/template/${template_name} -e "s/CLIENT_FQDN/${host_name}/g" | ${defroute_pipe}
|
|
||||||
else
|
|
||||||
file_name="${host_name}-${route_type}-inline.ovpn"
|
|
||||||
Header_Print
|
|
||||||
|
|
||||||
eval "echo \"$( sed </etc/openvpn/template/${template_name} -e "s/ca tls\/certs\/ca.crt/\$(echo \"<ca>\"; sudo \/usr\/local\/sbin\/cert_dump ca; echo \"<\/ca>\")/" -e "s/cert tls\/certs\/CLIENT_FQDN.crt/\$(echo \"<cert>\"; sudo \/usr\/local\/sbin\/cert_dump crt CLIENT_FQDN; echo \"<\/cert>\")/" -e "s/key tls\/private\/CLIENT_FQDN.key/\$(echo \"<key>\"; sudo \/usr\/local\/sbin\/cert_dump key CLIENT_FQDN; echo \"<\/key>\")/" -e "s/tls-crypt tls\/private\/tc.key/\$(echo \"<tls-crypt>\"; sudo \/usr\/local\/sbin\/cert_dump tc; echo \"<\/tls-crypt>\")/" -e "s/CLIENT_FQDN/${host_name}/g")\"" | ${defroute_pipe}
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
cmd_status="config_download: NOT_AUTHORIZED"
|
|
||||||
|
|
||||||
redirect="?admin=${admin}&filter=${filter}"
|
|
||||||
|
|
||||||
format="html"
|
|
||||||
Header_Print
|
|
||||||
Footer_Print
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
cmd_status="${cmd}: UNKNOWN_CMD"
|
|
||||||
|
|
||||||
Header_Print
|
|
||||||
Footer_Print
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
network_deinit
|
|
||||||
534
www/cgi-bin/ns-admin_board.cgi
Executable file
534
www/cgi-bin/ns-admin_board.cgi
Executable file
@@ -0,0 +1,534 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 NS Admin Board CGI
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/dns.bash"
|
||||||
|
|
||||||
|
. /etc/sysconfig/rx3-ns # To be removed?
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.2.0"
|
||||||
|
declare -g NAME="ns-admin_board.cgi"
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
# No Log please
|
||||||
|
export LOG=""
|
||||||
|
|
||||||
|
declare -g CMD=""
|
||||||
|
declare -g FORMAT=""
|
||||||
|
declare -g IP=""
|
||||||
|
declare -g HOST=""
|
||||||
|
declare -g DOMAIN=""
|
||||||
|
declare -g REDIRECT=""
|
||||||
|
declare -g CMD_STATUS=""
|
||||||
|
declare -g REFRESH=""
|
||||||
|
declare -g TTL=""
|
||||||
|
declare -g STATUS=""
|
||||||
|
declare -g FILE_NAME=""
|
||||||
|
declare -g REMOTE_IP="${REMOTE_ADDR}"
|
||||||
|
declare -g HOST_INFO=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Lookup Domain Owner
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_lookup_domain_owner()
|
||||||
|
{
|
||||||
|
local ldo_blk
|
||||||
|
local ldo_domain
|
||||||
|
local ldo_host
|
||||||
|
local ldo_owner
|
||||||
|
local OIFS
|
||||||
|
|
||||||
|
for ldo_blk in ${NS_LIST}
|
||||||
|
do
|
||||||
|
OIFS="${IFS}"
|
||||||
|
IFS=":"
|
||||||
|
set ${ldo_blk}
|
||||||
|
ldo_domain="$1"
|
||||||
|
ldo_host="$2"
|
||||||
|
ldo_owner="$3"
|
||||||
|
IFS="${OIFS}"
|
||||||
|
|
||||||
|
if [[ "${HOST}.${DOMAIN}" == "${ldo_host}.${ldo_domain}" ]]
|
||||||
|
then
|
||||||
|
echo "${ldo_owner}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Header Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_header_print()
|
||||||
|
{
|
||||||
|
case "${FORMAT}"
|
||||||
|
in
|
||||||
|
"html")
|
||||||
|
echo "Content-type: text/html"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"
|
||||||
|
echo "<HTML>"
|
||||||
|
echo " <HEAD>"
|
||||||
|
echo " <META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">"
|
||||||
|
|
||||||
|
if [[ "${REFRESH}" == "yes" ]]
|
||||||
|
then
|
||||||
|
echo " <META http-equiv=\"Refresh\" content=\"300\">"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " <META http-equiv=\"Pragma\" content=\"no-cache\">"
|
||||||
|
echo " <LINK REL=\"shortcut icon\" HREF=\"/favicon.ico\" TYPE=\"image/x-icon\">"
|
||||||
|
echo " <LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"/tdsots/default.css\">"
|
||||||
|
echo " <TITLE>Rx3 NS Admin: ${CMD_STATUS}</Title>"
|
||||||
|
echo " </HEAD>"
|
||||||
|
echo " <BODY>"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"txt")
|
||||||
|
echo "Content-disposition: attachment; filename=${FILE_NAME}"
|
||||||
|
echo "Content-type: text/plain"
|
||||||
|
echo ""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Footer Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_footer_print()
|
||||||
|
{
|
||||||
|
case "${FORMAT}"
|
||||||
|
in
|
||||||
|
"html")
|
||||||
|
echo " </BODY>"
|
||||||
|
echo ""
|
||||||
|
echo "</HTML>"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Usage Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_usage_print()
|
||||||
|
{
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
echo " <H2>Rx3 NS Admin Service Usage</H2>"
|
||||||
|
echo ""
|
||||||
|
echo " <TABLE BORDER=\"1\" WIDTH=\"95%\" ALIGN=\"CENTER\">"
|
||||||
|
echo " <TR><TD>"
|
||||||
|
echo " <TABLE BORDER=\"0\" WIDTH=\"95%\" ALIGN=\"CENTER\">"
|
||||||
|
echo " <TR><TD>"
|
||||||
|
echo " <PRE>"
|
||||||
|
echo " - cmd=address_get: Get the host IP address"
|
||||||
|
echo " + [format=html|txt]: Output request format (Default to html)"
|
||||||
|
echo " + host=<Host Name>: Host name to show"
|
||||||
|
echo " + domain=<Domain Name>: Domain name of the host name"
|
||||||
|
echo ""
|
||||||
|
echo " - cmd=address_set: Set the host IP address"
|
||||||
|
echo " + [format=html|txt]: Output request format (Default to html)"
|
||||||
|
echo " + host=<Host Name>: Host name to set"
|
||||||
|
echo " + domain=<Domain Name>: Domain name of the host name"
|
||||||
|
echo " + [ip=<IP Address>]: IP address to be set (Default to requestor address)"
|
||||||
|
echo " + [ttl=<TTL>]: TTL to be set (Default to 600)"
|
||||||
|
echo ""
|
||||||
|
echo " - Example: https://www.rx3.net/cgi-bin-private/ns-admin_board.cgi?cmd=address_get&host=vpn0&domain=vpn.rx3"
|
||||||
|
echo " </PRE>"
|
||||||
|
echo " </TD></TR>"
|
||||||
|
echo " </TABLE>"
|
||||||
|
echo " </TD></TR>"
|
||||||
|
echo " </TABLE>"
|
||||||
|
else
|
||||||
|
echo "Rx3 NS Service Usage:"
|
||||||
|
echo " - cmd=address_get: Get the host IP address"
|
||||||
|
echo " + [format=html|txt]: Output request format (Default to html)"
|
||||||
|
echo " + host=<Host Name>: Host name to show"
|
||||||
|
echo " + domain=<Domain Name>: Domain name of the host name"
|
||||||
|
echo ""
|
||||||
|
echo " - cmd=address_set: Set the host IP address"
|
||||||
|
echo " + [format=html|txt]: Output request format (Default to html)"
|
||||||
|
echo " + host=<Host Name>: Host name to set"
|
||||||
|
echo " + domain=<Domain Name>: Domain name of the host name"
|
||||||
|
echo " + [ip=<IP Address>]: IP address to be set (Default to requestor address)"
|
||||||
|
echo " + [ttl=<TTL>]: TTL to be set (Default to 600)"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Result Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_result_print()
|
||||||
|
{
|
||||||
|
local message="$1"
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " <TABLE BORDER=\"1\" WIDTH=\"95%\" ALIGN=\"CENTER\">"
|
||||||
|
echo " <TR><TD>"
|
||||||
|
echo " <TABLE BORDER=\"0\" WIDTH=\"95%\" ALIGN=\"CENTER\">"
|
||||||
|
echo " <TR><TD>"
|
||||||
|
echo " <PRE>"
|
||||||
|
echo "${message}"
|
||||||
|
echo " </PRE>"
|
||||||
|
echo " </TD></TR>"
|
||||||
|
echo " </TABLE>"
|
||||||
|
echo " </TD></TR>"
|
||||||
|
echo " </TABLE>"
|
||||||
|
else
|
||||||
|
echo "${message}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main Board Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_main_board_print()
|
||||||
|
{
|
||||||
|
local blk
|
||||||
|
local domain
|
||||||
|
local host
|
||||||
|
local owner
|
||||||
|
local address
|
||||||
|
local ttl
|
||||||
|
local date
|
||||||
|
local class
|
||||||
|
local idx=0
|
||||||
|
local OIFS
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
echo " <H1>Rx3 NS Admin Board</H1>"
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo ""
|
||||||
|
echo " <b>Date: $(/bin/date)</b><br>"
|
||||||
|
echo " </P>"
|
||||||
|
echo " <HR>"
|
||||||
|
echo ""
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
echo " <H2>Rx3 NS Status Board</H2>"
|
||||||
|
echo ""
|
||||||
|
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
||||||
|
echo " <TR class=\"header\"><TD class=\"header\">#</TD><TD>Domain</TD><TD>Host</TD><TD>Address</TD><TD>Owner</TD><TD>TTL</TD><TD>Date</TD></TR>"
|
||||||
|
else
|
||||||
|
echo "TABLE: RX3-NS_Status_Board"
|
||||||
|
echo "#;Domain;Host;Address;Owner;TTL;Date"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for blk in ${NS_LIST}
|
||||||
|
do
|
||||||
|
OIFS="${IFS}"
|
||||||
|
IFS=":"
|
||||||
|
set ${blk}
|
||||||
|
domain="$1"
|
||||||
|
host="$2"
|
||||||
|
owner="$3"
|
||||||
|
IFS="${OIFS}"
|
||||||
|
|
||||||
|
address="$( dig -t A "${host}.${domain}." | grep "^${host}.${domain}" | awk '{print $5}')"
|
||||||
|
ttl="$( dig -t A "${host}.${domain}." | grep "^${host}.${domain}" | awk '{print $2}')"
|
||||||
|
date="$( dig -t TXT "${host}.${domain}." | grep "^${host}.${domain}" | awk '{print $5 " " $6}' | sed -e 's/\"//g')"
|
||||||
|
|
||||||
|
if [[ "${REMOTE_USER}" == "${owner}" ]]
|
||||||
|
then
|
||||||
|
class="default"
|
||||||
|
else
|
||||||
|
class="dark"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " <TR class=\"${class}\"><TD class=\"header\">${idx}</TD><TD>${domain}</TD><TD>${host}</TD><TD>${address}</TD><TD>${owner}</TD><TD>${ttl}</TD><TD>${date}</TD></TR>"
|
||||||
|
else
|
||||||
|
echo "${domain};${host};${address};${owner};${ttl};${date}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
idx=$(( idx + 1 ))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " </TABLE>"
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
nab_usage_print
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Query String Parse
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_query_string_parse()
|
||||||
|
{
|
||||||
|
local var
|
||||||
|
local arg
|
||||||
|
local i
|
||||||
|
|
||||||
|
CMD=""
|
||||||
|
FORMAT=""
|
||||||
|
IP=""
|
||||||
|
HOST=""
|
||||||
|
DOMAIN=""
|
||||||
|
TTL=""
|
||||||
|
|
||||||
|
if [[ "${QUERY_STRING}" != "" ]]
|
||||||
|
then
|
||||||
|
local OIFS="${IFS}"
|
||||||
|
IFS="&"
|
||||||
|
set ${QUERY_STRING}
|
||||||
|
IFS="${OIFS}"
|
||||||
|
|
||||||
|
i=$#
|
||||||
|
|
||||||
|
while [[ "${i}" != "0" ]]
|
||||||
|
do
|
||||||
|
var="${1/=*/}"
|
||||||
|
arg="${1/*=/}"
|
||||||
|
|
||||||
|
case "${var}"
|
||||||
|
in
|
||||||
|
"cmd")
|
||||||
|
CMD="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"format")
|
||||||
|
FORMAT="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"host")
|
||||||
|
HOST="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"domain")
|
||||||
|
DOMAIN="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"ip")
|
||||||
|
IP="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"ttl")
|
||||||
|
TTL="${arg}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
i=$(( i - 1 ))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "" ]]
|
||||||
|
then
|
||||||
|
FORMAT="html"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Command Handler
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_command_handler()
|
||||||
|
{
|
||||||
|
local owner
|
||||||
|
local status
|
||||||
|
|
||||||
|
case "${CMD}"
|
||||||
|
in
|
||||||
|
"")
|
||||||
|
CMD_STATUS="OK"
|
||||||
|
REFRESH="yes"
|
||||||
|
|
||||||
|
nab_header_print
|
||||||
|
nab_main_board_print
|
||||||
|
nab_footer_print
|
||||||
|
;;
|
||||||
|
|
||||||
|
"address_set")
|
||||||
|
owner="$( nab_lookup_domain_owner)"
|
||||||
|
|
||||||
|
if [[ "${owner}" != "" ]]
|
||||||
|
then
|
||||||
|
if [[ "${REMOTE_USER}" == "${owner}" ]]
|
||||||
|
then
|
||||||
|
if [[ "${IP}" == "" ]]
|
||||||
|
then
|
||||||
|
IP="${REMOTE_IP}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${TTL}" == "" ]]
|
||||||
|
then
|
||||||
|
TTL="600"
|
||||||
|
fi
|
||||||
|
|
||||||
|
dns_host_update "${HOST}" "${DOMAIN}" "${IP}" "${TTL}"
|
||||||
|
|
||||||
|
if [[ "$?" == "0" ]]
|
||||||
|
then
|
||||||
|
status="OK"
|
||||||
|
else
|
||||||
|
status="KO"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
status="KO - Not Authorized"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
status="KO - Domain not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CMD_STATUS="${CMD}: ${status}"
|
||||||
|
REFRESH="no"
|
||||||
|
|
||||||
|
nab_header_print
|
||||||
|
nab_result_print "Set ${HOST}.${DOMAIN}. to ${IP} with TTL ${TTL}: ${status}"
|
||||||
|
nab_footer_print
|
||||||
|
;;
|
||||||
|
|
||||||
|
"address_get")
|
||||||
|
owner="$( nab_lookup_domain_owner)"
|
||||||
|
|
||||||
|
if [[ "${owner}" != "" ]]
|
||||||
|
then
|
||||||
|
HOST_INFO="$( dig -t ANY "${HOST}.${DOMAIN}.")"
|
||||||
|
|
||||||
|
if [[ "$?" == "0" ]]
|
||||||
|
then
|
||||||
|
status="OK"
|
||||||
|
else
|
||||||
|
status="KO"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
status="KO - Domain not found"
|
||||||
|
fi
|
||||||
|
|
||||||
|
CMD_STATUS="${CMD}: ${status}"
|
||||||
|
REFRESH="no"
|
||||||
|
|
||||||
|
nab_header_print
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
nab_result_print "${HOST}.${DOMAIN}.: ${status}<br>
|
||||||
|
${HOST_INFO}"
|
||||||
|
else
|
||||||
|
echo "${HOST}.${DOMAIN}.:"
|
||||||
|
echo ""
|
||||||
|
echo "${HOST_INFO}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
nab_footer_print
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
CMD_STATUS="${CMD}: UNKNOWN_CMD"
|
||||||
|
|
||||||
|
nab_header_print
|
||||||
|
nab_footer_print
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
nab_query_string_parse
|
||||||
|
|
||||||
|
dns_init
|
||||||
|
|
||||||
|
nab_command_handler
|
||||||
|
|
||||||
|
dns_deinit
|
||||||
961
www/cgi-bin/vpn-admin_board.cgi
Executable file
961
www/cgi-bin/vpn-admin_board.cgi
Executable file
@@ -0,0 +1,961 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
#
|
||||||
|
# Rx3 VPN Admin Board CGI
|
||||||
|
#
|
||||||
|
# Copyright (C) 2025-2026 Arnaud G. GIBERT
|
||||||
|
# mailto:arnaud@rx3.net
|
||||||
|
#
|
||||||
|
# This is free software: you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU Lesser General Public License as published
|
||||||
|
# by the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Lesser General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Lesser General Public
|
||||||
|
# License along with this program; If not, see
|
||||||
|
# <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Includes
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
: "${RX3_LIB_DIR:=/usr/lib/rx3}"
|
||||||
|
. "${RX3_LIB_DIR}/network.bash"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Global Variables
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
declare -g VERSION="1.0.0"
|
||||||
|
declare -g NAME="vpn-admin_board.cgi"
|
||||||
|
|
||||||
|
declare -g DEBUG=""
|
||||||
|
#declare -g DEBUG="echo"
|
||||||
|
#declare -g DEBUG=":"
|
||||||
|
|
||||||
|
# No Log please
|
||||||
|
export LOG=""
|
||||||
|
|
||||||
|
declare -g TIME_IN=$(date +%s%N)
|
||||||
|
declare -g CMD=""
|
||||||
|
declare -g FORMAT=""
|
||||||
|
declare -g USER=""
|
||||||
|
declare -g STATUS=""
|
||||||
|
declare -g IP=""
|
||||||
|
declare -g VPN=""
|
||||||
|
declare -g TYPE=""
|
||||||
|
declare -g REDIRECT=""
|
||||||
|
declare -g CMD_STATUS=""
|
||||||
|
declare -g ADMIN=""
|
||||||
|
declare -g FILTER=""
|
||||||
|
declare -g DEFROUTE=""
|
||||||
|
declare -g FILENAME=""
|
||||||
|
declare -g FILE_NAME=""
|
||||||
|
declare -g HOST_NAME=""
|
||||||
|
declare -g ADMIN_MODE=""
|
||||||
|
declare -g USER_MODE=""
|
||||||
|
declare -g STATUS_MODE=""
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Header Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_header_print()
|
||||||
|
{
|
||||||
|
case "${FORMAT}"
|
||||||
|
in
|
||||||
|
"html")
|
||||||
|
echo "Content-type: text/html"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"
|
||||||
|
echo "<HTML>"
|
||||||
|
echo " <HEAD>"
|
||||||
|
echo " <META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=iso-8859-1\">"
|
||||||
|
echo " <META http-equiv=\"Refresh\" content=\"300\">"
|
||||||
|
echo " <META http-equiv=\"Pragma\" content=\"no-cache\">"
|
||||||
|
echo " <LINK REL=\"shortcut icon\" HREF=\"/favicon.ico\" TYPE=\"image/x-icon\">"
|
||||||
|
echo " <LINK REL=\"stylesheet\" TYPE=\"text/css\" HREF=\"/tdsots/default.css\">"
|
||||||
|
|
||||||
|
if [[ "${CMD_STATUS}" == "" ]]
|
||||||
|
then
|
||||||
|
echo " <TITLE>Rx3 VPN Admin Board</Title>"
|
||||||
|
else
|
||||||
|
echo " <TITLE>Rx3 VPN Admin Board: ${CMD_STATUS}</Title>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${REDIRECT}" != "" ]]
|
||||||
|
then
|
||||||
|
echo " <meta http-equiv=\"REFRESH\" content=\"1; URL=${REDIRECT}\">"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " </HEAD>"
|
||||||
|
echo " <BODY>"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"csv")
|
||||||
|
echo "Content-type: text/csv"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "SOF"
|
||||||
|
|
||||||
|
if [[ "${REDIRECT}" != "" ]]
|
||||||
|
then
|
||||||
|
echo "CMD: ${CMD_STATUS}"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
"txt")
|
||||||
|
echo "Content-disposition: attachment; filename=${FILE_NAME}"
|
||||||
|
echo "Content-type: text/plain"
|
||||||
|
echo ""
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Footer Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_footer_print()
|
||||||
|
{
|
||||||
|
case "${FORMAT}"
|
||||||
|
in
|
||||||
|
"html")
|
||||||
|
echo " </BODY>"
|
||||||
|
echo ""
|
||||||
|
echo "</HTML>"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"csv")
|
||||||
|
echo ""
|
||||||
|
echo "EOF"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Destination Status Board
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_destination_status_board()
|
||||||
|
{
|
||||||
|
local dst_id
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
echo " <H2>Destination Status Board</H2>"
|
||||||
|
echo ""
|
||||||
|
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
||||||
|
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
|
||||||
|
echo "TABLE: Destination_Status_Board"
|
||||||
|
echo "#;Name;Type;Device;Status;IP;Host Name;Config;Table;Bytes In;Bytes Out;UpTime"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for dst_id in ${NETWORK_DST_ID_LIST}
|
||||||
|
do
|
||||||
|
network_dst_tab_get "${dst_id}"
|
||||||
|
|
||||||
|
if [[ "${dst_status}" == "0" ]]
|
||||||
|
then
|
||||||
|
dst_ip="-"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ( "${STATUS}" == "" ) || ( "${STATUS}" == "${dst_status}") ]]
|
||||||
|
then
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
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>"
|
||||||
|
|
||||||
|
case "${dst_status}"
|
||||||
|
in
|
||||||
|
"0")
|
||||||
|
echo -n "<TD><A HREF=\"?admin=${ADMIN}&user=${USER}&status=${dst_status}\"><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></A></TD>"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"1")
|
||||||
|
echo -n "<TD><A HREF=\"?admin=${ADMIN}&user=${USER}&status=${dst_status}\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></A></TD>"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"2")
|
||||||
|
echo -n "<TD><A HREF=\"?admin=${ADMIN}&user=${USER}&status=${dst_status}\"><IMG SRC=\"/icons/user-unready.png\" TITLE=\"Unready\" ALT=\"Unready\"></A></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></TR>"
|
||||||
|
else
|
||||||
|
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
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " </TABLE>"
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Source Routing Board Line
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_source_routing_board_line()
|
||||||
|
{
|
||||||
|
local src_id="$1"
|
||||||
|
local class
|
||||||
|
local dst_id
|
||||||
|
|
||||||
|
network_src_tab_get "${src_id}"
|
||||||
|
|
||||||
|
if [[ ( "${USER}" == "" ) || ( "${USER}" == "owner") || ( "${USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
class="default"
|
||||||
|
else
|
||||||
|
if [[ "${USER}" == "owner" ]]
|
||||||
|
then
|
||||||
|
class="skip"
|
||||||
|
else
|
||||||
|
class="dark"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
class="skip"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ( "${STATUS}" != "" ) && ( "${STATUS}" != "${src_status}") ]]
|
||||||
|
then
|
||||||
|
class="skip"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${class}" != "skip" ]]
|
||||||
|
then
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo -n " <TR class=\"${class}\"><TD class=\"header\">${src_id}</TD>"
|
||||||
|
echo -n "<TD>${NETWORK_SRC_TYPE[${src_type}]}</TD><TD>${src_ip}</TD><TD>${src_host_name:--}</TD>"
|
||||||
|
echo -n "<TD>${src_device:--}</TD>"
|
||||||
|
|
||||||
|
case "${src_status}"
|
||||||
|
in
|
||||||
|
"0")
|
||||||
|
echo -n "<TD><A HREF=\"?admin=${ADMIN}&user=${USER}&status=${src_status}\"><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></A></TD>"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"1")
|
||||||
|
echo -n "<TD><A HREF=\"?admin=${ADMIN}&user=${USER}&status=${src_status}\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></A></TD>"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"2")
|
||||||
|
echo -n "<TD><A HREF=\"?admin=${ADMIN}&user=${USER}&status=${src_status}\">-</A></TD>"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
echo -n "${src_id};${NETWORK_SRC_TYPE[${src_type}]};${src_ip};${src_host_name};${src_device};${src_status};"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for dst_id in ${NETWORK_DST_ID_LIST}
|
||||||
|
do
|
||||||
|
network_dst_tab_get "${dst_id}"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${dst_type}" != "1") ]]
|
||||||
|
then
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD><TABLE class=\"${class}\" BORDER=\"0\" WIDTH=\"100%\"><TR><TD class=\"half\">"
|
||||||
|
|
||||||
|
if [[ "${dst_table}" == "${src_table}" ]]
|
||||||
|
then
|
||||||
|
echo -n "<IMG SRC=\"/icons/user-online.png\" TITLE=\"Up\" ALT=\"Up\"></TD><TD> "
|
||||||
|
else
|
||||||
|
echo -n "<IMG SRC=\"/icons/user-busy.png\" TITLE=\"Down\" ALT=\"Down\"></TD><TD>"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
echo -n "<A HREF=\"?cmd=route_set&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&vpn=${dst_id}\"><IMG SRC=\"/icons/user-invisible.png\" TITLE=\"Activate\" ALT=\"Activate\"></A>"
|
||||||
|
else
|
||||||
|
echo -n " "
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "</TD></TR></TABLE></TD>"
|
||||||
|
else
|
||||||
|
if [[ "${dst_table}" == "${src_table}" ]]
|
||||||
|
then
|
||||||
|
echo -n "1;"
|
||||||
|
else
|
||||||
|
echo -n "0;"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
if [[ "${src_port_range}" != "0" ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD>${src_port_range}</TD><TD>${src_port_start:--}</TD><TD>${src_port_end:--}</TD>"
|
||||||
|
else
|
||||||
|
echo -n "<TD>${src_port_range}</TD><TD>-</TD><TD>-</TD>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "<TD><A HREF=\"?admin=${ADMIN}&user=${src_owner}&status=${STATUS}\">${src_owner}</A></TD><TD>${src_bytes_received:--}</TD><TD>${src_bytes_sent:--}</TD><TD>${src_uptime:--}</TD><TD>${src_last_seen:--}</TD></TR>"
|
||||||
|
else
|
||||||
|
echo "${src_port_range};${src_port_start};${src_port_end};${src_owner};${src_bytes_received};${src_bytes_sent};${src_uptime};${src_last_seen}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Source Routing Board
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_source_routing_board()
|
||||||
|
{
|
||||||
|
local src_id
|
||||||
|
local dst_id
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
echo " <H2>Source Routing Board</H2>"
|
||||||
|
echo ""
|
||||||
|
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
||||||
|
echo -n " <TR class=\"header\"><TD class=\"header\">#</TD><TD>Type</TD><TD>IP</TD><TD>Host Name</TD><TD>Device</TD><TD>Status</TD>"
|
||||||
|
else
|
||||||
|
echo "TABLE: Source_Routing_Board"
|
||||||
|
echo -n "#;Type;IP;Host Name;Status;Device;"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for dst_id in ${NETWORK_DST_ID_LIST}
|
||||||
|
do
|
||||||
|
network_dst_tab_get "${dst_id}"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${dst_type}" != "1") ]]
|
||||||
|
then
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD>${dst_name}</TD>"
|
||||||
|
else
|
||||||
|
echo -n "${dst_name};"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo "<TD>Port Range</TD><TD>From Port</TD><TD>To Port</TD><TD>Owner</TD><TD>Bytes In</TD><TD>Bytes Out</TD><TD>UpTime</TD><TD>Last Seen</TD></TR>"
|
||||||
|
else
|
||||||
|
echo "Port Range;From Port;To Port;Owner;Bytes In;Bytes Out;UpTime;Last Seen"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for src_id in ${NETWORK_SRC_ID_LIST}
|
||||||
|
do
|
||||||
|
vab_source_routing_board_line "${src_id}"
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " </TABLE>"
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
else
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# VPN OpenVPN Board
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_vpn_openvpn_board()
|
||||||
|
{
|
||||||
|
local src_id
|
||||||
|
local class
|
||||||
|
local idx=0
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
echo " <H2>OpenVPN Board</H2>"
|
||||||
|
echo ""
|
||||||
|
echo " <TABLE BORDER=\"1\" WIDTH=\"100%\">"
|
||||||
|
echo " <TR class=\"header\"><TD class=\"header\" ROWSPAN=3>#</TD><TD ROWSPAN=3>IP</TD><TD ROWSPAN=3>Host Name</TD><TD COLSPAN=4>Configuration</TD><TD COLSPAN=5>Certificates</TD></TR><TR class=\"header\"><TD COLSPAN=2>Default Route VPN</TD><TD COLSPAN=2>No Default Route VPN</TD><TD ROWSPAN=2>CA Certificate (.crt)</TD><TD ROWSPAN=2>TC Certificate (.key)</TD><TD ROWSPAN=2>Private Key (.key)</TD><TD ROWSPAN=2>Cerificate Signing Request (.csr)</TD><TD ROWSPAN=2>Public Certificate (.crt)</TD></TR><TR class=\"header\"><TD>External Crt</TD><TD>Inline Crt</TD><TD>External Crt</TD><TD>Inline Crt</TD></TR>"
|
||||||
|
else
|
||||||
|
echo "TABLE: OpenVPN_Board"
|
||||||
|
echo "#;IP;Host Name;Certificate"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for src_id in ${NETWORK_SRC_ID_LIST}
|
||||||
|
do
|
||||||
|
network_src_tab_get "${src_id}"
|
||||||
|
|
||||||
|
if [[ "${src_type}" == "2" ]]
|
||||||
|
then
|
||||||
|
if [[ ( "${USER}" == "" ) || ( "${USER}" == "owner") || ( "${USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
class="default"
|
||||||
|
else
|
||||||
|
if [[ "${USER}" == "owner" ]]
|
||||||
|
then
|
||||||
|
class="skip"
|
||||||
|
else
|
||||||
|
class="dark"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
class="skip"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ( "${STATUS}" != "" ) && ( "${STATUS}" != "${src_status}") ]]
|
||||||
|
then
|
||||||
|
class="skip"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${class}" != "skip" ]]
|
||||||
|
then
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo -n " <TR class=\"${class}\"><TD class=\"header\">${idx}</TD><TD>${src_ip}</TD><TD>${src_host_name}</TD>"
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&defroute=true&type=ext\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Default Route External Certificates\" ALT=\"Configuration External Certificates\"></A></TD>"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&defroute=true&type=inline\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Default Route Inline Certificates\" ALT=\"Configuration Inline Certificates\"></A></TD>"
|
||||||
|
else
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Inline Certificates\" ALT=\"Configuration Inline Certificates\"></TD>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&defroute=false&type=ext\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration NoDefault Route External Certificates\" ALT=\"Configuration External Certificates\"></A></TD>"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=config_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&defroute=false&type=inline\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration NoDefault Route Inline Certificates\" ALT=\"Configuration Inline Certificates\"></A></TD>"
|
||||||
|
else
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Configuration Inline Certificates\" ALT=\"Configuration Inline Certificates\"></TD>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&type=ca\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"CA Certificate\" ALT=\"CA Certificate\"></A></TD>"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&type=tc\" ><IMG SRC=\"/icons/user-online.png\" TITLE=\"TC Certificate\" ALT=\"TC Certificate\"></A></TD>"
|
||||||
|
|
||||||
|
if [[ -f "/etc/openvpn/tls/certs/${src_host_name}.crt" ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&type=key\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></A></TD>"
|
||||||
|
echo -n "<TD><A HREF=\"?cmd=cert_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&type=csr\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Certificate Signing Request\" ALT=\"Certificate Signing Request\"></A></TD>"
|
||||||
|
echo "<TD><A HREF=\"?cmd=cert_download&admin=${ADMIN}&user=${USER}&status=${STATUS}&ip=${src_ip}&type=crt\"><IMG SRC=\"/icons/user-online.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></A></TD></TR>"
|
||||||
|
else
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></TD>"
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Certificate Signing Request\" ALT=\"Certificate Signing Request\"></TD>"
|
||||||
|
echo "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></TD></TR>"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"TC Certificate\" ALT=\"TC Certificate\"></TD>"
|
||||||
|
|
||||||
|
if [[ -f "/etc/openvpn/tls/certs/${src_host_name}.crt" ]]
|
||||||
|
then
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></TD>"
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Certificate Signing Request\" ALT=\"Certificate Signing Request\"></TD>"
|
||||||
|
echo "<TD><IMG SRC=\"/icons/user-online.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></TD></TR>"
|
||||||
|
else
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Private Key\" ALT=\"Private Key\"></TD>"
|
||||||
|
echo -n "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Certificate Signing Request\" ALT=\"Certificate Signing Request\"></TD>"
|
||||||
|
echo "<TD><IMG SRC=\"/icons/user-busy.png\" TITLE=\"Public Certificate\" ALT=\"Public Certificate\"></TD></TR>"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -n "${idx};${src_ip};${src_host_name}"
|
||||||
|
|
||||||
|
if [[ -f "/etc/openvpn/tls/certs/${src_host_name}.crt" ]]
|
||||||
|
then
|
||||||
|
echo ";1"
|
||||||
|
else
|
||||||
|
echo ";0"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
idx=$(( idx + 1 ))
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo " </TABLE>"
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " </P>"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main Board Print
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_main_board_print()
|
||||||
|
{
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [[ "${ADMIN}" == "true" ]]
|
||||||
|
then
|
||||||
|
ADMIN_MODE=" - Admin Mode"
|
||||||
|
else
|
||||||
|
ADMIN_MODE=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
case "${USER}"
|
||||||
|
in
|
||||||
|
"")
|
||||||
|
USER_MODE="All"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"owner")
|
||||||
|
USER_MODE="My"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
USER_MODE="${USER}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "${STATUS}"
|
||||||
|
in
|
||||||
|
"")
|
||||||
|
STATUS_MODE="All"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"0")
|
||||||
|
STATUS_MODE="Down"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"1")
|
||||||
|
STATUS_MODE="Up"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"2")
|
||||||
|
STATUS_MODE="Not Connected"
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
STATUS_MODE="Unknown"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo " <H1>VPN Admin Board: ${USER_MODE} VPN - ${STATUS_MODE} Status${ADMIN_MODE}</H1>"
|
||||||
|
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo ""
|
||||||
|
echo " <b>Date: $(/bin/date)</b><br>"
|
||||||
|
echo " </P>"
|
||||||
|
echo " <HR>"
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
vab_destination_status_board
|
||||||
|
vab_source_routing_board
|
||||||
|
vab_vpn_openvpn_board
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "html" ]]
|
||||||
|
then
|
||||||
|
local time_out
|
||||||
|
local elaps
|
||||||
|
local elaps_sec
|
||||||
|
local elaps_mili
|
||||||
|
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo -n " "
|
||||||
|
|
||||||
|
if [[ " ${ADMIN_USER_LIST} " == *" ${REMOTE_USER} "* ]]
|
||||||
|
then
|
||||||
|
if [[ "${ADMIN}" == "true" ]]
|
||||||
|
then
|
||||||
|
echo -n "<A HREF=\"?user=${USER}&status=${STATUS}\">Non Admin Mode</A>"
|
||||||
|
else
|
||||||
|
echo -n "<A HREF=\"?admin=true&user=${USER}&status=${STATUS}\">Admin Mode</A>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n " "
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${USER}" != "" ]]
|
||||||
|
then
|
||||||
|
echo -n "<A HREF=\"?admin=${ADMIN}&status=${STATUS}\">All VPN</A>"
|
||||||
|
echo -n " "
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${STATUS}" != "" ]]
|
||||||
|
then
|
||||||
|
echo -n "<A HREF=\"?admin=${ADMIN}&user=${USER}\">All Status</A>"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo " </P>"
|
||||||
|
|
||||||
|
time_out=$(date +%s%N)
|
||||||
|
elaps=$(( time_out - TIME_IN))
|
||||||
|
elaps_sec=$(( elaps / 1000000000))
|
||||||
|
elaps_mili=$(( ( elaps / 1000000) - ( elaps_sec * 1000)))
|
||||||
|
|
||||||
|
echo " <P>"
|
||||||
|
echo " <BR>"
|
||||||
|
echo " <BR>"
|
||||||
|
printf " Page generated in %d.%03d seconds\n" "${elaps_sec}" "${elaps_mili}"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
echo " <HR>"
|
||||||
|
echo ""
|
||||||
|
echo " <P>"
|
||||||
|
echo " <A HREF=\"/tdsots/admin/\">Rx3 Admin</A>"
|
||||||
|
echo " </P>"
|
||||||
|
echo ""
|
||||||
|
echo " <HR>"
|
||||||
|
echo ""
|
||||||
|
echo " <P>"
|
||||||
|
echo " <A HREF=\"http://www.hertgen.com/anybrowser/\"> <IMG SRC=\"/images/anyb09.png\" ALT=\"Best Viewed With Any Browser\"></A>"
|
||||||
|
echo " <A HREF=\"http://validator.w3.org/check?uri=referer\"><IMG SRC=\"/images/valid-html401.png\" ALT=\"Valid HTML 4.01!\"></A>"
|
||||||
|
echo " <A HREF=\"http://jigsaw.w3.org/css-validator/\"> <IMG SRC=\"/images/valid-css.png\" ALT=\"Valid CSS!\"></A>"
|
||||||
|
echo " </P>"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Query String Parse
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_query_string_parse()
|
||||||
|
{
|
||||||
|
local var
|
||||||
|
local arg
|
||||||
|
local i
|
||||||
|
|
||||||
|
CMD=""
|
||||||
|
FORMAT=""
|
||||||
|
USER=""
|
||||||
|
STATUS=""
|
||||||
|
IP=""
|
||||||
|
VPN=""
|
||||||
|
TYPE=""
|
||||||
|
REDIRECT=""
|
||||||
|
CMD_STATUS=""
|
||||||
|
ADMIN=""
|
||||||
|
FILTER=""
|
||||||
|
DEFROUTE=""
|
||||||
|
FILENAME=""
|
||||||
|
|
||||||
|
if [[ "${QUERY_STRING}" != "" ]]
|
||||||
|
then
|
||||||
|
local OIFS="${IFS}"
|
||||||
|
IFS="&"
|
||||||
|
set ${QUERY_STRING}
|
||||||
|
IFS="${OIFS}"
|
||||||
|
|
||||||
|
i=$#
|
||||||
|
|
||||||
|
while [[ "${i}" != "0" ]]
|
||||||
|
do
|
||||||
|
var="${1/=*/}"
|
||||||
|
arg="${1/*=/}"
|
||||||
|
|
||||||
|
case "${var}"
|
||||||
|
in
|
||||||
|
"cmd")
|
||||||
|
CMD="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"format")
|
||||||
|
FORMAT="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"admin")
|
||||||
|
ADMIN="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"filter")
|
||||||
|
FILTER="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"user")
|
||||||
|
USER="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"status")
|
||||||
|
STATUS="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"ip")
|
||||||
|
IP="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"vpn")
|
||||||
|
VPN="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"type")
|
||||||
|
TYPE="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"filename")
|
||||||
|
FILENAME="${arg}"
|
||||||
|
;;
|
||||||
|
|
||||||
|
"defroute")
|
||||||
|
DEFROUTE="${arg}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
shift
|
||||||
|
i=$(( i - 1 ))
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "${FORMAT}" == "" ]]
|
||||||
|
then
|
||||||
|
FORMAT="html"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Command Handler
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_command_handler()
|
||||||
|
{
|
||||||
|
if [[ ( "${ADMIN}" == "true") && ( " ${ADMIN_USER_LIST} " != *" ${REMOTE_USER} "*) ]]
|
||||||
|
then
|
||||||
|
CMD_STATUS="${CMD}: Admin NOT_AUTHORIZED"
|
||||||
|
REDIRECT="?user=${USER}&up=${up}"
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
vab_footer_print
|
||||||
|
else
|
||||||
|
case "${CMD}"
|
||||||
|
in
|
||||||
|
"")
|
||||||
|
vab_header_print
|
||||||
|
vab_main_board_print
|
||||||
|
vab_footer_print
|
||||||
|
;;
|
||||||
|
|
||||||
|
"route_set")
|
||||||
|
network_src_tab_ip_lookup "${IP}"
|
||||||
|
network_src_tab_get "${src_id}"
|
||||||
|
network_dst_tab_get "${VPN}"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( ( "${REMOTE_USER}" == "${src_owner}") && ( "${dst_type}" != "1")) ]]
|
||||||
|
then
|
||||||
|
sudo rx3_net_adm table_set "${IP}" "${dst_table}" 1>&2
|
||||||
|
|
||||||
|
if [[ "$?" == "0" ]]
|
||||||
|
then
|
||||||
|
CMD_STATUS="route_set: OK"
|
||||||
|
else
|
||||||
|
CMD_STATUS="route_set: KO"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
CMD_STATUS="route_set: NOT_AUTHORIZED [${REMOTE_USER}]/[${src_owner}]/[${dst_type}]"
|
||||||
|
fi
|
||||||
|
|
||||||
|
REDIRECT="?admin=${ADMIN}&filter=${FILTER}"
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
vab_footer_print
|
||||||
|
;;
|
||||||
|
|
||||||
|
"cert_download")
|
||||||
|
network_src_tab_ip_lookup "${IP}"
|
||||||
|
network_src_tab_get "${src_id}"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") || ( "${TYPE}" == "ca") || ( "${TYPE}" == "crt") ]]
|
||||||
|
then
|
||||||
|
CMD_STATUS="cert_download: OK"
|
||||||
|
FORMAT="txt"
|
||||||
|
|
||||||
|
case "${TYPE}"
|
||||||
|
in
|
||||||
|
"ca")
|
||||||
|
FILE_NAME="ca.crt"
|
||||||
|
HOST_NAME=""
|
||||||
|
;;
|
||||||
|
|
||||||
|
"tc")
|
||||||
|
FILE_NAME="tc.key"
|
||||||
|
HOST_NAME=""
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
HOST_NAME="$( host "${IP}" | sed -e 's/.*domain name pointer //' -e 's/.$//')"
|
||||||
|
FILE_NAME="${HOST_NAME}.${TYPE}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
sudo cert_dump "${TYPE}" "${HOST_NAME}"
|
||||||
|
else
|
||||||
|
CMD_STATUS="cert_download: NOT_AUTHORIZED"
|
||||||
|
REDIRECT="?admin=${ADMIN}&filter=${FILTER}"
|
||||||
|
FORMAT="html"
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
vab_footer_print
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
"config_download")
|
||||||
|
network_src_tab_ip_lookup "${IP}"
|
||||||
|
network_src_tab_get "${src_id}"
|
||||||
|
|
||||||
|
if [[ ( "${ADMIN}" == "true") || ( "${REMOTE_USER}" == "${src_owner}") || ( "${TYPE}" == "ext") ]]
|
||||||
|
then
|
||||||
|
local defroute_pipe
|
||||||
|
local template_name
|
||||||
|
local route_type
|
||||||
|
|
||||||
|
CMD_STATUS="config_download: OK"
|
||||||
|
|
||||||
|
HOST_NAME="$( host "${IP}" | sed -e 's/.*domain name pointer //' -e 's/.$//')"
|
||||||
|
template_name="rx3-client.ovpn"
|
||||||
|
|
||||||
|
if [[ "${DEFROUTE}" == "false" ]]
|
||||||
|
then
|
||||||
|
defroute_pipe="sed s/#pull-filter/pull-filter/"
|
||||||
|
route_type="nodefroute"
|
||||||
|
else
|
||||||
|
defroute_pipe="cat"
|
||||||
|
route_type="defroute"
|
||||||
|
fi
|
||||||
|
|
||||||
|
FORMAT="txt"
|
||||||
|
|
||||||
|
if [[ "${TYPE}" == "ext" ]]
|
||||||
|
then
|
||||||
|
FILE_NAME="${HOST_NAME}-${route_type}-external.ovpn"
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
|
||||||
|
sed </etc/openvpn/template/${template_name} -e "s/CLIENT_FQDN/${HOST_NAME}/g" | ${defroute_pipe}
|
||||||
|
else
|
||||||
|
FILE_NAME="${HOST_NAME}-${route_type}-inline.ovpn"
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
|
||||||
|
eval "echo \"$( sed </etc/openvpn/template/${template_name} \
|
||||||
|
-e "s/ca tls\/certs\/ca.crt/\$(echo \"<ca>\"; sudo cert_dump ca; echo \"<\/ca>\")/" \
|
||||||
|
-e "s/cert tls\/certs\/CLIENT_FQDN.crt/\$(echo \"<cert>\"; sudo cert_dump crt CLIENT_FQDN; echo \"<\/cert>\")/" \
|
||||||
|
-e "s/key tls\/private\/CLIENT_FQDN.key/\$(echo \"<key>\"; sudo cert_dump key CLIENT_FQDN; echo \"<\/key>\")/" \
|
||||||
|
-e "s/tls-crypt tls\/private\/tc.key/\$(echo \"<tls-crypt>\"; sudo cert_dump tc; echo \"<\/tls-crypt>\")/" \
|
||||||
|
-e "s/CLIENT_FQDN/${HOST_NAME}/g")\"" | ${defroute_pipe}
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
CMD_STATUS="config_download: NOT_AUTHORIZED"
|
||||||
|
REDIRECT="?admin=${ADMIN}&filter=${FILTER}"
|
||||||
|
FORMAT="html"
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
vab_footer_print
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
CMD_STATUS="${CMD}: UNKNOWN_CMD"
|
||||||
|
|
||||||
|
vab_header_print
|
||||||
|
vab_footer_print
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
# Main
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
vab_query_string_parse
|
||||||
|
|
||||||
|
network_init
|
||||||
|
|
||||||
|
vab_command_handler
|
||||||
|
|
||||||
|
network_deinit
|
||||||
Reference in New Issue
Block a user