v3.2.2 Restore Reserved configuration for Warp usage.

This commit is contained in:
fscarmen
2026-02-25 09:30:52 +00:00
parent 360a83382c
commit 624c3cef7e
3 changed files with 40 additions and 47 deletions
+4 -2
View File
@@ -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 系统的兼容性 2025.09.10 menu.sh v3.1.8 增强脚本对 Arch Linux 及 EndeavourOS 系统的兼容性
+17 -17
View File
@@ -18,26 +18,26 @@ fetch_account_information() {
TOKEN=$(grep 'warp_token' $REGISTER_PATH | sed "s#.*>\(.*\)<.*#\1#") TOKEN=$(grep 'warp_token' $REGISTER_PATH | sed "s#.*>\(.*\)<.*#\1#")
CLIENT_ID=$(grep 'client_id' $REGISTER_PATH | sed "s#.*client_id&quot;:&quot;\([^&]\{4\}\)&.*#\1#") CLIENT_ID=$(grep 'client_id' $REGISTER_PATH | sed "s#.*client_id&quot;:&quot;\([^&]\{4\}\)&.*#\1#")
# 官方 api 文件 # 官方 api 文件,默认存放路径为 /etc/wireguard/warp-account.conf
elif grep -q 'client_id' $REGISTER_PATH; then elif grep -q 'client_id' $REGISTER_PATH; then
ID=$(grep -m1 '"id' "$REGISTER_PATH" | cut -d\" -f4) ID=$(awk -F '"' '/"id"/ {print $4; exit}' "$REGISTER_PATH")
TOKEN=$(grep '"token' "$REGISTER_PATH" | cut -d\" -f4) TOKEN=$(awk -F '"' '/"token"/ {print $4; exit}' "$REGISTER_PATH")
CLIENT_ID=$(grep 'client_id' "$REGISTER_PATH" | cut -d\" -f4) CLIENT_ID=$(awk -F '"' '/client_id/ {print $4; exit}' "$REGISTER_PATH")
# client 文件,默认存放路径为 /var/lib/cloudflare-warp/reg.json # client 文件,默认存放路径为 /var/lib/cloudflare-warp/reg.json
elif grep -q 'registration_id' $REGISTER_PATH; then elif grep -q 'registration_id' $REGISTER_PATH; then
ID=$(cut -d\" -f4 "$REGISTER_PATH") ID=$(sed 's/.*registration_id":"\([^"]\+\)".*/\1/' "$REGISTER_PATH")
TOKEN=$(cut -d\" -f8 "$REGISTER_PATH") TOKEN=$(sed 's/.*api_token":"\([^"]\+\)".*/\1/' "$REGISTER_PATH")
# wgcf 文件,默认存放路径为 /etc/wireguard/wgcf-account.toml # wgcf 文件,默认存放路径为 /etc/wireguard/wgcf-account.toml
elif grep -q 'access_token' $REGISTER_PATH; then elif grep -q 'access_token' $REGISTER_PATH; then
ID=$(grep 'device_id' "$REGISTER_PATH" | cut -d\' -f2) ID=$(awk -F"'" '/device_id/ {print $2; exit}' "$REGISTER_PATH")
TOKEN=$(grep 'access_token' "$REGISTER_PATH" | cut -d\' -f2) TOKEN=$(awk -F"'" '/access_token/ {print $2; exit}' "$REGISTER_PATH")
# warp-go 文件,默认存放路径为 /opt/warp-go/warp.conf # warp-go 文件,默认存放路径为 /opt/warp-go/warp.conf
elif grep -q 'PrivateKey' $REGISTER_PATH; then elif grep -q 'PrivateKey' $REGISTER_PATH; then
ID=$(awk -F' *= *' '/^Device/{print $2}' "$REGISTER_PATH") ID=$(awk '/^Device/ {print $NF; exit}' "$REGISTER_PATH")
TOKEN=$(awk -F' *= *' '/^Token/{print $2}' "$REGISTER_PATH") TOKEN=$(awk '/^Token/ {print $NF; exit}' "$REGISTER_PATH")
else else
echo " There is no registered account information, please check the content. " && exit 1 echo " There is no registered account information, please check the content. " && exit 1
@@ -66,9 +66,9 @@ register_account() {
PRIVATE_KEY=$(wg genkey) PRIVATE_KEY=$(wg genkey)
PUBLIC_KEY=$(wg pubkey <<<"$PRIVATE_KEY") PUBLIC_KEY=$(wg pubkey <<<"$PRIVATE_KEY")
elif [[ -x "$(type -p openssl)" && -x "$(type -p xxd)" && -x "$(type -p base64)" ]]; then elif [[ -x "$(type -p openssl)" && -x "$(type -p xxd)" && -x "$(type -p base64)" ]]; then
KEY_PAIR=$(openssl genpkey -algorithm X25519 -text) KEY_PAIR=$(openssl genpkey -algorithm X25519 | openssl pkey -text -noout)
PRIVATE_KEY=$(echo $KEY_PAIR | sed 's/.*priv:\(.*\)pub.*/\1/' | xxd -r -p | base64) PRIVATE_KEY=$(echo $KEY_PAIR | sed 's/.*priv:\(.*\)pub.*/\1/; s/ //g' | xxd -r -p | base64)
PUBLIC_KEY=$(echo $KEY_PAIR | sed 's/.*pub://' | xxd -r -p | base64) PUBLIC_KEY=$(echo $KEY_PAIR | sed 's/.*pub://; s/ //g'| xxd -r -p | base64)
else else
WG_API=$(curl -m5 -sSL "https://warp.cloudflare.now.cc/?run=key&format=yaml") WG_API=$(curl -m5 -sSL "https://warp.cloudflare.now.cc/?run=key&format=yaml")
PRIVATE_KEY=$(awk 'NR==2 {print $2}' <<<"$WG_API") PRIVATE_KEY=$(awk 'NR==2 {print $2}' <<<"$WG_API")
@@ -275,10 +275,10 @@ while [[ $# -ge 1 ]]; do
shift shift
;; ;;
-t | --token) -t | --token)
shift shift
TEAM_TOKEN="$1" TEAM_TOKEN="$1"
shift shift
;; ;;
-h | --help) -h | --help)
help help
exit exit
+19 -28
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 当前脚本版本号 # 当前脚本版本号
VERSION='3.2.1' VERSION='3.2.2'
# 环境变量用于在Debian或Ubuntu操作系统中设置非交互式(noninteractive)安装模式 # 环境变量用于在Debian或Ubuntu操作系统中设置非交互式(noninteractive)安装模式
export DEBIAN_FRONTEND=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. 简体中文" E[0]="\n Language:\n 1. English (default) \n 2. 简体中文"
C[0]="${E[0]}" C[0]="${E[0]}"
E[1]="1. Remove OS version checks to support rolling releases; 2. cloudflare.now.cc -> cloudflare.nyc.mn" E[1]="Restore Reserved configuration for Warp usage"
C[1]="1. 移除系统版本号判断,以支持滚动发行版; 2. cloudflare.now.cc -> cloudflare.nyc.mn" 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]" 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]" 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]" 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 local FILE_PATH=$2
if [ -s "$FILE_PATH" ]; then if [ -s "$FILE_PATH" ]; then
# Teams 账户文件 # 官方 api 文件,默认存放路径为 /etc/wireguard/warp-account.conf
if grep -q 'xml version' $FILE_PATH; then if grep -q 'client_id' $FILE_PATH; then
local WARP_DEVICE_ID=$(grep 'correlation_id' $FILE_PATH | sed "s#.*>\(.*\)<.*#\1#") local WARP_DEVICE_ID=$(awk -F '"' '/"id"/ {print $4; exit}' "$FILE_PATH")
local WARP_TOKEN=$(grep 'warp_token' $FILE_PATH | sed "s#.*>\(.*\)<.*#\1#") local WARP_TOKEN=$(awk -F '"' '/"token"/ {print $4; exit}' "$FILE_PATH")
local WARP_CLIENT_ID=$(grep 'client_id' $FILE_PATH | sed "s#.*client_id&quot;:&quot;\([^&]\{4\}\)&.*#\1#") local WARP_CLIENT_ID=$(awk -F '"' '/client_id/ {print $4; exit}' "$FILE_PATH")
# 官方 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)
# client 文件,默认存放路径为 /var/lib/cloudflare-warp/reg.json # client 文件,默认存放路径为 /var/lib/cloudflare-warp/reg.json
elif grep -q 'registration_id' $FILE_PATH; then elif grep -q 'registration_id' $FILE_PATH; then
local WARP_DEVICE_ID=$(cut -d\" -f4 "$FILE_PATH") local WARP_DEVICE_ID=$(sed 's/.*registration_id":"\([^"]\+\)".*/\1/' "$FILE_PATH")
local WARP_TOKEN=$(cut -d\" -f8 "$FILE_PATH") local WARP_TOKEN=$(sed 's/.*api_token":"\([^"]\+\)".*/\1/' "$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")
fi fi
fi fi
@@ -866,6 +850,12 @@ change_ip() {
warp_restart() { warp_restart() {
warning " $(text 55) " warning " $(text 55) "
wg | grep -q '^interface:' && wg-quick down warp >/dev/null 2>&1 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 ss -nltp | grep dnsmasq >/dev/null 2>&1 && systemctl restart dnsmasq >/dev/null 2>&1
wg-quick up warp >/dev/null 2>&1 wg-quick up warp >/dev/null 2>&1
sleep $j sleep $j
@@ -1855,11 +1845,12 @@ install() {
if [ -s /etc/wireguard/warp-account.conf ]; then if [ -s /etc/wireguard/warp-account.conf ]; then
cat > /etc/wireguard/warp.conf <<EOF cat > /etc/wireguard/warp.conf <<EOF
[Interface] [Interface]
PrivateKey = $(grep 'private_key' /etc/wireguard/warp-account.conf | cut -d\" -f4) PrivateKey = $(awk -F'"' '/"private_key"/ {print $4; exit}' /etc/wireguard/warp-account.conf)
Address = 172.16.0.2/32 Address = 172.16.0.2/32
Address = $(grep '"v6.*"$' /etc/wireguard/warp-account.conf | cut -d\" -f4)/128 Address = $(awk -F'"' '/"v6"[[:space:]]*:/ && $4 !~ /^\[/ {print $4; exit}' /etc/wireguard/warp-account.conf)/128
DNS = 8.8.8.8 DNS = 8.8.8.8
MTU = 1280 MTU = 1280
#Reserved = $(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)
#Table = off #Table = off
#PostUp = /etc/wireguard/NonGlobalUp.sh #PostUp = /etc/wireguard/NonGlobalUp.sh
#PostDown = /etc/wireguard/NonGlobalDown.sh #PostDown = /etc/wireguard/NonGlobalDown.sh