Skip to content

Instantly share code, notes, and snippets.

@judge2020
Forked from Belphemur/generate-client.sh
Created November 2, 2019 04:51
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save judge2020/e9631be086ea105005614c70a8999937 to your computer and use it in GitHub Desktop.
Save judge2020/e9631be086ea105005614c70a8999937 to your computer and use it in GitHub Desktop.
Generate a new client configuration for WireGuard
#!/usr/bin/env bash
if [ -z "$1" ]
then
echo "$0 client-name"
exit 1
fi
SERVER_IP=10.200.200.2
PORT=51820
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
LAST_IP_FILE=$DIR/lastip
LAST_IP=$(cat $LAST_IP_FILE)
if [ -z "$LAST_IP" ]
then
LAST_IP=$SERVER_IP
fi
CLIENT_DIR=$DIR/$1
#CLIENT_CONF=$DIR/$1.tar.gz
nextip(){
IP=$1
IP_HEX=$(printf '%.2X%.2X%.2X%.2X\n' `echo $IP | sed -e 's/\./ /g'`)
NEXT_IP_HEX=$(printf %.8X `echo $(( 0x$IP_HEX + 1 ))`)
NEXT_IP=$(printf '%d.%d.%d.%d\n' `echo $NEXT_IP_HEX | sed -r 's/(..)/0x\1 /g'`)
echo "$NEXT_IP"
}
PUBLIC_IP=$(dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'"' '{ print $2}')
NEW_IP=$(nextip $LAST_IP)
mkdir -p $CLIENT_DIR
umask 077 && wg genkey | tee $CLIENT_DIR/privatekey | wg pubkey > $CLIENT_DIR/publickey && umask u=rwx,go= && cat > $CLIENT_DIR/wg0.conf << _EOF
[Interface]
Address = $NEW_IP/32
PrivateKey = $(cat $CLIENT_DIR/privatekey)
[Peer]
PublicKey = $(cat $DIR/server/publickey)
AllowedIPs = 0.0.0.0/0
Endpoint = $PUBLIC_IP:$PORT
PersistentKeepalive = 25
_EOF
echo $NEW_IP > $LAST_IP_FILE
#tar cafv $CLIENT_CONF $CLIENT_DIR
#echo "Client configuration available: $CLIENT_CONF"
#Add to configuration
sudo wg set wg0 peer $(cat $CLIENT_DIR/publickey) allowed-ips $NEW_IP/32
#Create route
#sudo ip route add $NEW_IP/32 dev wg0
qrencode -t ansiutf8 < $CLIENT_DIR/wg0.conf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment