↓ 跳过正文
  1. 文章归档/

免费获取Warp的免费v4出口,解决一直获取不到warp的ip

··5306 字·11 分钟

warp 一键脚本
#

wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh && bash menu.sh

warp-go 一键脚本
#

wget -N https://gitlab.com/fscarmen/warp/-/raw/main/warp-go.sh && bash warp-go.sh

输入上面的其中一个命令后会显示你要的语言,再选择需要的出口,一般是选择获取v4出口即可,本机默认是有ipv6的。

如果一直获取不到warp的ip,用这个命令获取warp出口:

wg-quick down warp &>/dev/null; sed -i "s/Endpoint.*/Endpoint = engage.cloudflareclient.com:4500/" /etc/wireguard/warp.conf; warp o

如果warp的v4老是掉,自动重新获取warp的ip脚本:

#!/bin/bash

# --- 配置 ---
# Ping 的目标地址 (使用IPv4地址确保测试IPv4连通性)
TARGET="1.1.1.1"
# Ping 的次数
COUNT=5
# 每次循环后等待的秒数
SLEEP_INTERVAL=10
# 最大重试次数 (避免无限循环)
MAX_RETRY=3

# --- 锁文件配置 ---
LOCK_FILE="/tmp/$(basename $0).lock"

# --- 日志颜色配置 ---
GREEN="\033[0;32m"
RED="\033[0;31m"
YELLOW="\033[1;33m"
BLUE="\033[0;34m"
NC="\033[0m" # No Color

# --- 进程锁检查 ---
if [ -e "$LOCK_FILE" ]; then
log_message="脚本已在运行中,本次执行自动退出。锁文件: ${LOCK_FILE}"
echo -e "${YELLOW}${log_message}${NC}"
logger "${log_message}"
exit 1
fi

# --- 设置陷阱,确保脚本退出时删除锁文件 ---
trap 'rm -f "$LOCK_FILE"; echo -e "${BLUE}清理锁文件并退出${NC}"' EXIT

# --- 创建锁文件 ---
touch "$LOCK_FILE"

# --- 函数:检测IPv4连通性 ---
check_ipv4_connectivity() {
# 使用ping测试IPv4连通性,超时设置为3秒
if ping -4 -q -c ${COUNT} -W 3 ${TARGET} &>/dev/null; then
return 0 # 连通
else
return 1 # 不通
fi
}

# --- 函数:获取丢包率 ---
get_loss_rate() {
local loss=$(ping -4 -q -c ${COUNT} -W 3 ${TARGET} 2>/dev/null | grep -oP '\d+(?=% packet loss)')
if [ -z "$loss" ]; then
echo "100"
else
echo "$loss"
fi
}

# --- 函数:重新获取WARP v4出口 ---
reset_warp_v4() {
echo -e "${YELLOW}正在重新获取WARP v4出口...${NC}"

# 执行你提供的命令来重置WARP v4出口
wg-quick down warp &>/dev/null
sed -i "s/Endpoint.*/Endpoint = engage.cloudflareclient.com:4500/" /etc/wireguard/warp.conf
warp o &>/dev/null

# 等待一段时间让连接稳定
sleep 5

echo -e "${BLUE}WARP v4出口重置完成${NC}"
}

# --- 函数:检查是否为root用户 ---
check_root() {
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}错误: 此脚本需要root权限才能执行${NC}"
echo -e "${YELLOW}请使用: sudo $0${NC}"
exit 1
fi
}

# --- 主程序 ---
echo -e "${GREEN}===============================================${NC}"
echo -e "${GREEN} WARP IPv4出口自动恢复脚本启动${NC}"
echo -e "${GREEN}===============================================${NC}"

# 检查root权限
check_root

log_message_start="开始执行WARP IPv4连通性检测..."
echo -e "${GREEN}${log_message_start}${NC}"
logger "${log_message_start}"

retry_count=0

# 首次检查连通性
if check_ipv4_connectivity; then
loss=$(get_loss_rate)
log_message="[丢包率 ${loss}%] IPv4网络连通正常,无需处理"
echo -e "${GREEN}${log_message}${NC}"
logger "${log_message}"
exit 0
fi

# 如果首次检查失败,开始重试循环
while [ $retry_count -lt $MAX_RETRY ]; do
retry_count=$((retry_count + 1))
loss=$(get_loss_rate)

log_message="[第${retry_count}次重试] [丢包率 ${loss}%] IPv4网络中断,正在重新获取WARP v4出口..."
echo -e "${RED}${log_message}${NC}"
logger "${log_message}"

# 重置WARP v4出口
reset_warp_v4

# 等待网络稳定
log_message_wait="等待 ${SLEEP_INTERVAL} 秒让网络稳定,然后重新检测..."
echo -e "${YELLOW}${log_message_wait}${NC}"
sleep ${SLEEP_INTERVAL}

# 重新检查连通性
if check_ipv4_connectivity; then
loss=$(get_loss_rate)
log_message_success="[丢包率 ${loss}%] IPv4网络已恢复正常!"
echo -e "${GREEN}${log_message_success}${NC}"
logger "${log_message_success}"
echo -e "${GREEN}===============================================${NC}"
echo -e "${GREEN} 脚本执行完毕,网络已恢复${NC}"
echo -e "${GREEN}===============================================${NC}"
exit 0
fi
done

# 如果达到最大重试次数仍未恢复
log_message_failed="已达到最大重试次数(${MAX_RETRY}),IPv4网络仍未恢复,请手动检查WARP配置"
echo -e "${RED}${log_message_failed}${NC}"
logger "${log_message_failed}"
echo -e "${RED}===============================================${NC}"
echo -e "${RED} 脚本执行完毕,网络未能恢复${NC}"
echo -e "${RED}===============================================${NC}"

exit 1

使用方法:
#

  1. 保存脚本:
sudo nano /usr/local/bin/warp-monitor.sh
# 将脚本内容粘贴进去,然后保存退出
  1. 设置执行权限:
sudo chmod +x /usr/local/bin/warp-monitor.sh
  1. 手动测试:
sudo /usr/local/bin/warp-monitor.sh
  1. 设置定时任务(可选):
sudo crontab -e
# 添加以下行,每5分钟检查一次
*/5 * * * * /usr/local/bin/warp-monitor.sh >/dev/null 2>&1

其他定时任务教程:主要是用root用户执行这个shell脚本命令:/usr/local/bin/warp-monitor.sh
各种面板比如aapanel 1panel等都有cron,用cron执行定时任务也是可以的;
类型选:Shell脚本 执行命令为:/usr/local/bin/warp-monitor.sh 执行周期:自行设置 用户:root(确保脚本有权限操作 WARP)

更新同时检测ipv4和ipv6:

#!/bin/bash

— 配置 —\
#

Ping 的目标地址\
#

TARGET_V4=”1.1.1.1″ # IPv4测试地址
TARGET_V6=”2606:4700:4700::1111″ # Cloudflare IPv6 DNS\

Ping 的次数\
#

COUNT=5\

每次循环后等待的秒数\
#

SLEEP_INTERVAL=10\

最大重试次数 (避免无限循环)\
#

MAX_RETRY=3

— 锁文件配置 —\
#

LOCK_FILE=”/tmp/$(basename $0).lock”

— 日志颜色配置 —\
#

GREEN=”\033[0;32m”
RED=”\033[0;31m”
YELLOW=”\033[1;33m”
BLUE=”\033[0;34m”
PURPLE=”\033[0;35m”
NC=”\033[0m” # No Color

— 进程锁检查 —\
#

if

\[ -e “$LOCK\_FILE” \]

; then
log_message=”脚本已在运行中,本次执行自动退出。锁文件: ${LOCK_FILE}”
echo -e “${YELLOW}${log_message}${NC}”
logger “${log_message}”
exit 1
fi

— 设置陷阱,确保脚本退出时删除锁文件 —\
#

trap ‘rm -f “$LOCK_FILE”; echo -e “${BLUE}清理锁文件并退出${NC}”‘ EXIT

— 创建锁文件 —\
#

touch “$LOCK_FILE”

— 函数:检测IPv4连通性 —\
#

check_ipv4_connectivity() {\

使用ping测试IPv4连通性,超时设置为3秒\
#

if ping -4 -q -c ${COUNT} -W 3 ${TARGET_V4} &>/dev/null; then
return 0 # 连通
else
return 1 # 不通
fi
}

— 函数:检测IPv6连通性 —\
#

check_ipv6_connectivity() {\

使用ping6测试IPv6连通性,超时设置为3秒\
#

if ping6 -q -c ${COUNT} -W 3 ${TARGET_V6} &>/dev/null; then
return 0 # 连通
else
return 1 # 不通
fi
}

— 函数:获取IPv4丢包率 —\
#

get_v4_loss_rate() {
local loss=$(ping -4 -q -c ${COUNT} -W 3 ${TARGET_V4} 2>/dev/null | grep -oP ‘\d+(?=% packet loss)’)
if

\[ -z “$loss” \]

; then
echo “100”
else
echo “$loss”
fi
}

— 函数:获取IPv6丢包率 —\
#

get_v6_loss_rate() {
local loss=$(ping6 -q -c ${COUNT} -W 3 ${TARGET_V6} 2>/dev/null | grep -oP ‘\d+(?=% packet loss)’)
if

\[ -z “$loss” \]

; then
echo “100”
else
echo “$loss”
fi
}

— 函数:重新获取WARP v4出口 —\
#

reset_warp_v4() {
echo -e “${YELLOW}正在重新获取WARP IPv4出口…${NC}”

执行你提供的命令来重置WARP v4出口\
#

wg-quick down warp &>/dev/null
sed -i “s/Endpoint.*/Endpoint = engage.cloudflareclient.com:4500/” /etc/wireguard/warp.conf
warp o &>/dev/null

等待一段时间让连接稳定\
#

sleep 5

echo -e “${BLUE}WARP IPv4出口重置完成${NC}”
}

— 函数:重新获取WARP v6出口 —\
#

reset_warp_v6() {
echo -e “${PURPLE}正在重新获取WARP IPv6出口…${NC}”

停止当前WARP连接\
#

wg-quick down warp &>/dev/null

重新配置为IPv6端点\
#

sed -i “s/Endpoint.*/Endpoint =

\[2606:4700:d0::a29f:c001\]

:4500/” /etc/wireguard/warp.conf

如果上面的IPv6端点不工作,可以尝试其他的IPv6端点\
#

sed -i “s/Endpoint.*/Endpoint = \[2606:4700:d0::a29f:c001\]:1701/” /etc/wireguard/warp.conf
#

重新启动WARP\
#

warp o &>/dev/null

等待一段时间让连接稳定\
#

sleep 5

echo -e “${BLUE}WARP IPv6出口重置完成${NC}”
}

— 函数:重新获取WARP双栈出口 —\
#

reset_warp_dual() {
echo -e “${PURPLE}正在重新获取WARP双栈出口…${NC}”

停止当前WARP连接\
#

wg-quick down warp &>/dev/null

重新配置为默认端点(通常支持双栈)\
#

sed -i “s/Endpoint.*/Endpoint = engage.cloudflareclient.com:4500/” /etc/wireguard/warp.conf

重新启动WARP\
#

warp o &>/dev/null

等待一段时间让连接稳定\
#

sleep 8

echo -e “${BLUE}WARP双栈出口重置完成${NC}”
}

— 函数:检查是否为root用户 —\
#

check_root() {
if

\[ “$EUID” -ne 0 \]

; then
echo -e “${RED}错误: 此脚本需要root权限才能执行${NC}”
echo -e “${YELLOW}请使用: sudo $0${NC}”
exit 1
fi
}

— 函数:处理IPv4连接问题 —\
#

handle_ipv4_issue() {
local retry_count=0

while

\[ $retry\_count -lt $MAX\_RETRY \]

; do
retry_count=$((retry_count + 1))
local loss=$(get_v4_loss_rate)

log_message=”

\[IPv4第${retry\_count}次重试\]

\[丢包率 ${loss}%\]

IPv4网络中断,正在重新获取WARP v4出口…”
echo -e “${RED}${log_message}${NC}”
logger “${log_message}”

重置WARP v4出口\
#

reset_warp_v4

等待网络稳定\
#

echo -e “${YELLOW}等待 ${SLEEP_INTERVAL} 秒让网络稳定,然后重新检测…${NC}”
sleep ${SLEEP_INTERVAL}

重新检查连通性\
#

if check_ipv4_connectivity; then
local loss=$(get_v4_loss_rate)
log_message_success=”

\[丢包率 ${loss}%\]

IPv4网络已恢复正常!”
echo -e “${GREEN}${log_message_success}${NC}”
logger “${log_message_success}”
return 0
fi
done

return 1
}

— 函数:处理IPv6连接问题 —\
#

handle_ipv6_issue() {
local retry_count=0

while

\[ $retry\_count -lt $MAX\_RETRY \]

; do
retry_count=$((retry_count + 1))
local loss=$(get_v6_loss_rate)

log_message=”

\[IPv6第${retry\_count}次重试\]

\[丢包率 ${loss}%\]

IPv6网络中断,正在重新获取WARP v6出口…”
echo -e “${RED}${log_message}${NC}”
logger “${log_message}”

重置WARP v6出口\
#

reset_warp_v6

等待网络稳定\
#

echo -e “${YELLOW}等待 ${SLEEP_INTERVAL} 秒让网络稳定,然后重新检测…${NC}”
sleep ${SLEEP_INTERVAL}

重新检查连通性\
#

if check_ipv6_connectivity; then
local loss=$(get_v6_loss_rate)
log_message_success=”

\[丢包率 ${loss}%\]

IPv6网络已恢复正常!”
echo -e “${GREEN}${log_message_success}${NC}”
logger “${log_message_success}”
return 0
fi
done

return 1
}

— 主程序 —\
#

echo -e “${GREEN}===============================================${NC}”
echo -e “${GREEN} WARP IPv4/IPv6出口自动恢复脚本启动${NC}”
echo -e “${GREEN}===============================================${NC}”

检查root权限\
#

check_root

log_message_start=”开始执行WARP IPv4/IPv6连通性检测…”
echo -e “${GREEN}${log_message_start}${NC}”
logger “${log_message_start}”

检查IPv4连通性\
#

ipv4_ok=false
ipv6_ok=false

echo -e “${BLUE}正在检测IPv4连通性…${NC}”
if check_ipv4_connectivity; then
loss=$(get_v4_loss_rate)
log_message=”

\[IPv4\]

\[丢包率 ${loss}%\]

IPv4网络连通正常”
echo -e “${GREEN}${log_message}${NC}”
logger “${log_message}”
ipv4_ok=true
else
echo -e “${RED}

\[IPv4\]

IPv4网络连接异常${NC}”
fi

检查IPv6连通性\
#

echo -e “${BLUE}正在检测IPv6连通性…${NC}”
if check_ipv6_connectivity; then
loss=$(get_v6_loss_rate)
log_message=”

\[IPv6\]

\[丢包率 ${loss}%\]

IPv6网络连通正常”
echo -e “${GREEN}${log_message}${NC}”
logger “${log_message}”
ipv6_ok=true
else
echo -e “${RED}

\[IPv6\]

IPv6网络连接异常${NC}”
fi

如果两者都正常,退出\
#

if

\[ “$ipv4\_ok” = true \]

&&

\[ “$ipv6\_ok” = true \]

; then
echo -e “${GREEN}IPv4和IPv6网络均正常,无需处理${NC}”
exit 0
fi

处理网络问题\
#

ipv4_fixed=true
ipv6_fixed=true

处理IPv4问题\
#

if

\[ “$ipv4\_ok” = false \]

; then
echo -e “${YELLOW}开始处理IPv4连接问题…${NC}”
if ! handle_ipv4_issue; then
ipv4_fixed=false
log_message_failed=”IPv4网络在${MAX_RETRY}次重试后仍未恢复”
echo -e “${RED}${log_message_failed}${NC}”
logger “${log_message_failed}”
fi
fi

处理IPv6问题\
#

if

\[ “$ipv6\_ok” = false \]

; then
echo -e “${YELLOW}开始处理IPv6连接问题…${NC}”
if ! handle_ipv6_issue; then
ipv6_fixed=false
log_message_failed=”IPv6网络在${MAX_RETRY}次重试后仍未恢复”
echo -e “${RED}${log_message_failed}${NC}”
logger “${log_message_failed}”
fi
fi

最终状态报告\
#

echo -e “${GREEN}===============================================${NC}”
if

\[ “$ipv4\_fixed” = true \]

&&

\[ “$ipv6\_fixed” = true \]

; then
echo -e “${GREEN} 脚本执行完毕,网络已完全恢复${NC}”
exit 0
elif

\[ “$ipv4\_fixed” = true \]

||

\[ “$ipv6\_fixed” = true \]

; then
echo -e “${YELLOW} 脚本执行完毕,部分网络已恢复${NC}”
if

\[ “$ipv4\_fixed” = false \]

; then
echo -e “${RED} IPv4网络仍有问题,请手动检查${NC}”
fi
if

\[ “$ipv6\_fixed” = false \]

; then
echo -e “${RED} IPv6网络仍有问题,请手动检查${NC}”
fi
exit 1
else
echo -e “${RED} 脚本执行完毕,网络未能恢复${NC}”
echo -e “${RED} 请手动检查WARP配置${NC}”
exit 1
fi
echo -e “${GREEN}===============================================${NC}”

保存脚本\
#

sudo nano /usr/local/bin/warp-monitor-v6.sh

设置执行权限\
#

sudo chmod +x /usr/local/bin/warp-monitor-v6.sh

手动测试\
#

sudo /usr/local/bin/warp-monitor-v6.sh

设置定时任务\
#

sudo crontab -e\

添加:*/5 * * * * /usr/local/bin/warp-monitor-v6.sh >/dev/null 2>&1
#

相关文章