使用的是openwrt内的wireguard.
目录结构如下所示.运行脚本后会自动生成client4(n+1)文件夹.
接下来只要在客户端内复制黏贴配置文件就行了
目录结构:
root@OpenWrt:/home/wireguard# ls
client0 client1 client2 client3 createCLient.sh server-privatekey server-publickey
root@OpenWrt:/home/wireguard# cat createCLient.sh
#!/bin/bash
# 设置 WireGuard 配置文件存放的基础目录
BASE_DIR="/home/wireguard"
# 检查目录是否存在,如果不存在,则创建
mkdir -p "$BASE_DIR"
# 获取 WireGuard 服务器的公钥
SERVER_PUBLIC_KEY=$(cat "$BASE_DIR/server-publickey")
# 获取当前最大的客户端编号
max_num=0
for dir in "$BASE_DIR"/client*; do
if [[ -d $dir ]]; then
num=$(basename $dir | sed 's/client//')
if [[ $num =~ ^[0-9]+$ ]] && [[ $num -gt $max_num ]]; then
max_num=$num
fi
fi
done
# 创建新的客户端目录
client_num=$((max_num + 1))
client_dir="$BASE_DIR/client$client_num"
mkdir -p "$client_dir"
# 在新目录内生成私钥和公钥
(cd "$client_dir" && wg genkey | tee "client${client_num}-privatekey" | wg pubkey > "client${client_num}-publickey")
# 生成 PresharedKey
preshared_key=$(wg genpsk)
echo $preshared_key > "$client_dir/client${client_num}-presharedkey"
# 计算客户端 IP 地址
client_ip=$((client_num + 4))
# 创建 WireGuard 客户端配置文件,这里是配置文件模板,按需更改
config_file="$client_dir/client${client_num}.conf"
cat > "$config_file" << EOF
[Interface]
PrivateKey = $(cat "$client_dir/client${client_num}-privatekey")
Address = 192.168.32.${client_ip}/32 #这里设置的是你wireguard网段,比如我设置的是192.168.32.0,你可以设置其它网段
DNS = 192.168.31.45 #设置为你的wireguard服务端IP
[Peer]
PublicKey = ${SERVER_PUBLIC_KEY}
PresharedKey = ${preshared_key}
Endpoint = 192.168.31.45:58890# 用于连接客户端与服务端的wireguardIP+端口(如 IP:端口 或 域名:端口)
#允许wireguard转发以此IP为目的地的流量,设置为0.0.0.0/0为转发全部流量(如果你使用安卓的时候既有内网回家需求又有翻出去的需求可以试试这个).
# 同时这里与之前设置的网段要对应(如我的192.168.31.0/24是实际内网的网段,而192.168.32.0/24是我之前在Address中设置的网段)
AllowedIPs = 192.168.31.0/24,192.168.32.0/24
PersistentKeepalive = 25 # 多少秒重新握手一次
EOF
# 显示生成的客户端配置文件内容
echo "客户端配置文件已生成在 $client_dir"
echo "配置文件内容如下:"
cat "$config_file"
脚本注释已经写得挺详细了,有什么疑问可以提