#!/bin/bash # WireGuard common functions library # Version: 2.1.1 # Author: houseassassin # Source common library SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/common.sh" WG_DIR="${WG_DIR:-/etc/wireguard}" WG_CONF="$WG_DIR/wg0.conf" # Get next available IP for WireGuard client get_next_wg_ip() { if [ ! -f "$WG_CONF" ]; then echo "10.0.0.2" return fi LAST_IP=$(grep "AllowedIPs" "$WG_CONF" | grep -oE "10\.0\.0\.[0-9]+" | sort -t . -k 4 -n | tail -1) if [ -z "$LAST_IP" ]; then echo "10.0.0.2" else LAST_NUM=$(echo $LAST_IP | cut -d. -f4) NEXT_NUM=$((LAST_NUM + 1)) echo "10.0.0.$NEXT_NUM" fi } # Add WireGuard client add_wireguard_client() { local client_name=$1 if [ -z "$client_name" ]; then read -p "Введите имя клиента: " client_name fi if ! validate_name "$client_name"; then return 1 fi local CLIENT_DIR="$WG_DIR/clients/$client_name" if [ -d "$CLIENT_DIR" ]; then error "Клиент $client_name уже существует" return 1 fi mkdir -p "$CLIENT_DIR" cd "$CLIENT_DIR" # Generate keys wg genkey | tee private.key | wg pubkey > public.key chmod 600 private.key CLIENT_PRIVATE_KEY=$(cat private.key) CLIENT_PUBLIC_KEY=$(cat public.key) SERVER_PUBLIC_KEY=$(cat $WG_DIR/server_public.key) SERVER_IP=$(get_server_ip) SERVER_PORT=$(grep ListenPort $WG_CONF | awk '{print $3}') CLIENT_IP=$(get_next_wg_ip) # Add peer to server config cat >> $WG_CONF < client.conf <