#!/bin/bash set -e WG_DIR="/etc/wireguard" WG_CONF="$WG_DIR/wg0.conf" INTERFACE="wg0" SUBNET_PREFIX="10.0.0" PORT=51820 DNS_SERVER="1.1.1.1" function get_next_ip() { USED_IPS=$(grep AllowedIPs "$WG_CONF" | grep -oE "$SUBNET_PREFIX\.[0-9]+" | sort -n -t. -k4) NEXT_IP=2 for ip in $USED_IPS; do last_octet=$(echo $ip | cut -d. -f4) if [[ $last_octet -ge $NEXT_IP ]]; then ((NEXT_IP=last_octet+1)) fi done echo "$SUBNET_PREFIX.$NEXT_IP" } function add_client() { CLIENT_NAME="$1" CLIENT_DIR="$WG_DIR/$CLIENT_NAME" mkdir -p "$CLIENT_DIR" cd "$CLIENT_DIR" echo "[+] Generating keys for $CLIENT_NAME..." wg genkey | tee private | wg pubkey > public PRIVATE_KEY=$(cat private) PUBLIC_KEY=$(cat public) SERVER_PUBLIC_KEY=$(cat "$WG_DIR/self/public") SERVER_IP=$(curl -s ifconfig.me) CLIENT_IP=$(get_next_ip) echo "[+] Creating config for $CLIENT_NAME ($CLIENT_IP)..." cat > "$CLIENT_DIR/$CLIENT_NAME.conf" <> "$WG_CONF" < "$WG_CONF.tmp" && mv "$WG_CONF.tmp" "$WG_CONF" echo "[+] Removing client files..." rm -rf "$CLIENT_DIR" echo "✅ Removed client: $CLIENT_NAME" } case "$1" in add) if [ -z "$2" ]; then echo "Usage: $0 add "; exit 1; fi add_client "$2" ;; remove) if [ -z "$2" ]; then echo "Usage: $0 remove "; exit 1; fi remove_client "$2" ;; *) echo "Usage: $0 {add|remove} " exit 1 ;; esac # bash wg_config.sh add mobile_2 # bash wg_config.sh remove mobile_2