143 lines
4.6 KiB
Bash
143 lines
4.6 KiB
Bash
#!/bin/bash
|
|
|
|
# This script creates a wireguard configuration for both sides
|
|
|
|
prog="$(basename $0)"
|
|
|
|
a_privkey=$(wg genkey)
|
|
a_pubkey=$(echo ${a_privkey} | wg pubkey)
|
|
a_file=./side-a.conf
|
|
a_print_qr=0
|
|
a_print_opn=0
|
|
|
|
b_privkey=$(wg genkey)
|
|
b_pubkey=$(echo ${b_privkey} | wg pubkey)
|
|
b_file=./side-b.conf
|
|
b_print_qr=0
|
|
b_print_opn=0
|
|
|
|
port=51820
|
|
persistent_keepalive=25
|
|
psk=$(wg genpsk)
|
|
|
|
if ! which wg > /dev/null; then
|
|
echo "Please install wireguard before running this script!"
|
|
exit 1
|
|
fi
|
|
|
|
if ! which qrencode > /dev/null; then
|
|
echo "Please install qrencode before running this script!"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
|
|
usage() {
|
|
cat >&2 <<-EOF
|
|
usage: $prog [-h]
|
|
creates a wireguard configuration for both endpoints
|
|
|
|
-e ENDPOINT_ADDR Endpoint address on side A
|
|
-t TUNNEL_ADDR Tunnel address on side A
|
|
-n NETWORKS CIDR formatted networks accessible on side A (comma separated)
|
|
-d DNS DNS servers and suffixes accessible on side A (comma separated)
|
|
-f FILENAME Save side A to specified file (default: $a_file)
|
|
-q Print side A as QR code
|
|
-o Print side A as OPNsense template
|
|
|
|
-E ENDPOINT Endpoint address on side B
|
|
-T TUNNEL_ADDR Tunnel address on side B
|
|
-N NETWORKS CIDR formatted networks accessible on side B (comma separated)
|
|
-D DNS DNS servers and suffixes accessible on side B (comma separated)
|
|
-F FILENAME Save side B to specified file (default: $b_file)
|
|
-Q Print side B as QR code
|
|
-O Print side B as OPNsense template
|
|
|
|
-p PORT UDP Port (used on both sides, default: $port)
|
|
-k KEEPALIVE Override PersistentKeepalive (default: $persistent_keepalive)
|
|
|
|
-h displays this help text
|
|
---------------------------------------------------------------------------
|
|
(C) 2023 wg-creator by bashclub (https://github.com/bashclub)
|
|
Author: Thorsten Spille <thorsten@spille-edv.de>
|
|
---------------------------------------------------------------------------
|
|
EOF
|
|
exit $1
|
|
}
|
|
|
|
|
|
while getopts "e:t:n:d:f:qoE:T:N:D:F:QOp:k:h" opt; do
|
|
case $opt in
|
|
h) usage 0 ;;
|
|
e) a_endpoint_address=$OPTARG ;;
|
|
E) b_endpoint_address=$OPTARG ;;
|
|
t) a_tunnel_address=$OPTARG ;;
|
|
T) b_tunnel_address=$OPTARG ;;
|
|
n) a_networks=$OPTARG ;;
|
|
N) b_networks=$OPTARG ;;
|
|
d) a_dns=$OPTARG ;;
|
|
D) b_dns=$OPTARG ;;
|
|
f) a_file=$OPTARG ;;
|
|
F) b_file=$OPTARG ;;
|
|
q) a_print_qr=1 ;;
|
|
Q) b_print_qr=1 ;;
|
|
o) a_print_opn=1 ;;
|
|
O) b_print_opn=1 ;;
|
|
p) port=$OPTARG ;;
|
|
k) persistent_keepalive=$OPTARG ;;
|
|
esac
|
|
done
|
|
shift $((OPTIND-1))
|
|
|
|
cat << EOF > $a_file
|
|
[Interface]
|
|
PrivateKey = $a_privkey
|
|
Address = $a_tunnel_address
|
|
DNS = $b_dns
|
|
Port = $port
|
|
|
|
[Peer]
|
|
PublicKey = $b_pubkey
|
|
PresharedKey = $psk
|
|
AllowedIPs = $(echo $b_tunnel_address | cut -d '/' -f1)/32,$b_networks
|
|
Endpoint = ${b_endpoint_address}:${port}
|
|
PersistentKeepalive = $persistent_keepalive
|
|
EOF
|
|
|
|
echo -e "SIDE A\n-----\n"
|
|
if [ $a_print_qr -gt 0 ]; then
|
|
qrencode -t ansiutf8 < $a_file
|
|
elif [ $a_print_opn -gt 0 ]; then
|
|
echo -e "Paste the following values into your OPNsense Wireguard config\n"
|
|
echo -e "[Local]\n Public Key:\t\t$a_pubkey\n Private Key:\t\t$a_privkey\n Listen Port:\t\t$port\n Tunnel Address:\t$a_tunnel_address\n\n[Endpoint]\n Public Key:\t\t$b_pubkey\n Shared Secret:\t$psk\n Allowed IPs:\t\t$(echo $b_tunnel_address | cut -d '/' -f1)/32,$b_networks\n Endpoint Address:\t$b_endpoint_address\n Endpoint Port:\t$port\n Keepalive Interval:\t$persistent_keepalive\n"
|
|
else
|
|
cat $a_file
|
|
echo ""
|
|
fi
|
|
|
|
cat << EOF > $b_file
|
|
[Interface]
|
|
PrivateKey = $b_privkey
|
|
Address = $b_tunnel_address
|
|
DNS = $a_dns
|
|
Port = $port
|
|
|
|
[Peer]
|
|
PublicKey = $a_pubkey
|
|
PresharedKey = $psk
|
|
AllowedIPs = $(echo $a_tunnel_address | cut -d '/' -f1)/32,$a_networks
|
|
Endpoint = ${a_endpoint_address}:${port}
|
|
PersistentKeepalive = $persistent_keepalive
|
|
EOF
|
|
|
|
echo -e "SIDE B\n-----\n"
|
|
if [ $b_print_qr -gt 0 ]; then
|
|
qrencode -t ansiutf8 < $b_file
|
|
elif [ $b_print_opn -gt 0 ]; then
|
|
echo -e "Paste the following values into your OPNsense Wireguard config\n"
|
|
echo -e "[Local]\n Public Key:\t\t$b_pubkey\n Private Key:\t\t$b_privkey\n Listen Port:\t\t$port\n Tunnel Address:\t$b_tunnel_address\n\n[Endpoint]\n Public Key:\t\t$a_pubkey\n Shared Secret:\t$psk\n Allowed IPs:\t\t$(echo $a_tunnel_address | cut -d '/' -f1)/32,$a_networks\n Endpoint Address:\t$a_endpoint_address\n Endpoint Port:\t$port\n Keepalive Interval:\t$persistent_keepalive\n"
|
|
else
|
|
cat $b_file
|
|
echo ""
|
|
fi
|