首页 > 系统相关 >WireGuard 多节点集群的Shell 半自动化配置脚本

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

时间:2024-11-11 09:19:00浏览次数:1  
标签:Shell CLIENT 半自动化 echo WireGuard 服务器 SERVER CONFIG 客户端

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

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

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

主要更新点:

  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 集群。

标签:Shell,CLIENT,半自动化,echo,WireGuard,服务器,SERVER,CONFIG,客户端
From: https://www.cnblogs.com/javazhu/p/18539122

相关文章

  • Xshell 7
    1Xshell7工具——更改用户数据文件夹就是此电脑目录下的文档该目录下的7Xshell下的applog ColorSchemeFiles 配色方案文件目录HighlightSetFiles 突出显示集目录Logs日志QuickButtonFiles 快速命令集Scripts 脚本文件Sessions 会话文件会话文件目......
  • shell脚本在linux无法运行
    shell脚本在linux无法运行在windows写的.sh脚本,直接把文件传到Linux之后运行,报错:$bash./v_1.sh:commandnotfound'/v_1.sh:line4:syntaxerrornearunexpectedtoken`do'/v_1.sh:line4:`do脚本内容是:#shellvirusI#forfilein./infect/*docp$0$fi......
  • SRE云计算运维之基础篇二:权限管理,VIM工具,文件查询及shell基础
    目录文件权限管理访问控制列表ACLVIM的使用及内容查询文本三剑客基本正则和扩展正则shell脚本之变量简单总结一下linux中的权限1.首先介绍一下关于linux中的用户:Linux中每个用户是通过UserId(UID)来唯一标识的,且Linux中可以将一个或多个用户加入用户组中,用户组是通过G......
  • fabric服务器选择xshell连接
    前置工具Xshell云服务器选择aliyun.com注意:可以免费使用三个月,这里不做介绍,下图是按量付费Xshell连接创建密钥对完成密钥对的绑定ssh<你的服务器公网ip>登录连接成功如何使用password登录前置:需要将上文的操作完成vi/etc/ssh/sshd_config(连接......
  • Shell系列(2)正则表达式、awk与sed用法
    一、正则表达式正则表达式(RegularExpression,简称regex或regexp)是一种强大的文本处理工具,用于搜索、替换、检索或校验符合特定模式的文本。正则表达式由一系列字符组成,这些字符可以是普通字符(如字母、数字等)或特殊字符(称为元字符),它们定义了搜索模式。1、基本正则与扩展正......
  • COMP2211A small shell interface
    Chapter5Week4:CreatingasmallshellinterfaceYoumustsubmityourworktotheappropriatesubmissionpointinGradescope,whichwillbeautomaticallymarked.Youshouldsubmitasinglefilecalledmy_shell.c.Anyotherfilesyousubmitwillnotbema......
  • 第二周学习笔记Linux:Linux用户权限管理 |文本处理|shell基础
    用户权限命令以及ACL权限相关命令1.Linux安全模型资源分派:Authenticaton:登陆认证,验证用户身份Authorization:授权,不同的用户设置不同权限Accouting:审计,检查用户的时候行为即Linux的AAA认证,是针对网络设备的网络访问控制策略和安全模型1用户Linux是多系统用户,可以......
  • Shell概述、编写及执行脚本、Shell变量+数值运算
    一、shell基本介绍 1.1 什么是shell◆ 在Linux内核与用户之间的解释器程序◆通常指/bin/bash◆负责向内核翻译及传达用户/程序指令◆相当于操作系统的“外壳”1.2 shell使用方式◆交互式 ——命令行-----人工干预、智能化程度高-----逐条解释执行、效率......
  • 监控 Windows 更新补丁安装过程中的文件夹和文件,可以通过 PowerShell 监控 Windows 更
    监控Windows更新补丁安装过程中的文件夹和文件,可以通过PowerShell监控Windows更新的日志文件夹、注册表或其他相关位置。Windows更新会在多个地方生成日志和文件,下面提供了一个使用PowerShell监控Windows更新相关路径、文件夹及文件的示例。监控Windows更新相关的文......
  • c++执行shell操作
     message("----->>>>>shelldemo/CMakeLists.txt")#收集当前目录下所有的.cpp文件aux_source_directory(.DIR_SRCS)#添加可执行文件add_executable(shelldemo${DIR_SRCS})#链接需要的库target_link_libraries(shelldemo${LIB_LIB})/shelldemo/CMakeList......