Script-Time: Wireguard - OPNsense
Wenn man sich in einem unsicheren, öffentlichen WLAN befindet, möchte man gerne seinen Netzwerkverkehr vor neugierigen Augen verbergen. Dazu eignet sich ein Wireguard-VPN zur heimischen OPNsense-Firewall besonders gut.
Nur zwei Eingaben reichen
Mit einem kleinen Script lassen sich die Felder im Konfigurationsdialog der OPNsense leicht befüllen. Es wird nur der Clientname und seine IP benötigt. QR-Code abfotografieren - fertig!
Im Detail
Doch welche Parameter gibt es auf der OPNsense überhaupt?
Zunächst muss eine Instanz definiert sein:
Im VPN-Netz hat diese Instanz die IP 192.168.254.1. Die Clients haben also Platz in der Range von 2-254.
Welche Parameter werden also für den Client benötigt?
Woher bekommen wir nun diese Werte?
Wir brauchen also den Clientnamen und seine IP im VPN-Netz. Beides können wir frei wählen (die IP darf natürlich nicht doppelt vergeben werden).
Der Public Key ist durch die Wireguard-Instanz vorgegeben und einen Pre-Shared Key kann man generieren lassen oder frei wählen.
Wenn man also nun einmal die Variablen im Script angepasst hat, ist das hinzufügen von Clients ein Kinderspiel:
Fertig!
Das Script liefert nun alle Parameter für die Eingabe auf der OPNsense für den neuen Client:
Jetzt ist der Client auf der OPNsense bekannt. Der Client selbst muss natürlich noch konfiguriert werden. Und hier unterscheiden sich die Betriebssysteme ein wenig.
LINUX / Windows / MAC
Auf einem Rechner wird meist ein Config-File benötigt:
SmartPhone
Für ein SmartPhone ist die Konfiguration besonders leicht. Nach der Installation von Wireguard tippt man einfach auf "hinzufügen aus QR-Code" und scannt angezeigten QR-Code ab.
Hier das fertige Script:
#!/bin/bash
# Script to add a wg-client to opnsense
# Copyright (C) 2019 Michael Meister
# Last revised 1/16/2019
Help(){
echo -e "
##############################################################
### ####
### wireguard-add-client-testguard ####
### ####
##############################################################
"
exit 0
}
[ "$1" = "-h" -o "$1" = "-help" -o "$1" = "--help" ] && Help
##################################################################
PEER="your_opnsense_public_ip:7783" # IP und Port
PEERPUBKEY="jXokgifqXzyam6UeIJJ08=" # PubKey aus WG-Instanz
TUNNELPREFIX="192.168.254." # Macht die Eingabe leichter
WHATGOESINTHETUNNEL="0.0.0.0/0" # Nichts geht am Tunnel vorbei!
DNS=192.168.110.254 # DNS-Server der OPNsense für Werbeblocker etc.
##################################################################
TEMPFILE=/tmp/wgclientconf.$(date "+%N")
hline(){
printf "%$(tput cols)s"|sed "s/ /-/g"
}
define_colors(){
cls=$(clear)
# Reset
Color_Off='\033[0m' # Text Reset
BGreen='\033[1;32m' # Green
IBlue='\033[0;94m' # Blue
}
define_colors
echo -e "$BGreen
╻ ╻╻┏━┓┏━╸┏━╸╻ ╻┏━┓┏━┓╺┳┓ ┏━╸┏━┓┏┓╻┏━╸╻┏━╸
┃╻┃┃┣┳┛┣╸ ┃╺┓┃ ┃┣━┫┣┳┛ ┃┃╺━╸┃ ┃ ┃┃┗┫┣╸ ┃┃╺┓
┗┻┛╹╹┗╸┗━╸┗━┛┗━┛╹ ╹╹┗╸╺┻┛ ┗━╸┗━┛╹ ╹╹ ╹┗━┛
┏━╸┏━┓┏━╸┏━┓╺┳╸┏━┓┏━┓
┃ ┣┳┛┣╸ ┣━┫ ┃ ┃ ┃┣┳┛
┗━╸╹┗╸┗━╸╹ ╹ ╹ ┗━┛╹┗╸
$Color_Off"
echo -e "Tell me some details about the client
"
read -p "Whats the HOSTNAME : " CLIENTNAME
read -p "Whats the IP in the Tunnel : ${TUNNELPREFIX}" CLIENTLASTBYTE
CLIENTIP=${TUNNELPREFIX}${CLIENTLASTBYTE}
PRIVKEY=$(wg genkey)
PUBKEY=$(echo $PRIVKEY | wg pubkey)
PRESHAREDKEY=$(wg genpsk)
echo -e "
You need to put the following info to the ${BGreen}OPNsense${Color_Off}.
Create a new endpoint:
${IBBlue}
- Name : ${CLIENTNAME}
- Public Key : ${PUBKEY}
- Preshared Secret : ${PRESHAREDKEY}
- Allowed IPs : ${CLIENTIP}/32
${Color_Off}
Dont forget to ${BGreen}add ${CLIENTNAME} to the local wg-server on the OPNsense${Color_Off}!
AND ${BGreen}CREATE RULES${Color_Off} FOR THIS CLIENT ON THE FIREWALL !!!
"
read -n1 -esp "Hit [ENTER] for Client-Config " ENTER
echo "
On the Client, create /etc/wireguard/wg0.conf with the following content:
"
echo -ne "
[Interface]
Address = ${CLIENTIP}/32
PrivateKey = ${PRIVKEY}
DNS = ${DNS}
[Peer]
PublicKey = ${PEERPUBKEY}
PresharedKey = ${PRESHAREDKEY}
AllowedIPs = ${WHATGOESINTHETUNNEL}
Endpoint = ${PEER}
" > $TEMPFILE
# DNS-Server der OPNsense nutzen. Dann greifen auch die Werbeblocker
hline
echo -ne ${BIBlue}
cat $TEMPFILE
echo -ne ${Color_Off}
hline
echo "
You can start the tunnel by typing 'wg-quick up wg0'
"
read -n1 -esp "Hit [ENTER] for Phone-Config " ENTER
echo -e "
On a phone, just use the qr :-)"
cat $TEMPFILE | qrencode -t ansiutf8
rm -f $TEMPFILE