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
使用方法:
- 保存脚本:
sudo nano /usr/local/bin/warp-monitor.sh
# 将脚本内容粘贴进去,然后保存退出
- 设置执行权限:
sudo chmod +x /usr/local/bin/warp-monitor.sh
- 手动测试:
sudo /usr/local/bin/warp-monitor.sh
- 设置定时任务(可选):
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
0