@ -16,8 +16,8 @@ T[E3]="The TUN module is not loaded. You should turn it on in the control panel.
T[ C3] = "没有加载 TUN 模块,请在管理后台开启或联系供应商了解如何开启,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E4] = "The WARP server cannot be connected. It may be a China Mainland VPS. You can manually ping 162.159.193.10 or ping6 2606:4700:d0::a29f:c001.You can run the script again if the connect is successful. Feedback: [https://github.com/fscarmen/warp/issues]"
T[ C4] = "与 WARP 的服务器不能连接,可能是大陆 VPS,可手动 ping 162.159.193.10 或 ping6 2606:4700:d0::a29f:c001,如能连通可再次运行脚本,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E5] = "The script supports Debian, Ubuntu, CentOS or Alpine systems only. Feedback: [https://github.com/fscarmen/warp/issues]"
T[ C5] = "本脚本只支持 Debian、Ubuntu、CentOS 或 Alpine 系统,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E5] = "The script supports Debian, Ubuntu, CentOS, Arch or Alpine systems only. Feedback: [https://github.com/fscarmen/warp/issues]"
T[ C5] = "本脚本只支持 Debian、Ubuntu、CentOS、Arch 或 Alpine 系统,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E6] = "warp h (help)\n warp o (Turn off WARP temporarily)\n warp u (Turn off and uninstall WARP interface and Socks5 Linux Client)\n warp b (Upgrade kernel, turn on BBR, change Linux system)\n warp a (Upgrade to WARP+ account)\n warp p (Getting WARP+ quota by scripts)\n warp v (Sync the latest version)\n warp r (Connect/Disconnect WARP Linux Client)\n warp 4/6 (Add WARP IPv4/IPv6 interface)\n warp d (Add WARP dualstack interface IPv4 + IPv6)\n warp c (Install WARP Linux Client and set to proxy mode)\n warp l (Install WARP Linux Client and set to WARP mode)\n warp i (Change the WARP IP to support Netflix)\n warp s (WARP single and dual stacks switch echo other. Such as [warp s 4],[warp s 6],[warp s d])\n warp e (Install Iptables + dnsmasq + ipset solution)\n warp w (Install WireProxy solution)\n warp y (Connect/Disconnect WireProxy socks5)\n"
T[ C6] = "warp h (帮助菜单)\n warp o (临时warp开关)\n warp u (卸载 WARP 网络接口和 Socks5 Client)\n warp b (升级内核、开启BBR及DD)\n warp a (免费 WARP 账户升级 WARP+)\n warp p (刷WARP+流量)\n warp v (同步脚本至最新版本)\n warp r (WARP Linux Client 开关)\n warp 4/6 (WARP IPv4/IPv6 单栈)\n warp d (WARP 双栈)\n warp c (安装 WARP Linux Client,开启 Socks5 代理模式)\n warp l (安装 WARP Linux Client,开启 WARP 模式)\n warp i (更换支持 Netflix 的IP)\n warp s [OPTION](WARP 单双栈相互切换,如 [warp s 4]、[warp s 6]、[warp s d])\n warp e (安装 Iptables + dnsmasq + ipset 解决方案)\n warp w (安装 WireProxy 解决方案)\n warp y (WireProxy socks5 开关)\n"
T[ E7] = "Installing curl..."
@ -71,9 +71,9 @@ T[C30]="License 应为26位字符,请重新输入 WARP+ License,没有可回
T[ E31] = "\n 1.Update with WARP+ license\n 2.Update with Teams (You need upload the Teams file to a private storage space before. For example: gist.github.com)\n"
T[ C31] = "\n 1.使用 WARP+ license 升级\n 2.使用 Teams 升级 (你须事前把 Teams 文件上传到私密存储空间,比如:gist.github.com )\n"
T[ E32] = "Step 1/3: Install dependencies..."
T[ C32] = "进度 1/3: 安装系统依赖……"
T[ C32] = "进度 1/3: 安装系统依赖……"
T[ E33] = "Step 2/3: WGCF is ready"
T[ C33] = "进度 2/3: 已安装 WGCF"
T[ C33] = "进度 2/3: 已安装 WGCF"
T[ E34] = "Failed to change port. Feedback: [https://github.com/fscarmen/warp/issues]"
T[ C34] = "更换端口不成功,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E35] = "Update WARP+ account..."
@ -164,8 +164,8 @@ T[E77]="Turn off WARP"
T[ C77] = "暂时关闭 WARP"
T[ E78] = "Upgrade to WARP+ or Teams account"
T[ C78] = "升级为 WARP+ 或 Teams 账户"
T[ E79] = "WARP is already running and will switch to single and dual stack mutual switching mode "
T[ C79] = "WARP 已经运行,将改为单双栈相互切换模式 "
T[ E79] = ""
T[ C79] = ""
T[ E80] = "Professional one-click script for WARP to unblock streaming media (Supports multi-platform, multi-mode and TG push)"
T[ C80] = "WARP 解锁 Netflix 等流媒体专业一键(支持多平台、多方式和 TG 通知)"
T[ E81] = "Step 3/3: Searching for the best MTU value is ready."
@ -254,8 +254,8 @@ T[E122]="Port change to \$PORT succeeded."
T[ C122] = "端口成功更换至 \$PORT"
T[ E123] = "Change the WARP IP to support Netflix"
T[ C123] = "更换支持 Netflix 的 IP"
T[ E124] = "It is IPv6 priority now, press [y] to change to IPv4 priority? And other keys for unchanging: "
T[ C124] = "现在是 IPv6 优先,改为IPv4 优先的话请按 [y],其他按键保持不变: "
T[ E124] = "\n 1. Brush WARP IPv4 (default)\n 2. Brush WARP IPv6\n "
T[ C124] = "\n 1. 刷 WARP IPv4 (默认)\n 2. 刷 WARP IPv6\n "
T[ E125] = "\$(date +'%F %T') Region: \$REGION Done. IPv\$NF: \$WAN \$COUNTRY \$ASNORG. Retest after 1 hour. Brush ip runing time:\$DAY days \$HOUR hours \$MIN minutes \$SEC seconds"
T[ C125] = "\$(date +'%F %T') 区域 \$REGION 解锁成功,IPv\$NF: \$WAN \$COUNTRY \$ASNORG,1 小时后重新测试,刷 IP 运行时长: \$DAY 天 \$HOUR 时 \$MIN 分 \$SEC 秒"
T[ E126] = "\$(date +'%F %T') Try \${i}. Failed. IPv\$NF: \$WAN \$COUNTRY \$ASNORG. Retry after \${j} seconds. Brush ip runing time:\$DAY days \$HOUR hours \$MIN minutes \$SEC seconds"
@ -344,15 +344,15 @@ T[E167]="WARP iptable was installed.\n connect/disconnect by [warp o]\n uninstal
T[ C167] = "WARP iptable 已安装\n 连接/断开: warp o\n 卸载: warp u"
T[ E168] = "Install CloudFlare Client and set mode to WARP"
T[ C168] = "安装 CloudFlare Client 并设置为 WARP 模式"
T[ E169] = "WARP\$AC IPv4: \$WAN4 \$WARPSTATUS4 \$COUNTRY4 \$ASNORG4"
T[ C169] = "WARP\$AC IPv4: \$WAN4 \$WARPSTATUS4 \$COUNTRY4 \$ASNORG4"
T[ E169] = "WARP\$AC IPv4: \$WAN4 \$WARPSTATUS4 \$COUNTRY4 \$ASNORG4"
T[ C169] = "WARP\$AC IPv4: \$WAN4 \$WARPSTATUS4 \$COUNTRY4 \$ASNORG4"
# 自定义字体彩色,read 函数,友道翻译函数
red( ) { echo -e " \033[31m\033[01m $@ \033[0m " ; }
green( ) { echo -e " \033[32m\033[01m $@ \033[0m " ; }
yellow( ) { echo -e " \033[33m\033[01m $@ \033[0m " ; }
reading( ) { read -rp " $( green " $1 " ) " " $2 " ; }
translate( ) { [ [ -n " $1 " ] ] && curl -ksm8 " http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=${ 1 //[[ : space : ]]/ } " | cut -d \" -f18 2>/dev/null; }
translate( ) { [ [ -n " $1 " ] ] && curl -ksm8 "http://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=1" | cut -d \" -f18 2>/dev/null; }
# 脚本当天及累计运行次数统计
statistics_of_run-times( ) {
@ -364,7 +364,7 @@ TODAY=$(expr "$COUNT" : '.*\s\([0-9]\{1,\}\)\s/.*') && TOTAL=$(expr "$COUNT" : '
select_language( ) {
case $( cat /etc/wireguard/language 2>& 1) in
E ) L = E; ; C ) L = C; ;
* ) L = E && [ [ -z $OPTION || $OPTION = [ aclehdpbvis w46] ] ] && yellow " ${ T [ ${ L } 0 ] } " && reading " ${ T [ ${ L } 50 ] } " LANGUAGE
* ) L = E && [ [ -z $OPTION || $OPTION = [ aclehdpbviw46] ] ] && yellow " ${ T [ ${ L } 0 ] } " && reading " ${ T [ ${ L } 50 ] } " LANGUAGE
[ [ $LANGUAGE = 2 ] ] && L = C; ;
esac
}
@ -423,7 +423,7 @@ check_operating_system(){
# 安装 curl
check_dependencies( ) {
type -P curl >/dev/null 2>& 1 || ( yellow " ${ T [ ${ L } 7 ] } " && ${ PACKAGE_INSTALL [int] } curl) || ( yellow " ${ T [ ${ L } 8 ] } " && ${ PACKAGE_UPDATE [int] } && ${ PACKAGE_INSTALL [int] } curl)
! type -P curl >/dev/null 2>& 1 && yellow " ${ T [ ${ L } 9 ] } " && exit 1
! type -P curl >/dev/null 2>& 1 && red " ${ T [ ${ L } 9 ] } " && exit 1
[ [ $SYSTEM = Alpine ] ] && ! type -P curl >/dev/null 2>& 1 && ${ PACKAGE_UPDATE [int] } && ${ PACKAGE_INSTALL [int] } curl wget grep
}
@ -559,8 +559,8 @@ change_ip(){
grep -q "^#.*\:\:\/0" /etc/wireguard/wgcf.conf && T6 = 0 || T6 = 1
case " $T4 $T6 " in
01 ) NF = '6' ; ; 10 ) NF = '4' ; ;
11 ) [ [ $( curl -ksm8 https://ip.gs) = ~ ":" ] ] && NF = '6' && reading " ${ T [ ${ L } 124 ] } " NETFLIX || NF = '4'
[ [ $NETFLIX = [ Yy] ] ] && NF = '4' && PRIORITY = 1 && stack_priority; ;
11 ) yellow " ${ T [ ${ L } 124 ] } " reading " ${ T [ ${ L } 50 ] } " NETFLIX
NF = '4' && [ [ $NETFLIX = 2 ] ] && NF = '6' ; ;
esac
[ [ -z " $EXPECT " ] ] && input_region
@ -758,7 +758,7 @@ uninstall(){
# 显示卸载结果
ip4_info; [ [ $L = C && -n " $COUNTRY4 " ] ] && COUNTRY4 = $( translate " $COUNTRY4 " )
ip6_info; [ [ $L = C && -n " $COUNTRY6 " ] ] && COUNTRY6 = $( translate " $COUNTRY6 " )
green " ${ T [ ${ L } 45 ] } \n IPv4: $WAN4 $COUNTRY4 $ASNORG4 \n IPv6: $WAN6 $COUNTRY6 $ASNORG6 "
green " ${ T [ ${ L } 45 ] } \n IPv4: $WAN4 $COUNTRY4 $ASNORG4 \n IPv6: $WAN6 $COUNTRY6 $ASNORG6 "
}
# 同步脚本至最新版本
@ -781,22 +781,22 @@ net(){
wg-quick up wgcf >/dev/null 2>& 1
ss -nltp | grep dnsmasq >/dev/null 2>& 1 && systemctl restart dnsmasq >/dev/null 2>& 1
ip4_info; ip6_info
until [ [ $TRACE4 $TRACE6 = ~ on| plus ] ]
do ( ( i++ ) ) || true
yellow " $( eval echo " ${ T [ ${ L } 12 ] } " ) "
${ SYSTEMCTL_RESTART [int] } >/dev/null 2>& 1
ss -nltp | grep dnsmasq >/dev/null 2>& 1 && systemctl restart dnsmasq >/dev/null 2>& 1
ip4_info; ip6_info
if [ [ $i = " $j " ] ] ; then
if [ [ $LICENSETYPE = 2 ] ] ; then
unset LICENSETYPE && i = 0 && green " ${ T [ ${ L } 129 ] } " &&
cp -f /etc/wireguard/wgcf-profile.conf /etc/wireguard/wgcf.conf
else
wg-quick down wgcf >/dev/null 2>& 1
red " $( eval echo " ${ T [ ${ L } 13 ] } " ) " && exit 1
fi
until [ [ $TRACE4 $TRACE6 = ~ on| plus ] ] ; do
( ( i++ ) ) || true
yellow " $( eval echo " ${ T [ ${ L } 12 ] } " ) "
${ SYSTEMCTL_RESTART [int] } >/dev/null 2>& 1
ss -nltp | grep dnsmasq >/dev/null 2>& 1 && systemctl restart dnsmasq >/dev/null 2>& 1
ip4_info; ip6_info
if [ [ $i = " $j " ] ] ; then
if [ [ $LICENSETYPE = 2 ] ] ; then
unset LICENSETYPE && i = 0 && green " ${ T [ ${ L } 129 ] } " &&
cp -f /etc/wireguard/wgcf-profile.conf /etc/wireguard/wgcf.conf
else
wg-quick down wgcf >/dev/null 2>& 1
red " $( eval echo " ${ T [ ${ L } 13 ] } " ) " && exit 1
fi
done
fi
done
green " ${ T [ ${ L } 14 ] } "
[ [ $L = C ] ] && COUNTRY4 = $( translate " $COUNTRY4 " )
[ [ $L = C ] ] && COUNTRY6 = $( translate " $COUNTRY6 " )
@ -1023,7 +1023,7 @@ update_license(){
done
[ [ $UPDATE_LICENSE = 1 && -n $LICENSE && -z $NAME ] ] && reading " ${ T [ ${ L } 102 ] } " NAME
[ [ -n $NAME ] ] && NAME = " ${ NAME //[[ : space : ]]/_ } " || NAME = ${ NAME :- 'WARP' }
}
}
# 输入 Linux Client 端口,先检查默认的40000是否被占用,限制4-5位数字,准确匹配空闲端口
input_port( ) {
@ -1192,7 +1192,7 @@ install(){
# 询问是否有 WARP+ 或 Teams 账户
[ [ -z $LICENSETYPE ] ] && yellow " ${ T [ ${ L } 132 ] } " && reading " ${ T [ ${ L } 50 ] } " LICENSETYPE
case $LICENSETYPE in
1 ) INPUT_LICENSE = 1 && input_license; ;
1 ) INPUT_LICENSE = 1 && input_license; ;
2 ) input_url; ;
esac
@ -1483,8 +1483,8 @@ EOF
# 结果提示,脚本运行时间,次数统计
end = $( date +%s)
red "\n==============================================================\n"
green " IPv4: $WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4 "
green " IPv6: $WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 "
green " IPv4: $WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4 "
green " IPv6: $WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 "
grep -sq 'Device name' /etc/wireguard/info.log 2>/dev/null && TYPE = '+' || TYPE = ' Teams'
[ [ $TRACE4 $TRACE6 = ~ plus ] ] && green " $( eval echo " ${ T [ ${ L } 41 ] } " ) " && check_quota && green " $( eval echo " ${ T [ ${ L } 133 ] } " ) "
[ [ $TRACE4 $TRACE6 = ~ on ] ] && green " $( eval echo " ${ T [ ${ L } 42 ] } " ) "
@ -1687,7 +1687,11 @@ check_quota(){
API = $( curl -s " https://api.cloudflareclient.com/v0a884/reg/ $DEVICE_ID " -H "User-Agent: okhttp/3.12.1" -H " Authorization: Bearer $ACCESS_TOKEN " )
QUOTA = $( grep -oP '"quota":\K\d+' <<< $API )
fi
[ [ $QUOTA -gt 10000000000000 ] ] && QUOTA = " $( echo " scale=2; $QUOTA /1000000000000 " | bc) TB " || QUOTA = " $( echo " scale=2; $QUOTA /1000000000 " | bc) GB "
if type -p bc >/dev/null 2>& 1; then
[ [ $QUOTA -gt 10000000000000 ] ] && QUOTA = " $( echo " scale=2; $QUOTA /1000000000000 " | bc) TB " || QUOTA = " $( echo " scale=2; $QUOTA /1000000000 " | bc) GB "
else [ [ $QUOTA -gt 10000000000000 ] ] && QUOTA = " $(( QUOTA/1000000000000)) TB " || QUOTA = " $(( QUOTA/1000000000)) GB "
fi
}
# 免费 WARP 账户升级 WARP+ 账户
@ -1814,13 +1818,13 @@ menu_setting(){
ACTION1( ) { stack_switch; } ; ACTION2( ) { stack_switch; } ; ACTION3( ) { update; } ; ;
esac
fi
[ [ -e /etc/dnsmasq.d/warp.conf ] ] && IPTABLE_INSTALLED = " ${ T [ ${ L } 92 ] } "
[ [ -n $( wg 2>/dev/null) ] ] && OPTION4 = " ${ T [ ${ L } 77 ] } " || OPTION4 = " ${ T [ ${ L } 71 ] } "
OPTION5 = " $CLIENT_INSTALLED $AMD64_ONLY ${ T [ ${ L } 82 ] } " ; OPTION6 = " ${ T [ ${ L } 123 ] } " ; OPTION7 = " ${ T [ ${ L } 72 ] } " ; OPTION8 = " ${ T [ ${ L } 74 ] } " ; OPTION9 = " ${ T [ ${ L } 73 ] } " ; OPTION10 = " ${ T [ ${ L } 75 ] } " ;
OPTION11 = " ${ T [ ${ L } 80 ] } " ; OPTION12 = " $IPTABLE_INSTALLED ${ T [ ${ L } 138 ] } " ; OPTION13 = " $WIREPROXY_INSTALLED ${ T [ ${ L } 148 ] } " ; OPTION14 = " $CLIENT_INSTALLED $AMD64_ONLY ${ T [ ${ L } 168 ] } " ; OPTION0 = " ${ T [ ${ L } 76 ] } "
ACTION4( ) { OPTION = o; onoff; }
ACTION5( ) { proxy; } ; ACTION6( ) { change_ip; } ; ACTION7( ) { uninstall; } ; ACTION8( ) { plus; } ; ACTION9( ) { bbrInstall; } ; ACTION10( ) { ver; } ;
ACTION11( ) { bash <( curl -sSL https://raw.githubusercontent.com/fscarmen/warp_unlock/main/unlock.sh) -$L ; } ;
@ -1828,12 +1832,12 @@ menu_setting(){
ACTION13( ) { OCTEEP = 1; install; } ;
ACTION14( ) { LUBAN = 1; proxy; } ;
ACTION0( ) { exit; }
grep -sq 'Device name' /etc/wireguard/info.log 2>/dev/null && check_quota && TYPE = '+' && PLUSINFO = " ${ T [ ${ L } 25 ] } : $( grep 'Device name' /etc/wireguard/info.log 2>/dev/null | awk '{ print $NF }' ) \t ${ T [ ${ L } 63 ] } : $QUOTA " || TYPE = ' Teams'
}
# 显示菜单
menu( ) {
grep -sq 'Device name' /etc/wireguard/info.log 2>/dev/null && check_quota && TYPE = '+' && PLUSINFO = " ${ T [ ${ L } 25 ] } : $( grep 'Device name' /etc/wireguard/info.log 2>/dev/null | awk '{ print $NF }' ) \t ${ T [ ${ L } 63 ] } : $QUOTA " || TYPE = ' Teams'
clear
yellow " ${ T [ ${ L } 16 ] } "
red "======================================================================================================================\n"
@ -1854,12 +1858,14 @@ menu(){
red "\n======================================================================================================================\n"
green " 1. $OPTION1 \n 2. $OPTION2 \n 3. $OPTION3 \n 4. $OPTION4 \n 5. $OPTION5 \n 6. $OPTION6 \n 7. $OPTION7 \n 8. $OPTION8 \n 9. $OPTION9 \n 10. $OPTION10 \n 11. $OPTION11 \n 12. $OPTION12 \n 13. $OPTION13 \n 14. $OPTION14 \n 0. $OPTION0 \n "
reading " ${ T [ ${ L } 50 ] } " CHOOSE1
case " $CHOOSE1 " in
1 ) ACTION1; ; 2 ) ACTION2; ; 3 ) ACTION3; ; 4 ) ACTION4; ; 5 ) ACTION5; ;
6 ) ACTION6; ; 7 ) ACTION7; ; 8 ) ACTION8; ; 9 ) ACTION9; ; 10 ) ACTION10; ;
11 ) ACTION11; ; 12 ) ACTION12; ; 13 ) ACTION13; ; 14 ) ACTION14; ;
0 ) ACTION0; ; * ) red " ${ T [ ${ L } 51 ] } [0-10] " ; sleep 1; menu; ;
esac
# 输入必须是数字且少于等于最大可选项
MAX_CHOOSE = 14
if grep -wqP "\d+" <<< $CHOOSE1 && [ $CHOOSE1 -le $MAX_CHOOSE ] ; then
ACTION$CHOOSE
else
red " ${ T [ ${ L } 51 ] } [0- $MAX_CHOOSE ] " && sleep 1 && menu
fi
}
# 传参选项 OPTION:1=为 IPv4 或者 IPv6 补全另一栈WARP; 2=安装双栈 WARP; u=卸载 WARP; b=升级内核、开启BBR及DD; o=WARP开关;p=刷 WARP+ 流量; 其他或空值=菜单界面
@ -1901,7 +1907,6 @@ v ) ver; exit 0;;
n ) net; exit 0; ;
o ) onoff; exit 0; ;
r ) proxy_onoff; exit 0; ;
s ) stack_switch; exit 0; ;
y ) wireproxy_onoff; exit 0; ;
esac
@ -1913,16 +1918,16 @@ menu_setting
# 设置部分后缀 3/3
case " $OPTION " in
# 在已运行 Linux Client 前提下,不能安装 WARP IPv4 或者双栈网络接口。如已经运行 WARP ,参数 4,6,d 从原来的安装改为切换
[ 46d] ) if [ [ -n $( wg 2>/dev/null) ] ] ; then
SWITCHCHOOSE = " $( tr '[:lower:]' '[:upper:]' <<< " $OPTION " ) " ; OPTION = 's'
yellow " ${ T [ ${ L } 79 ] } " && stack_switch
[ 46d] ) if [ [ -e /etc/wireguard/wgcf.conf ] ] ; then
SWITCHCHOOSE = " $( tr '[:lower:]' '[:upper:]' <<< " $OPTION " ) "
stack_switch
else
case " $OPTION " in
4 ) [ [ $CLIENT = [ 35] ] ] && red " ${ T [ ${ L } 110 ] } " && exit 1
CONF = ${ CONF1 [m] } ; ;
6 ) CONF = ${ CONF2 [m] } ; ;
d ) [ [ $CLIENT = [ 35] ] ] && red " ${ T [ ${ L } 110 ] } " && exit 1
CONF = ${ CONF3 [m] } ; ;
4 ) [ [ $CLIENT = [ 35] ] ] && red " ${ T [ ${ L } 110 ] } " && exit 1
CONF = ${ CONF1 [m] } ; ;
6 ) CONF = ${ CONF2 [m] } ; ;
d ) [ [ $CLIENT = [ 35] ] ] && red " ${ T [ ${ L } 110 ] } " && exit 1
CONF = ${ CONF3 [m] } ; ;
esac
install
fi ; ;