要将上述 WireGuard 配置脚本扩展为支持 多节点集群(即多个服务器和客户端节点的配置),我们需要做出一些修改:
- 支持多个 服务器 和 客户端 配置。
- 自动为每个节点生成独特的配置文件,并确保它们能够互相通信。
- 支持集群模式,配置多个 服务器端 和 客户端 节点之间的连接。
以下是基于原始脚本的扩展版本,能够生成多个服务器和客户端节点的 WireGuard 配置文件。
扩展的脚本:setup-wireguard-cluster.sh
#!/bin/bash# 检查 WireGuard 是否已安装 check_wireguard() {if ! command -v wg &> /dev/null; thenecho "WireGuard 未安装,正在安装 WireGuard..."if [ -f /etc/debian_version ]; thensudo apt update && sudo apt install -y wireguardelif [ -f /etc/redhat-release ]; thensudo yum install -y epel-releasesudo yum install -y wireguard-toolselseecho "不支持的操作系统"exit 1fielseecho "WireGuard 已安装"fi }# 生成每个服务器节点和客户端节点的配置 generate_cluster_config() {echo "请输入集群中服务器的数量: "read SERVER_COUNTecho "请输入每个服务器的端口 (默认51820): "read SERVER_PORTSERVER_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_DIRSERVER_PRIVATE_KEYS=()SERVER_PUBLIC_KEYS=()CLIENT_PRIVATE_KEYS=()CLIENT_PUBLIC_KEYS=()# 生成每个服务器节点的私钥和公钥for ((i=1; i<=$SERVER_COUNT; i++)); doSERVER_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++)); doCLIENT_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++)); doSERVER_CONFIG_FILE="$SERVER_CONFIG_DIR/wg${i}.conf"echo "[Interface]" > $SERVER_CONFIG_FILEecho "Address = 10.0.0.$((i+1))/24" >> $SERVER_CONFIG_FILEecho "PrivateKey = ${SERVER_PRIVATE_KEYS[$i-1]}" >> $SERVER_CONFIG_FILEecho "ListenPort = $SERVER_PORT" >> $SERVER_CONFIG_FILE# 添加客户端的配置到每个服务器for ((j=1; j<=$CLIENT_COUNT; j++)); doecho "[Peer]" >> $SERVER_CONFIG_FILEecho "PublicKey = ${CLIENT_PUBLIC_KEYS[$j-1]}" >> $SERVER_CONFIG_FILEecho "AllowedIPs = 10.0.0.$((j+1))/32" >> $SERVER_CONFIG_FILEdonedone# 生成每个客户端的配置文件for ((i=1; i<=$CLIENT_COUNT; i++)); doCLIENT_CONFIG_FILE="$CLIENT_CONFIG_DIR/client${i}.conf"echo "[Interface]" > $CLIENT_CONFIG_FILEecho "Address = 10.0.0.$((i+1))/32" >> $CLIENT_CONFIG_FILEecho "PrivateKey = ${CLIENT_PRIVATE_KEYS[$i-1]}" >> $CLIENT_CONFIG_FILE# 添加服务器的配置到每个客户端for ((j=1; j<=$SERVER_COUNT; j++)); doecho "[Peer]" >> $CLIENT_CONFIG_FILEecho "PublicKey = ${SERVER_PUBLIC_KEYS[$j-1]}" >> $CLIENT_CONFIG_FILEecho "Endpoint = 服务器${j}_IP:$SERVER_PORT" >> $CLIENT_CONFIG_FILEecho "AllowedIPs = 0.0.0.0/0" >> $CLIENT_CONFIG_FILEdonedoneecho "多节点集群配置文件已生成:"echo "服务器配置文件目录: $SERVER_CONFIG_DIR"echo "客户端配置文件目录: $CLIENT_CONFIG_DIR" }# 启动 WireGuard 服务 start_wireguard() {echo "正在启动 WireGuard 服务..."for ((i=1; i<=$SERVER_COUNT; i++)); dosudo systemctl start wg-quick@wg$isudo systemctl enable wg-quick@wg$idoneecho "WireGuard 服务已启动" }# 主程序 main() {check_wireguardgenerate_cluster_configstart_wireguard }main
主要更新点:
- 多服务器支持:脚本允许配置多个服务器节点,并为每个服务器生成独立的配置文件。
- 多客户端支持:脚本允许配置多个客户端,并为每个客户端生成独立的配置文件。
- 地址分配:每个节点(服务器和客户端)分配一个唯一的 IP 地址(根据服务器的数量和客户端数量动态计算)。
- 集群配置:服务器和客户端的配置文件都会包含集群中的所有节点的信息,确保它们能彼此通信。
使用方法:
-
保存脚本为
setup-wireguard-cluster.sh
,并给它执行权限: -
执行脚本:
-
按照提示输入服务器和客户端的数量等信息。
配置文件示例:
假设有两个服务器和两个客户端,生成的配置文件将如下所示:
服务器 1 (wg1.conf
):
客户端 1 (client1.conf
):
客户端 2 (client2.conf
):
总结:
这个脚本适用于多节点 WireGuard 集群配置,可以根据需要扩展服务器和客户端数量,自动生成相应的配置文件,并启动 WireGuard 服务,帮助用户快速配置多节点的 WireGuard VPN 集群。