分享一下我的wireguard自动生成配置文件的脚本

使用的是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"

脚本注释已经写得挺详细了,有什么疑问可以提

2 个赞

很好!
不过还是不如基于web的操作方便。

增加客户端后,需要更新 服务端的 Peer 配置,以及热重载配置,没看到这部分的内容 :thinking:

忘了,等会我更新下

openwrt中设置peers相关教程可以参考 OpenWRT配置WireGuard客户端 - 风雪博客 (fxnetw.com)

生成的文件夹下包含以下内容:

第一个是预共享密钥,第二个是私钥,第三个是公钥,按照openwrt给出的选项填入就好,


最后点击

重新连接

1 个赞

我用的wireguard-install,感觉还不错

1 个赞

From 配置调优 to 开发调优