要将上述 WireGuard 配置脚本扩展为支持 多节点集群(即多个服务器和客户端节点的配置),我们需要做出一些修改:
- 支持多个 服务器 和 客户端 配置。
- 自动为每个节点生成独特的配置文件,并确保它们能够互相通信。
- 支持集群模式,配置多个 服务器端 和 客户端 节点之间的连接。
以下是基于原始脚本的扩展版本,能够生成多个服务器和客户端节点的 WireGuard 配置文件。
扩展的脚本:setup-wireguard-cluster.sh
#!/bin/bash # 检查 WireGuard 是否已安装 check_wireguard() { if ! command -v wg &> /dev/null; then echo "WireGuard 未安装,正在安装 WireGuard..." if [ -f /etc/debian_version ]; then sudo apt update && sudo apt install -y wireguard elif [ -f /etc/redhat-release ]; then sudo yum install -y epel-release sudo yum install -y wireguard-tools else echo "不支持的操作系统" exit 1 fi else echo "WireGuard 已安装" fi } # 生成每个服务器节点和客户端节点的配置 generate_cluster_config() { echo "请输入集群中服务器的数量: " read SERVER_COUNT echo "请输入每个服务器的端口 (默认51820): " read SERVER_PORT SERVER_PORT=${SERVER_PORT:-51820} echo "请输入客户端的数量: " read CLIENT_COUNT # 生成每个服务器和客户端的配置 SERVER_CONFIG_DIR="/etc/wireguard/servers" CLIENT_CONFIG_DIR="/etc/wireguard/clients" mkdir -p $SERVER_CONFIG_DIR $CLIENT_CONFIG_DIR SERVER_PRIVATE_KEYS=() SERVER_PUBLIC_KEYS=() CLIENT_PRIVATE_KEYS=() CLIENT_PUBLIC_KEYS=() # 生成每个服务器节点的私钥和公钥 for ((i=1; i<=$SERVER_COUNT; i++)); do SERVER_PRIVATE_KEY=$(wg genkey) SERVER_PUBLIC_KEY=$(echo $SERVER_PRIVATE_KEY | wg pubkey) SERVER_PRIVATE_KEYS+=("$SERVER_PRIVATE_KEY") SERVER_PUBLIC_KEYS+=("$SERVER_PUBLIC_KEY") done # 生成每个客户端的私钥和公钥 for ((i=1; i<=$CLIENT_COUNT; i++)); do CLIENT_PRIVATE_KEY=$(wg genkey) CLIENT_PUBLIC_KEY=$(echo $CLIENT_PRIVATE_KEY | wg pubkey) CLIENT_PRIVATE_KEYS+=("$CLIENT_PRIVATE_KEY") CLIENT_PUBLIC_KEYS+=("$CLIENT_PUBLIC_KEY") done # 生成每个服务器的配置文件 for ((i=1; i<=$SERVER_COUNT; i++)); do SERVER_CONFIG_FILE="$SERVER_CONFIG_DIR/wg${i}.conf" echo "[Interface]" > $SERVER_CONFIG_FILE echo "Address = 10.0.0.$((i+1))/24" >> $SERVER_CONFIG_FILE echo "PrivateKey = ${SERVER_PRIVATE_KEYS[$i-1]}" >> $SERVER_CONFIG_FILE echo "ListenPort = $SERVER_PORT" >> $SERVER_CONFIG_FILE # 添加客户端的配置到每个服务器 for ((j=1; j<=$CLIENT_COUNT; j++)); do echo "[Peer]" >> $SERVER_CONFIG_FILE echo "PublicKey = ${CLIENT_PUBLIC_KEYS[$j-1]}" >> $SERVER_CONFIG_FILE echo "AllowedIPs = 10.0.0.$((j+1))/32" >> $SERVER_CONFIG_FILE done done # 生成每个客户端的配置文件 for ((i=1; i<=$CLIENT_COUNT; i++)); do CLIENT_CONFIG_FILE="$CLIENT_CONFIG_DIR/client${i}.conf" echo "[Interface]" > $CLIENT_CONFIG_FILE echo "Address = 10.0.0.$((i+1))/32" >> $CLIENT_CONFIG_FILE echo "PrivateKey = ${CLIENT_PRIVATE_KEYS[$i-1]}" >> $CLIENT_CONFIG_FILE # 添加服务器的配置到每个客户端 for ((j=1; j<=$SERVER_COUNT; j++)); do echo "[Peer]" >> $CLIENT_CONFIG_FILE echo "PublicKey = ${SERVER_PUBLIC_KEYS[$j-1]}" >> $CLIENT_CONFIG_FILE echo "Endpoint = 服务器${j}_IP:$SERVER_PORT" >> $CLIENT_CONFIG_FILE echo "AllowedIPs = 0.0.0.0/0" >> $CLIENT_CONFIG_FILE done done echo "多节点集群配置文件已生成:" echo "服务器配置文件目录: $SERVER_CONFIG_DIR" echo "客户端配置文件目录: $CLIENT_CONFIG_DIR" } # 启动 WireGuard 服务 start_wireguard() { echo "正在启动 WireGuard 服务..." for ((i=1; i<=$SERVER_COUNT; i++)); do sudo systemctl start wg-quick@wg$i sudo systemctl enable wg-quick@wg$i done echo "WireGuard 服务已启动" } # 主程序 main() { check_wireguard generate_cluster_config start_wireguard } main
主要更新点:
- 多服务器支持:脚本允许配置多个服务器节点,并为每个服务器生成独立的配置文件。
- 多客户端支持:脚本允许配置多个客户端,并为每个客户端生成独立的配置文件。
- 地址分配:每个节点(服务器和客户端)分配一个唯一的 IP 地址(根据服务器的数量和客户端数量动态计算)。
- 集群配置:服务器和客户端的配置文件都会包含集群中的所有节点的信息,确保它们能彼此通信。
使用方法:
-
保存脚本为
setup-wireguard-cluster.sh
,并给它执行权限:chmod +x setup-wireguard-cluster.sh
-
执行脚本:
sudo ./setup-wireguard-cluster.sh
-
按照提示输入服务器和客户端的数量等信息。
配置文件示例:
假设有两个服务器和两个客户端,生成的配置文件将如下所示:
服务器 1 (wg1.conf
):
[Interface] Address = 10.0.0.2/24 PrivateKey = SERVER1_PRIVATE_KEY ListenPort = 51820 [Peer] PublicKey = CLIENT1_PUBLIC_KEY AllowedIPs = 10.0.0.3/32 [Peer] PublicKey = CLIENT2_PUBLIC_KEY AllowedIPs = 10.0.0.4/32
客户端 1 (client1.conf
):
[Interface] Address = 10.0.0.3/32 PrivateKey = CLIENT1_PRIVATE_KEY [Peer] PublicKey = SERVER1_PUBLIC_KEY Endpoint = 服务器1_IP:51820 AllowedIPs = 0.0.0.0/0
客户端 2 (client2.conf
):
[Interface] Address = 10.0.0.4/32 PrivateKey = CLIENT2_PRIVATE_KEY [Peer] PublicKey = SERVER1_PUBLIC_KEY Endpoint = 服务器1_IP:51820 AllowedIPs = 0.0.0.0/0
总结:
这个脚本适用于多节点 WireGuard 集群配置,可以根据需要扩展服务器和客户端数量,自动生成相应的配置文件,并启动 WireGuard 服务,帮助用户快速配置多节点的 WireGuard VPN 集群。
标签:Shell,CLIENT,半自动化,echo,WireGuard,服务器,SERVER,CONFIG,客户端 From: https://www.cnblogs.com/javazhu/p/18539122