#!/bin/bash # Утилита для управления клиентами WireGuard # Version: 2.0.0 # Author: houseassassin # GitHub: https://github.com/houseassassin/proxy-core set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' WG_DIR="/etc/wireguard" WG_CONF="$WG_DIR/wg0.conf" print_msg() { echo -e "${GREEN}[INFO]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } check_root() { if [[ $EUID -ne 0 ]]; then print_error "Требуются права root" exit 1 fi } get_next_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_client() { read -p "Введите имя клиента: " CLIENT_NAME if [ -z "$CLIENT_NAME" ]; then print_error "Имя клиента не может быть пустым" exit 1 fi CLIENT_DIR="$WG_DIR/clients/$CLIENT_NAME" if [ -d "$CLIENT_DIR" ]; then print_error "Клиент $CLIENT_NAME уже существует" exit 1 fi mkdir -p "$CLIENT_DIR" cd "$CLIENT_DIR" 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=$(curl -s ifconfig.me) SERVER_PORT=$(grep ListenPort $WG_CONF | awk '{print $3}') CLIENT_IP=$(get_next_ip) cat >> $WG_CONF < client.conf <