From 624c3cef7ea8772b0c2afe1978d2c64e933d21df Mon Sep 17 00:00:00 2001 From: fscarmen Date: Wed, 25 Feb 2026 09:30:52 +0000 Subject: [PATCH] v3.2.2 Restore Reserved configuration for Warp usage. --- README.md | 6 ++++-- api.sh | 34 +++++++++++++++++----------------- menu.sh | 47 +++++++++++++++++++---------------------------- 3 files changed, 40 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index ef34a77..e5c060e 100644 --- a/README.md +++ b/README.md @@ -22,9 +22,11 @@ * * * ## 更新信息 -2026.02.22 mehu.sh v3.2.1 / warp-go.sh v1.3.1 1. 移除系统版本号判断,以支持滚动发行版; 2. cloudflare.now.cc -> cloudflare.nyc.mn +2026.02.25 menu.sh v3.2.2 Restore Reserved configuration for Warp usage; 由于部分地区使用 Warp,仍需保留 Reserved 配置,因此恢复之前的配置文件 -2026.01.02 mehu.sh v3.2.0 / warp-go.sh v1.3.0 1. 账户管理优化: 顺应 Cloudflare 对 WARP 账户政策的调整,移除了已过时的 WARP+ 和 Teams 账户类型,精简了安装流程及账户升级功能(受影响命令:warp a); 2. 修复卸载 Bug: 修正了 Linux Client 在 Proxy 模式下,卸载程序后误操作路由规则而导致的网络故障问题; 3. 性能提升: 引入自建 IP API 替代第三方接口,显著提升了 IP 信息获取和脚本初始化的速度; 4. 脚本清理: 移除了部分不再使用的冗余脚本提示语及过时代码块,使输出界面更加简洁; 5. 刷 IP 逻辑: 将 Netflix 解锁检测的默认首选项从 IPv4 调整为 IPv6 +2026.02.22 menu.sh v3.2.1 / warp-go.sh v1.3.1 1. 移除系统版本号判断,以支持滚动发行版; 2. cloudflare.now.cc -> cloudflare.nyc.mn + +2026.01.02 menu.sh v3.2.0 / warp-go.sh v1.3.0 1. 账户管理优化: 顺应 Cloudflare 对 WARP 账户政策的调整,移除了已过时的 WARP+ 和 Teams 账户类型,精简了安装流程及账户升级功能(受影响命令:warp a); 2. 修复卸载 Bug: 修正了 Linux Client 在 Proxy 模式下,卸载程序后误操作路由规则而导致的网络故障问题; 3. 性能提升: 引入自建 IP API 替代第三方接口,显著提升了 IP 信息获取和脚本初始化的速度; 4. 脚本清理: 移除了部分不再使用的冗余脚本提示语及过时代码块,使输出界面更加简洁; 5. 刷 IP 逻辑: 将 Netflix 解锁检测的默认首选项从 IPv4 调整为 IPv6 2025.09.10 menu.sh v3.1.8 增强脚本对 Arch Linux 及 EndeavourOS 系统的兼容性 diff --git a/api.sh b/api.sh index 7282046..4b15433 100644 --- a/api.sh +++ b/api.sh @@ -18,26 +18,26 @@ fetch_account_information() { TOKEN=$(grep 'warp_token' $REGISTER_PATH | sed "s#.*>\(.*\)<.*#\1#") CLIENT_ID=$(grep 'client_id' $REGISTER_PATH | sed "s#.*client_id":"\([^&]\{4\}\)&.*#\1#") - # 官方 api 文件 + # 官方 api 文件,默认存放路径为 /etc/wireguard/warp-account.conf elif grep -q 'client_id' $REGISTER_PATH; then - ID=$(grep -m1 '"id' "$REGISTER_PATH" | cut -d\" -f4) - TOKEN=$(grep '"token' "$REGISTER_PATH" | cut -d\" -f4) - CLIENT_ID=$(grep 'client_id' "$REGISTER_PATH" | cut -d\" -f4) + ID=$(awk -F '"' '/"id"/ {print $4; exit}' "$REGISTER_PATH") + TOKEN=$(awk -F '"' '/"token"/ {print $4; exit}' "$REGISTER_PATH") + CLIENT_ID=$(awk -F '"' '/client_id/ {print $4; exit}' "$REGISTER_PATH") # client 文件,默认存放路径为 /var/lib/cloudflare-warp/reg.json elif grep -q 'registration_id' $REGISTER_PATH; then - ID=$(cut -d\" -f4 "$REGISTER_PATH") - TOKEN=$(cut -d\" -f8 "$REGISTER_PATH") + ID=$(sed 's/.*registration_id":"\([^"]\+\)".*/\1/' "$REGISTER_PATH") + TOKEN=$(sed 's/.*api_token":"\([^"]\+\)".*/\1/' "$REGISTER_PATH") # wgcf 文件,默认存放路径为 /etc/wireguard/wgcf-account.toml elif grep -q 'access_token' $REGISTER_PATH; then - ID=$(grep 'device_id' "$REGISTER_PATH" | cut -d\' -f2) - TOKEN=$(grep 'access_token' "$REGISTER_PATH" | cut -d\' -f2) + ID=$(awk -F"'" '/device_id/ {print $2; exit}' "$REGISTER_PATH") + TOKEN=$(awk -F"'" '/access_token/ {print $2; exit}' "$REGISTER_PATH") # warp-go 文件,默认存放路径为 /opt/warp-go/warp.conf elif grep -q 'PrivateKey' $REGISTER_PATH; then - ID=$(awk -F' *= *' '/^Device/{print $2}' "$REGISTER_PATH") - TOKEN=$(awk -F' *= *' '/^Token/{print $2}' "$REGISTER_PATH") + ID=$(awk '/^Device/ {print $NF; exit}' "$REGISTER_PATH") + TOKEN=$(awk '/^Token/ {print $NF; exit}' "$REGISTER_PATH") else echo " There is no registered account information, please check the content. " && exit 1 @@ -66,9 +66,9 @@ register_account() { PRIVATE_KEY=$(wg genkey) PUBLIC_KEY=$(wg pubkey <<<"$PRIVATE_KEY") elif [[ -x "$(type -p openssl)" && -x "$(type -p xxd)" && -x "$(type -p base64)" ]]; then - KEY_PAIR=$(openssl genpkey -algorithm X25519 -text) - PRIVATE_KEY=$(echo $KEY_PAIR | sed 's/.*priv:\(.*\)pub.*/\1/' | xxd -r -p | base64) - PUBLIC_KEY=$(echo $KEY_PAIR | sed 's/.*pub://' | xxd -r -p | base64) + KEY_PAIR=$(openssl genpkey -algorithm X25519 | openssl pkey -text -noout) + PRIVATE_KEY=$(echo $KEY_PAIR | sed 's/.*priv:\(.*\)pub.*/\1/; s/ //g' | xxd -r -p | base64) + PUBLIC_KEY=$(echo $KEY_PAIR | sed 's/.*pub://; s/ //g'| xxd -r -p | base64) else WG_API=$(curl -m5 -sSL "https://warp.cloudflare.now.cc/?run=key&format=yaml") PRIVATE_KEY=$(awk 'NR==2 {print $2}' <<<"$WG_API") @@ -275,10 +275,10 @@ while [[ $# -ge 1 ]]; do shift ;; -t | --token) - shift - TEAM_TOKEN="$1" - shift - ;; + shift + TEAM_TOKEN="$1" + shift + ;; -h | --help) help exit diff --git a/menu.sh b/menu.sh index d2d3cb4..5b52e01 100644 --- a/menu.sh +++ b/menu.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # 当前脚本版本号 -VERSION='3.2.1' +VERSION='3.2.2' # 环境变量用于在Debian或Ubuntu操作系统中设置非交互式(noninteractive)安装模式 export DEBIAN_FRONTEND=noninteractive @@ -13,8 +13,8 @@ trap cleanup_resources EXIT INT TERM E[0]="\n Language:\n 1. English (default) \n 2. 简体中文" C[0]="${E[0]}" -E[1]="1. Remove OS version checks to support rolling releases; 2. cloudflare.now.cc -> cloudflare.nyc.mn" -C[1]="1. 移除系统版本号判断,以支持滚动发行版; 2. cloudflare.now.cc -> cloudflare.nyc.mn" +E[1]="Restore Reserved configuration for Warp usage" +C[1]="由于部分地区使用 Warp,仍需保留 Reserved 配置,因此恢复之前的配置文件" E[2]="The script must be run as root, you can enter sudo -i and then download and run again. Feedback: [https://github.com/fscarmen/warp-sh/issues]" C[2]="必须以root方式运行脚本,可以输入 sudo -i 后重新下载运行,问题反馈:[https://github.com/fscarmen/warp-sh/issues]" E[3]="The TUN module is not loaded. You should turn it on in the control panel. Ask the supplier for more help. Feedback: [https://github.com/fscarmen/warp-sh/issues]" @@ -440,32 +440,16 @@ warp_api(){ local FILE_PATH=$2 if [ -s "$FILE_PATH" ]; then - # Teams 账户文件 - if grep -q 'xml version' $FILE_PATH; then - local WARP_DEVICE_ID=$(grep 'correlation_id' $FILE_PATH | sed "s#.*>\(.*\)<.*#\1#") - local WARP_TOKEN=$(grep 'warp_token' $FILE_PATH | sed "s#.*>\(.*\)<.*#\1#") - local WARP_CLIENT_ID=$(grep 'client_id' $FILE_PATH | sed "s#.*client_id":"\([^&]\{4\}\)&.*#\1#") - - # 官方 api 文件 - elif grep -q 'client_id' $FILE_PATH; then - local WARP_DEVICE_ID=$(grep -m1 '"id' "$FILE_PATH" | cut -d\" -f4) - local WARP_TOKEN=$(grep '"token' "$FILE_PATH" | cut -d\" -f4) - local WARP_CLIENT_ID=$(grep 'client_id' "$FILE_PATH" | cut -d\" -f4) + # 官方 api 文件,默认存放路径为 /etc/wireguard/warp-account.conf + if grep -q 'client_id' $FILE_PATH; then + local WARP_DEVICE_ID=$(awk -F '"' '/"id"/ {print $4; exit}' "$FILE_PATH") + local WARP_TOKEN=$(awk -F '"' '/"token"/ {print $4; exit}' "$FILE_PATH") + local WARP_CLIENT_ID=$(awk -F '"' '/client_id/ {print $4; exit}' "$FILE_PATH") # client 文件,默认存放路径为 /var/lib/cloudflare-warp/reg.json elif grep -q 'registration_id' $FILE_PATH; then - local WARP_DEVICE_ID=$(cut -d\" -f4 "$FILE_PATH") - local WARP_TOKEN=$(cut -d\" -f8 "$FILE_PATH") - - # wgcf 文件,默认存放路径为 /etc/wireguard/wgcf-account.toml - elif grep -q 'access_token' $FILE_PATH; then - local WARP_DEVICE_ID=$(grep 'device_id' "$FILE_PATH" | cut -d\' -f2) - local WARP_TOKEN=$(grep 'access_token' "$FILE_PATH" | cut -d\' -f2) - - # warp-go 文件,默认存放路径为 /opt/warp-go/warp.conf - elif grep -q 'PrivateKey' $FILE_PATH; then - local WARP_DEVICE_ID=$(awk -F' *= *' '/^Device/{print $2}' "$FILE_PATH") - local WARP_TOKEN=$(awk -F' *= *' '/^Token/{print $2}' "$FILE_PATH") + local WARP_DEVICE_ID=$(sed 's/.*registration_id":"\([^"]\+\)".*/\1/' "$FILE_PATH") + local WARP_TOKEN=$(sed 's/.*api_token":"\([^"]\+\)".*/\1/' "$FILE_PATH") fi fi @@ -866,6 +850,12 @@ change_ip() { warp_restart() { warning " $(text 55) " wg | grep -q '^interface:' && wg-quick down warp >/dev/null 2>&1 + warp_api "cancel" "/etc/wireguard/warp-account.conf" >/dev/null 2>&1 + warp_api "register" > /etc/wireguard/warp-account.conf 2>/dev/null + local PRIVATEKEY="$(grep 'private_key' /etc/wireguard/warp-account.conf | cut -d\" -f4)" + local ADDRESS6="$(grep '"v6.*"$' /etc/wireguard/warp-account.conf | cut -d\" -f4)" + local CLIENT_ID="$(awk '/"reserved": \[/{flag=1; printf "["; next} flag && /\]/{printf "]"; flag=0; print ""; next} flag {gsub(/[ \t\n\r]/,""); printf "%s", $0}' /etc/wireguard/warp-account.conf)" + [ -s /etc/wireguard/warp.conf ] && sed -i "s#\(PrivateKey[ ]\+=[ ]\+\).*#\1$PRIVATEKEY#g; s#\(Address[ ]\+=[ ]\+\).*\(/128$\)#\1$ADDRESS6\2#g; s#\(.*Reserved[ ]\+=[ ]\+\).*#\1$CLIENT_ID#g" /etc/wireguard/warp.conf ss -nltp | grep dnsmasq >/dev/null 2>&1 && systemctl restart dnsmasq >/dev/null 2>&1 wg-quick up warp >/dev/null 2>&1 sleep $j @@ -1855,11 +1845,12 @@ install() { if [ -s /etc/wireguard/warp-account.conf ]; then cat > /etc/wireguard/warp.conf <