WireGuard 多节点集群的Shell 半自动化配置脚本

news/2024/11/13 10:19:11/文章来源:https://www.cnblogs.com/javazhu/p/18539122

要将上述 WireGuard 配置脚本扩展为支持 多节点集群(即多个服务器和客户端节点的配置),我们需要做出一些修改:

  1. 支持多个 服务器 和 客户端 配置。
  2. 自动为每个节点生成独特的配置文件,并确保它们能够互相通信。
  3. 支持集群模式,配置多个 服务器端 和 客户端 节点之间的连接。

以下是基于原始脚本的扩展版本,能够生成多个服务器和客户端节点的 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

主要更新点:

  1. 多服务器支持:脚本允许配置多个服务器节点,并为每个服务器生成独立的配置文件。
  2. 多客户端支持:脚本允许配置多个客户端,并为每个客户端生成独立的配置文件。
  3. 地址分配:每个节点(服务器和客户端)分配一个唯一的 IP 地址(根据服务器的数量和客户端数量动态计算)。
  4. 集群配置:服务器和客户端的配置文件都会包含集群中的所有节点的信息,确保它们能彼此通信。

使用方法:

  1. 保存脚本为 setup-wireguard-cluster.sh,并给它执行权限:

    chmod +x setup-wireguard-cluster.sh

     

  2. 执行脚本:

    sudo ./setup-wireguard-cluster.sh

     

  3. 按照提示输入服务器和客户端的数量等信息。

配置文件示例:

假设有两个服务器和两个客户端,生成的配置文件将如下所示:

服务器 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 集群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831623.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

D-FINE环境搭建推理测试

​ 引子在目标检测领域,内卷严重的实时目标检测 (Real-time Object Detection) 领域,性能与效率始终是难以平衡的核心问题。绝大多数现有的 SOTA 方法仅依赖于更先进的模块替换或训练策略,导致性能逐渐趋于饱和。前阵子YOLOv11横空出世(感兴趣的童鞋可以移步YOLOv11环境搭建…

基于.NET开源、功能强大且灵活的工作流引擎框架

前言 工作流引擎框架在需要自动化处理复杂业务流程、提高工作效率和确保流程顺畅执行的场景中得到了广泛应用。今天大姚给大家推荐一款基于.NET开源、功能强大且灵活的工作流引擎框架:elsa-core。框架介绍 elsa-core是一个.NET开源、免费(MIT License)、功能强大且灵活的工作…

Dedecms 织梦上传图片失败 ERROR:Copy Uploadfile Error! 提示

问题:上传图片时提示 ERROR: Copy Uploadfile Error!。原因:上传的文件损坏,或上传目录无写入权限。解决方法:尝试上传其他图片:检查上传的图片是否损坏,尝试上传其他图片。给上传目录写入权限:Linux 服务器:通过 FTP 设置 uploads 目录及其子文件夹为 777 权限。 Wind…

Web服务器被配置为不列出此目录的内容

创建或上传首页文件在站点根目录下创建一个首页文件,如 index.html、index.asp、index.aspx 或 default.aspx。 确保文件内容有效,例如对于 index.html,可以包含以下基本内容:<!DOCTYPE html> <html> <head><title>我的网站</title> </he…

PbootCMS模板内页如何调用相关文章

使用 {pboot:lists code={sort:scode} num=4} 标签调用相关文章,其中 num=4 表示调用4篇文章。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,精通PHP+MYSQL、HTML5、CSS3、Javascript等。承接:企业仿站、网站修改、网站改版、BUG修复、问题处理…

C#实战:使用腾讯云识别服务轻松提取火车票信息

公司内部涉及到车票报销的时候一个个输入火车票信息非常麻烦,尤其是出差比较多的企业,这对于财务人员的涉及报销单据录入还是非常麻烦的。今天给大家分享使用腾讯云车票识别服务,轻松提取火车票信息。这样可以方便把识别服务集成到业务系统,可以大大减轻财务人员录入单据信…

《Django 5 By Example》阅读笔记:p1-p16

《Django 5 By Example》学习第1天,p1-p16总结,总计16页。 一、技术总结 1.Django基本操作 (1)创建 project & 创建 app django-admin startproject mysitedjango-admin startapp blog(2)定义model (3)启动项目 python manage.py runserver二、英语总结(生词:8) 1.finte…

2024/11/11

软件设计 实验12:外观模式 在计算机主机(Mainframe)中,只需要按下主机的开机按钮(on()),即可调用其他硬件设备和软件的启动方法 ,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(HardDisk)的读取(read())、操作系统(OS)的载入(load()),如果某一过程发生错误则计算…

2024.11.6(周三)

用透明组合模式实现教材中的“文件夹浏览”这个例子。 实验要求: 1.文件的执行不需真正实现,只需简单提示即可; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 #include <iostream> #include <string> #include<list> using namespace std;class Abst…

2024.11.7(周四)

用装饰模式模拟手机功能的升级过程:简单的手机(SimplePhone)在接收来电时,会发出声音提醒主人;而JarPhone除了声音还能振动;更高级的手机(ComplexPhone)除了声音、振动外,还有灯光闪烁提示。 实验要求: 1.提交类图; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 #i…

2024.11.5(周二)

用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。 实验要求: 1.画出对应的类图; 2.提交源代码; 3.注意编程规范。1、类图2、源代码 (1) Bus.java package test;public class Bus implements Vehicle{@Overridepublic void run() {Sy…

CFAT:三角窗口实现图像超分辨率

CFAT:三角窗口实现图像超分辨率基于变换器的模型通过利用其固有的捕获复杂上下文特征的能力,彻底改变了图像超分辨率(SR)的效果。如今,在Transformer架构中使用的重叠矩形移位窗口技术是超分辨率模型中的一种常见做法,可以提高图像放大的质量和鲁棒性。然而,它在边界处存…