From d1c6a428f5339891bfef8e7cea41bd488d591284 Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Wed, 12 May 2021 20:06:36 +0900 Subject: [PATCH] Add wireguardConfigGenerator.sh --- wireguardConfigGenerator.sh | 138 ++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100755 wireguardConfigGenerator.sh diff --git a/wireguardConfigGenerator.sh b/wireguardConfigGenerator.sh new file mode 100755 index 0000000..1d0411c --- /dev/null +++ b/wireguardConfigGenerator.sh @@ -0,0 +1,138 @@ +#!/bin/bash + +set -e + +function print_help { + echo "Generates config for wireguard" + echo "-h - prints this help" + echo "-n - gives a name to the config" + echo "-c - number of clients to generate for" + echo "-i - sets the third byte of the ipv4" + echo "-e - ip address or domain name (required)" + echo "-p - listen port of server (defaults to 50000)" + echo "-k - enables persistent keepalive for clients" + echo "-o - output dir to place configs (required)" +} + +WGNAME="wg$(date | sha1sum | head -c 8)" +CLIENT_COUNT=1 +IPV4_FIRST=10 +IPV4_SECOND=8 +IPV4_THIRD=0 # this can be modified with "-i " +# IPV4_FOURTH is generated automatically. Server starts with 1, and clients increment afterward. +SERVER_ENDPOINT="REQUIRED" +SERVER_LISTEN_PORT=50000 +ENABLE_PERSISTENT_KEEPALIVE=0 +CONFIG_OUTPUT_DIRECTORY="REQUIRED" + +# OPTARG +while getopts 'hn:c:i:e:p:ko:' opt; do + if [ "$opt" == "?" ]; then + print_help + exit 1 + elif [ "$opt" == "h" ]; then + print_help + exit 0 + elif [ "$opt" == "n" ]; then + WGNAME="$OPTARG" + elif [ "$opt" == "c" ]; then + CLIENT_COUNT="$OPTARG" + elif [ "$opt" == "i" ]; then + IPV4_THIRD="$OPTARG" + elif [ "$opt" == "e" ]; then + SERVER_ENDPOINT="$OPTARG" + elif [ "$opt" == "p" ]; then + SERVER_LISTEN_PORT="$OPTARG" + if [[ ! "${SERVER_LISTEN_PORT}" =~ [0-9]+ ]]; then + echo "ERROR: Given port is not a number" + exit 5 + elif (($SERVER_LISTEN_PORT > 65536)); then + echo "ERROR: Given port is too large" + exit 6 + fi + elif [ "$opt" == "k" ]; then + ENABLE_PERSISTENT_KEEPALIVE=1 + elif [ "$opt" == "o" ]; then + CONFIG_OUTPUT_DIRECTORY="$OPTARG" + fi +done + +if [ "$SERVER_ENDPOINT" == "REQUIRED" ]; then + echo "ERROR: Endpoint is not set with \"-e\" !" + exit 2 +elif [ "$CONFIG_OUTPUT_DIRECTORY" == "REQUIRED" ]; then + echo "ERROR: Output directory is not set with \"-o\" !" + exit 3 +elif [ ! -d "$CONFIG_OUTPUT_DIRECTORY" ]; then + echo "ERROR: dir set with \"-o\" is not a directory!" + exit 4 +fi + +echo "Creating config with name \"$WGNAME\" with \"$CLIENT_COUNT\" clients..." + +mkdir -p "$HOME/temp" + +TEMP_DIR=$(mktemp -d -p "$HOME/temp") + +# first create server config +SERVER_CONF="${TEMP_DIR}/${WGNAME}server.conf" +SERVER_PRK="$(wg genkey)" +SERVER_PUB="$(echo -n ${SERVER_PRK} | wg pubkey)" + +echo "Creating server conf (will be appended to with client info)..." +cat >> "${SERVER_CONF}" <> "${SERVER_CONF}" <> "${CLIENT_CONF}" <> "${CLIENT_CONF}" <