From 283b79c89841859f51cbcf5a0c83c12dc27a5df2 Mon Sep 17 00:00:00 2001 From: hwdsl2 Date: Sun, 28 Jul 2024 14:49:26 -0500 Subject: [PATCH] Add install options - NEW: Users can now optionally specify install options when running the script to install OpenVPN. These new options include: '--serveraddr', '--proto', '--port', '--clientname', '--dns1' and '--dns2'. Refer to the usage information which will be added to the project documentation, or run the script with the '-h' option to view. - Other minor improvements --- openvpn-install.sh | 191 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 168 insertions(+), 23 deletions(-) diff --git a/openvpn-install.sh b/openvpn-install.sh index 47d0fae..d58d610 100644 --- a/openvpn-install.sh +++ b/openvpn-install.sh @@ -139,6 +139,37 @@ parse_args() { remove_ovpn=1 shift ;; + --serveraddr) + server_addr_set=1 + server_addr="$2" + shift + shift + ;; + --proto) + server_proto="$2" + shift + shift + ;; + --port) + server_port="$2" + shift + shift + ;; + --clientname) + first_client_name="$2" + shift + shift + ;; + --dns1) + dns1="$2" + shift + shift + ;; + --dns2) + dns2="$2" + shift + shift + ;; -y|--yes) assume_yes=1 shift @@ -154,10 +185,8 @@ parse_args() { } check_args() { - if [ "$auto" = 1 ] && [ -e "$OVPN_CONF" ]; then - echo "Error: Invalid parameter '--auto'. OpenVPN is already set up on this server." >&2 - echo " To manage OpenVPN clients, re-run this script without '--auto'." >&2 - exit 1 + if [ "$auto" != 0 ] && [ -e "$OVPN_CONF" ]; then + show_usage "Invalid parameter '--auto'. OpenVPN is already set up on this server." fi if [ "$((add_client + export_client + list_clients + revoke_client))" -gt 1 ]; then show_usage "Invalid parameters. Specify only one of '--addclient', '--exportclient', '--listclients' or '--revokeclient'." @@ -174,6 +203,17 @@ check_args() { [ "$revoke_client" = 1 ] && exiterr "You must first set up OpenVPN before revoking a client." [ "$remove_ovpn" = 1 ] && exiterr "Cannot remove OpenVPN because it has not been set up on this server." fi + if [ "$((add_client + export_client + revoke_client))" = 1 ] && [ -n "$first_client_name" ]; then + show_usage "Invalid parameters. '--clientname' can only be specified when installing OpenVPN." + fi + if [ -n "$server_addr" ] || [ -n "$server_proto" ] || [ -n "$server_port" ] \ + || [ -n "$first_client_name" ] || [ -n "$dns1" ]; then + if [ -e "$OVPN_CONF" ]; then + show_usage "Invalid parameters. OpenVPN is already set up on this server." + elif [ "$auto" = 0 ]; then + show_usage "Invalid parameters. You must specify '--auto' when using these parameters." + fi + fi if [ "$add_client" = 1 ]; then set_client_name if [ -z "$client" ]; then @@ -188,6 +228,46 @@ check_args() { exiterr "Invalid client name, or client does not exist." fi fi + if [ -n "$server_addr" ] && ! check_dns_name "$server_addr"; then + exiterr "Invalid server address. Must be a fully qualified domain name (FQDN)." + fi + if [ -n "$first_client_name" ]; then + unsanitized_client="$first_client_name" + set_client_name + if [ -z "$client" ]; then + exiterr "Invalid client name. Use one word only, no special characters except '-' and '_'." + fi + fi + if [ -n "$server_proto" ]; then + case "$server_proto" in + [tT][cC][pP]) + server_proto=tcp + ;; + [uU][dD][pP]) + server_proto=udp + ;; + *) + exiterr "Invalid protocol. Must be TCP or UDP." + ;; + esac + fi + if [ -n "$server_port" ]; then + if [[ ! "$server_port" =~ ^[0-9]+$ || "$server_port" -gt 65535 ]]; then + exiterr "Invalid port. Must be an integer between 1 and 65535." + fi + fi + if { [ -n "$dns1" ] && ! check_ip "$dns1"; } \ + || { [ -n "$dns2" ] && ! check_ip "$dns2"; }; then + exiterr "Invalid DNS server(s)." + fi + if [ -z "$dns1" ] && [ -n "$dns2" ]; then + show_usage "Invalid DNS server. --dns2 cannot be specified without --dns1." + fi + if [ -n "$dns1" ]; then + dns=7 + else + dns=2 + fi } check_nftables() { @@ -278,7 +358,7 @@ cat 1>&2 <