create wg interface script
This commit is contained in:
parent
bcf5846e80
commit
fc2560103f
1 changed files with 273 additions and 3 deletions
276
functions.sh
276
functions.sh
|
@ -1469,6 +1469,99 @@ EOF
|
|||
eval $SHOPTEXTGLOB
|
||||
}
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
|
||||
# EXESUDO
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
|
||||
#
|
||||
# Purpose:
|
||||
# -------------------------------------------------------------------- #
|
||||
# Execute a function with sudo
|
||||
#
|
||||
# Params:
|
||||
# -------------------------------------------------------------------- #
|
||||
# $1: string: name of the function to be executed with sudo
|
||||
#
|
||||
# Usage:
|
||||
# -------------------------------------------------------------------- #
|
||||
# exesudo "funcname" followed by any param
|
||||
#
|
||||
# -------------------------------------------------------------------- #
|
||||
# Created 01 September 2012 Last Modified 02 September 2012
|
||||
|
||||
function exesudo ()
|
||||
{
|
||||
### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##
|
||||
#
|
||||
# LOCAL VARIABLES:
|
||||
#
|
||||
### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##
|
||||
|
||||
#
|
||||
# I use underscores to remember it's been passed
|
||||
local _funcname_="$1"
|
||||
|
||||
local params=( "$@" ) ## array containing all params passed here
|
||||
local tmpfile="/dev/shm/$RANDOM" ## temporary file
|
||||
local content ## content of the temporary file
|
||||
local regex ## regular expression
|
||||
|
||||
|
||||
### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##
|
||||
#
|
||||
# MAIN CODE:
|
||||
#
|
||||
### ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ##
|
||||
|
||||
#
|
||||
# WORKING ON PARAMS:
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
#
|
||||
# Shift the first param (which is the name of the function)
|
||||
unset params[0] ## remove first element
|
||||
# params=( "${params[@]}" ) ## repack array
|
||||
|
||||
|
||||
#
|
||||
# WORKING ON THE TEMPORARY FILE:
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
content="#!/bin/bash\n\n"
|
||||
|
||||
#
|
||||
# Write the params array
|
||||
content="${content}params=(\n"
|
||||
|
||||
regex="\s+"
|
||||
for param in "${params[@]}"
|
||||
do
|
||||
if [[ "$param" =~ $regex ]]
|
||||
then
|
||||
content="${content}\t\"${param}\"\n"
|
||||
else
|
||||
content="${content}\t${param}\n"
|
||||
fi
|
||||
done
|
||||
|
||||
content="$content)\n"
|
||||
echo -e "$content" > "$tmpfile"
|
||||
|
||||
#
|
||||
# Append the function source
|
||||
echo "#$( type "$_funcname_" )" >> "$tmpfile"
|
||||
|
||||
#
|
||||
# Append the call to the function
|
||||
echo -e "\n$_funcname_ \"\${params[@]}\"\n" >> "$tmpfile"
|
||||
|
||||
|
||||
#
|
||||
# DONE: EXECUTE THE TEMPORARY FILE WITH SUDO
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
sudo bash "$tmpfile"
|
||||
rm "$tmpfile"
|
||||
}
|
||||
|
||||
if ${SSHS-false}
|
||||
then
|
||||
echo declare tsudo
|
||||
|
@ -1491,7 +1584,184 @@ tsudo () {
|
|||
sudo -u ${1} /bin/bash --rcfile ${bashrctmp}
|
||||
}
|
||||
fi
|
||||
|
||||
function wg-genkeypair () {
|
||||
local IFDEFAULT=wg1
|
||||
local IF="${1:-${IFDEFAULT}}"
|
||||
shift
|
||||
case $1 in
|
||||
-h|--help)
|
||||
cat << EOF
|
||||
usage: wg-genkeypair [name]
|
||||
|
||||
if name is given, a keypair is generated with names
|
||||
"name_key" and "name_pub".
|
||||
If name is not given, the keypair is "${IFDEFAULT}_key" and "${IFDEFAULT}_pub"
|
||||
|
||||
EOF
|
||||
return
|
||||
;;
|
||||
esac
|
||||
|
||||
PRAEFIX="${IF}_"
|
||||
|
||||
umask 077
|
||||
wg genkey | tee ${PRAEFIX}key | wg pubkey > ${PRAEFIX}pub
|
||||
|
||||
cat <<- EOF >&2
|
||||
Generated keypair:
|
||||
Private (${PRAEFIX}key): $(cat ${PRAEFIX}key)
|
||||
Public (${PRAEFIX}pub): $(cat ${PRAEFIX}pub)
|
||||
EOF
|
||||
cat <<- EOF
|
||||
${IF} ${PRAEFIX}pub $(cat ${PRAEFIX}pub)
|
||||
EOF
|
||||
}
|
||||
|
||||
function wg-create-interface () {
|
||||
|
||||
local IF="wg1"
|
||||
local NET
|
||||
local NETMASK
|
||||
local LISTENPORT
|
||||
local INTERFACEADDR
|
||||
local DNS
|
||||
local POSTUP
|
||||
local PREDOWN
|
||||
local POSTDOWN
|
||||
local PSK
|
||||
local TABLE
|
||||
local GENERATE=false
|
||||
local MTU
|
||||
local PRAEFIX
|
||||
|
||||
set -- $(getopt -u -o ha:d:gp:i:n:m:a: --long help,if-address:,listenport:,dns:,mtu:,table:,postup:,predown:,postdown:,generate-key,preshared-key: -- "$@" )
|
||||
|
||||
echo "@: $@"
|
||||
while [ $# -gt 0 ]
|
||||
do
|
||||
case $1 in
|
||||
-h|--help)
|
||||
shift
|
||||
cat <<- endofhelp
|
||||
|
||||
usage: wg-create-interface [OPTIONS] <interfacename>
|
||||
|
||||
OPTIONS:
|
||||
-h|--help
|
||||
-a|--if-address <IP-Adress>
|
||||
-p|--listenport <PORT>
|
||||
-d|--dns <IP DNS-Server> (multiple times)
|
||||
-n|--network <IP Network>
|
||||
-m|--netmask <Netmask> /24, /32...
|
||||
--mtu <MTU> default: 1500
|
||||
-t|--table <table> default: auto
|
||||
--generate-key if set, generate key new. overwrite existing. default: false
|
||||
--postup <POSTUP Script>
|
||||
--predown <PREDOWN Script>
|
||||
--postdown <POSTDOWN Script>
|
||||
--preshared-key <PresharedKey>
|
||||
|
||||
|
||||
endofhelp
|
||||
return
|
||||
;;
|
||||
-d|--dns)
|
||||
shift
|
||||
DNS=$1
|
||||
shift
|
||||
;;
|
||||
-p|--listenport)
|
||||
shift
|
||||
LISTENPORT=$1
|
||||
shift
|
||||
;;
|
||||
-a|if-address)
|
||||
shift
|
||||
INTERFACEADDR=$1
|
||||
shift
|
||||
;;
|
||||
-n|network)
|
||||
shift
|
||||
NET=$1
|
||||
shift
|
||||
;;
|
||||
-m|--netmask)
|
||||
shift
|
||||
NETMASK=$1
|
||||
shift
|
||||
;;
|
||||
--mtu)
|
||||
shift
|
||||
MTU=$1
|
||||
shift
|
||||
;;
|
||||
-t|--table)
|
||||
shift
|
||||
TABLE=$1
|
||||
shift
|
||||
;;
|
||||
--postup)
|
||||
shift
|
||||
POSTUP="${1}"
|
||||
shift
|
||||
;;
|
||||
--predown)
|
||||
shift
|
||||
PREDOWN="${1}"
|
||||
shift
|
||||
;;
|
||||
--postdown)
|
||||
shift
|
||||
POSTDOWN="${1}"
|
||||
shift
|
||||
;;
|
||||
--generate-key)
|
||||
shift
|
||||
GENERATE=true
|
||||
;;
|
||||
--preshared-key)
|
||||
shift
|
||||
PSK="${1}"
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
[ $# -eq 0 ] && { echo "Too few arguments. Use »-h« or »--help« for instructions"; return; }
|
||||
|
||||
# Set interface name to default if not given on commandline
|
||||
local IF="${1:-${IF}}"
|
||||
shift
|
||||
# create file-prefix for key and pubkey from interface-name
|
||||
PRAEFIX="${IF}_"
|
||||
echo PRAEFIX: ${PRAEFIX}
|
||||
|
||||
# Generate keypair when files do not exist or when they exist and generating is forced (--generate-key)
|
||||
if [ -e "${PRAEFIX}key" ]
|
||||
then
|
||||
${GENERATE:-false} && wg-genkeypair ${IF}
|
||||
else
|
||||
wg-genkeypair ${IF}
|
||||
fi
|
||||
|
||||
umask 077
|
||||
cat <<- EOF >> ${IF}.conf
|
||||
[Interface]
|
||||
Address = ${INTERFACEADDR}
|
||||
ListenPort = ${LISTENPORT:-51280}
|
||||
PrivateKey = $(cat ${PRAEFIX}key)
|
||||
${MTU:+MTU = ${MTU}}
|
||||
${TABLE:+Table = ${TABLE}}
|
||||
${POSTUP:+PostUp = ${POSTUP}}
|
||||
${PREDOWN:+PostUp = ${PREDOWN}}
|
||||
${POSTDOWN:+PostUp = ${POSTDOWN}}
|
||||
EOF
|
||||
}
|
||||
|
||||
#EOF
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue