Accéder au contenu principal

AutoWG: a simple Bash script to connect two devices with Wireguard

 I made today a quite simple BASH script that allows to connect two devices running Wireguard (tested with Debian Linux 12, but should work with any device)

You can check it out (and fork it if you want) in this Gitlab Page

This is the source code as of now, but I could modify it later (any suggestions are welcome) :

#!/bin/bash
#
# AUTOWG written by Hamdi KADRI 
# No copyright in any form or kind
# This script is intended to create configurations for 
# a point-to-point Wireguard connection between a server
# and a client (/30 network)
#
# Step zero: declare configurations as variables
servercfg="[Interface]
Address = <serverwgIP>
SaveConfig = true
ListenPort = <port>
PrivateKey = <server-privatekey>
[Peer]
PublicKey = <client-pubkey>
AllowedIPs = <clientwgIP>
"
clientcfg="[Interface]
PrivateKey = <client-privatekey>
Address = <clientwgIP>
[Peer]
PublicKey = <server-pubkey>
AllowedIPs = 0.0.0.0/0
EndPoint = <serverIP>:<port>
PersistentKeepalive = 20"
# Step one: ask for some parameters (as an assistant)
# We need: point-to-point IPs, Server IP, port
echo "AutoWG requires some informations before generating your config"
echo "Please provide the next parameters."
echo "This script will not check if the IPs and netmask are valid!"
echo "Press Enter to continue.."
echo
read
read -p "Server IP for the Wireguard interface: " serverwgIP
echo 
read -p "Client IP for the Wireguard interface: " clientwgIP
echo 
read -p "Network Mask for both server and client WG interfaces: " netmask
echo 
read -p "Server Public IP address: " serverIP 
echo 
read -p "Network Port for Wireguard communication: " port
echo 
# Step two: generate keypairs
## Generate keypairs for machine 1 (client)
client_prvkey=$(wg genkey)
client_pubkey=$(echo $client_prvkey | wg pubkey)
## Generate keypairs for machine 2 (server)
server_prvkey=$(wg genkey)
server_pubkey=$(echo $server_prvkey | wg pubkey)
# Step three: generate configuration
serverconf=$(echo "$servercfg" | sed "s|<serverwgIP>|${serverwgIP}|g" | \
sed "s|<port>|${port}|g" | sed "s|<server-privatekey>|${server_prvkey}|g" |\
sed "s|<client-pubkey>|${client_pubkey}|g" | sed "s|<clientwgIP>|${clientwgIP}|g" )
clientconf=$(echo "$clientcfg" | sed "s|<client-privatekey>|${client_prvkey}|g" | \
sed "s|<clientwgIP>|${clientwgIP}|g" | sed "s|<server-pubkey>|${server_pubkey}|g" | \
sed "s|<serverIP>|${serverIP}|g" | sed "s|<port>|${port}|g" )
# Step four: display configuration for machine 1 (client)
echo 
echo "** Client Side Config **"
echo "$clientconf"
echo
# Step five: display configuration for machine 2 (server)
echo 
echo "** Server Side Config **"
echo "$serverconf"
echo
# Step six: Saving to a text file 
#
echo "** Client Side Config **" > wireguard-conf.txt
echo "$clientconf" >> wireguard-conf.txt
echo  >> wireguard-conf.txt

echo "** Server Side Config **" >> wireguard-conf.txt
echo "$serverconf" >> wireguard-conf.txt
echo >> wireguard-conf.txt

Commentaires