@ -2,14 +2,14 @@
export LANG = en_US.UTF-8
# 当前脚本版本号和新增功能
VERSION = 2.43
VERSION = 2.44
declare -A T
T[ E0] = "\n Language:\n 1.English (default) \n 2.简体中文\n"
T[ C0] = " ${ T [E0] } "
T[ E1] = "1. Support NAT VPS. Such as Woiden "
T[ C1] = "1. 支持 NAT 服务器,例如 Woiden "
T[ E1] = "To avoid uninstalled dependencies causing other programs to work improperly, there is a list to confirm before. The default is not to uninstall automatically. "
T[ C1] = "为了避免删除的依赖导致其他程序工作不正常,卸载依赖前有列表确认。默认不自动卸载。 "
T[ E2] = "The script must be run as root, you can enter sudo -i and then download and run again. Feedback: [https://github.com/fscarmen/warp/issues]"
T[ C2] = "必须以root方式运行脚本,可以输入 sudo -i 后重新下载运行,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E3] = "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/issues]"
@ -38,8 +38,8 @@ T[E14]="Got the WARP IP successfully."
T[ C14] = "已成功获取 WARP 网络"
T[ E15] = "WARP is turned off. It could be turned on again by [warp o]"
T[ C15] = "已暂停 WARP,再次开启可以用 warp o"
T[ E16] = "The script specifically adds WARP network interface for VPS, detailed:[https://github.com/fscarmen/warp]\n Features:\n * Support WARP+ account. Third-party scripts are use to increase WARP+ quota or upgrade kernel.\n * Not only menus, but commands with option.\n * Intelligent analysis of operating system:Ubuntu 16.04、18.04、20.04、22.04,Debian 9、10、11,CentOS 7、8、9, Alpine, Arch Linux 3. Be sure to choose the LTS system. And architecture:AMD or ARM\n * Automatically select four WireGuard solutions. Performance: Kernel with WireGuard integration>Install kernel module>wireguard-go\n * Intelligent analysis of the latest version of the WGCF\n * Suppert WARP Linux client.\n * Output WARP status, IP region and asn\n"
T[ C16] = "本项目专为 VPS 添加 wgcf 网络接口,详细说明:[https://github.com/fscarmen/warp]\n脚本特点:\n * 支持 WARP+ 账户,附带第三方刷 WARP+ 流量和升级内核 BBR 脚本\n * 普通用户友好的菜单,进阶者通过后缀选项快速搭建\n * 智能判断操作系统:Ubuntu 、Debian 、CentOS、 Alpine 和 Arch Linux,请务必选择 LTS 系统;硬件结构类型:AMD 或者 ARM\n * 结合 Linux 版本和虚拟化方式,自动优选4个 WireGuard 方案。网络性能方面:内核集成 WireGuard>安装内核模块>wireguard-go\n * 智能判断 WGCF 作者 github库的最新版本 (Latest release)\n * 支持 WARP Linux Socks5 Client\n * 输出执行结果,提示是否使用 WARP IP ,IP 归属地和线路提供商\n"
T[ E16] = "The script specifically adds WARP network interface for VPS, detailed:[https://github.com/fscarmen/warp]\n Features:\n\t * Support WARP+ account. Third-party scripts are use to increase WARP+ quota or upgrade kernel.\n\t * Not only menus, but commands with option.\n\t * Support system: Ubuntu 16.04、18.04、20.04、22.04,Debian 9、10、11,CentOS 7、8、9, Alpine, Arch Linux 3.\n\t * Support architecture: AMD,ARM and s390x\n\t * Automatically select four WireGuard solutions. Performance: Kernel with WireGuard integration > Install kernel module > wireguard-go\n\t * Intelligent analysis of the latest version of the WGCF\n\t * Suppert WARP Linux client.\n\t * Output WARP status, IP region and asn\n"
T[ C16] = "本项目专为 VPS 添加 wgcf 网络接口,详细说明: [https://github.com/fscarmen/warp]\n 脚本特点:\n\t * 支持 WARP+ 账户,附带第三方刷 WARP+ 流量和升级内核 BBR 脚本\n\t * 普通用户友好的菜单,进阶者通过后缀选项快速搭建\n\t * 智能判断操作系统: Ubuntu 、Debian 、CentOS、 Alpine 和 Arch Linux,请务必选择 LTS 系统\n\t * 支持硬件结构类型: AMD、 ARM 和 s390x\n\t * 结合 Linux 版本和虚拟化方式,自动优选4个 WireGuard 方案。网络性能方面: 内核集成 WireGuard > 安装内核模块 > wireguard-go\n\t * 智能判断 WGCF 作者 github库的最新版本 (Latest release)\n\t * 支持 WARP Linux Socks5 Client\n\t * 输出执行结果,提示是否使用 WARP IP ,IP 归属地和线路提供商\n"
T[ E17] = "Version"
T[ C17] = "脚本版本"
T[ E18] = "New features"
@ -68,8 +68,8 @@ T[E29]="Input errors up to 5 times.The script is aborted."
T[ C29] = "输入错误达5次,脚本退出"
T[ E30] = "License should be 26 characters, please re-enter WARP+ License. Otherwise press Enter to continue. \(\${i} times remaining\):"
T[ C30] = "License 应为26位字符,请重新输入 WARP+ License,没有可回车继续\(剩余\${i}次\):"
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[ E31] = "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)"
T[ C31] = "1.使用 WARP+ license 升级\n 2.使用 Teams 升级 (你须事前把 Teams 文件上传到私密存储空间,比如:gist.github.com ) "
T[ E32] = "Step 1/3: Install dependencies..."
T[ C32] = "进度 1/3: 安装系统依赖……"
T[ E33] = "Step 2/3: WGCF is ready"
@ -89,9 +89,9 @@ T[C39]="运行 WARP"
T[ E40] = "\$COMPANY vps needs to restart and run [warp n] to open WARP."
T[ C40] = "\$COMPANY vps 需要重启后运行 warp n 才能打开 WARP,现执行重启"
T[ E41] = "Congratulations! WARP\$TYPE is turned on. Spend time:\$(( end - start )) seconds.\\\n The script runs today: \$TODAY. Total:\$TOTAL"
T[ C41] = "恭喜!WARP\$TYPE 已开启,总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数: \$TOTAL"
T[ C41] = "恭喜!WARP\$TYPE 已开启,总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数: \$TOTAL"
T[ E42] = "Congratulations! WARP is turned on. Spend time:\$(( end - start )) seconds.\\\n The script runs on today: \$TODAY. Total:\$TOTAL"
T[ C42] = "恭喜!WARP 已开启,总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数: \$TOTAL"
T[ C42] = "恭喜!WARP 已开启,总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数: \$TOTAL"
T[ E43] = "Run again with warp [option] [lisence], such as"
T[ C43] = "再次运行用 warp [option] [lisence],如"
T[ E44] = "WARP installation failed. Feedback: [https://github.com/fscarmen/warp/issues]"
@ -114,8 +114,8 @@ T[E52]="Please input WARP+ ID:"
T[ C52] = "请输入 WARP+ ID:"
T[ E53] = "WARP+ ID should be 36 characters, please re-enter \(\${i} times remaining\):"
T[ C53] = "WARP+ ID 应为36位字符,请重新输入 \(剩余\${i}次\):"
T[ E54] = "Getting the WARP+ quota by the following 3 authors:\n * [ALIILAPRO],[https://github.com/ALIILAPRO/warp-plus-cloudflare]\n * [mixool],[https://github.com/mixool/across/tree/master/wireguard]\n * [SoftCreatR],[https://github.com/SoftCreatR/warp-up]\n * Open the 1.1.1.1 app\n * Click on the hamburger menu button on the top-right corner\n * Navigate to: Account > Key\n Important:Refresh WARP+ quota: 三 --> Advanced --> Connection options --> Reset keys\n It is best to run script with screen."
T[ C54] = "刷 WARP+ 流量用可选择以下三位作者的成熟作品,请熟知:\n * [ALIILAPRO],地址[https://github.com/ALIILAPRO/warp-plus-cloudflare]\n * [mixool],地址[https://github.com/mixool/across/tree/master/wireguard]\n * [SoftCreatR],地址[https://github.com/SoftCreatR/warp-up]\n 下载地址:https://1.1.1.1/,访问和苹果外区 ID 自理\n 获取 WARP+ ID 填到下面。方法:App右上角菜单 三 --> 高级 --> 诊断 --> ID\n 重要:刷脚本后流量没有增加处理: 右上角菜单 三 --> 高级 --> 连接选项 --> 重置加密密钥\n 最好配合 screen 在后台运行任务"
T[ E54] = "Getting the WARP+ quota by the following 3 authors:\n * [ALIILAPRO],[https://github.com/ALIILAPRO/warp-plus-cloudflare]\n * [mixool],[https://github.com/mixool/across/tree/master/wireguard]\n * [SoftCreatR],[https://github.com/SoftCreatR/warp-up]\n * Open the 1.1.1.1 app\n * Click on the hamburger menu button on the top-right corner\n * Navigate to: Account > Key\n Important:Refresh WARP+ quota: 三 --> Advanced --> Connection options --> Reset keys\n It is best to run script with screen."
T[ C54] = "刷 WARP+ 流量用可选择以下三位作者的成熟作品,请熟知:\n * [ALIILAPRO],地址[https://github.com/ALIILAPRO/warp-plus-cloudflare]\n * [mixool],地址[https://github.com/mixool/across/tree/master/wireguard]\n * [SoftCreatR],地址[https://github.com/SoftCreatR/warp-up]\n 下载地址:https://1.1.1.1/,访问和苹果外区 ID 自理\n 获取 WARP+ ID 填到下面。方法:App右上角菜单 三 --> 高级 --> 诊断 --> ID\n 重要:刷脚本后流量没有增加处理: 右上角菜单 三 --> 高级 --> 连接选项 --> 重置加密密钥\n 最好配合 screen 在后台运行任务"
T[ E55] = "1.Run [ALIILAPRO] script\n 2.Run [mixool] script\n 3.Run [SoftCreatR] script"
T[ C55] = "1.运行 [ALIILAPRO] 脚本\n 2.运行 [mixool] 脚本\n 3.运行 [SoftCreatR] 脚本"
T[ E56] = "The current Netflix region is \$REGION. Confirm press [y] . If you want another regions, please enter the two-digit region abbreviation. \(such as hk,sg. Default is \$REGION\):"
@ -125,9 +125,9 @@ T[C57]="你希望获取的目标流量值,单位为 GB,输入数字即可,
T[ E58] = "WARP+ or Teams account is working now. Quota: \$QUOTA. No need to upgrade."
T[ C58] = "已经是 WARP+ 或者 Teams 账户,剩余流量: \$QUOTA,不需要升级"
T[ E59] = "Cannot find the account file: /etc/wireguard/wgcf-account.toml, you can reinstall with the WARP+ License"
T[ C59] = "找不到账户文件: /etc/wireguard/wgcf-account.toml,可以卸载后重装,输入 WARP+ License"
T[ C59] = "找不到账户文件: /etc/wireguard/wgcf-account.toml,可以卸载后重装,输入 WARP+ License"
T[ E60] = "Cannot find the configuration file: /etc/wireguard/wgcf.conf, you can reinstall with the WARP+ License"
T[ C60] = "找不到配置文件: /etc/wireguard/wgcf.conf,可以卸载后重装,输入 WARP+ License"
T[ C60] = "找不到配置文件: /etc/wireguard/wgcf.conf,可以卸载后重装,输入 WARP+ License"
T[ E61] = "Please Input WARP+ license:"
T[ C61] = "请输入WARP+ License:"
T[ E62] = "Successfully upgraded to a WARP+ account"
@ -164,18 +164,18 @@ T[E77]="Turn off WARP (warp o)"
T[ C77] = "暂时关闭 WARP (warp o)"
T[ E78] = "Upgrade to WARP+ or Teams account (warp a)"
T[ C78] = "升级为 WARP+ 或 Teams 账户 (warp a)"
T[ E79] = ""
T[ C79] = ""
T[ E79] = "Do you uninstall the following dependencies (if any)? Please note that this will potentially prevent other programs that are using the dependency from working properly.\\\n\\\n \$UNINSTALL_DEPENDENCIES_LIST "
T[ C79] = "是否卸载以下依赖(如有)?请注意,这将有可能使其他正在使用该依赖的程序不能正常工作\\\n\\\n \$UNINSTALL_DEPENDENCIES_LIST "
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."
T[ C81] = "进度 3/3: 寻找 MTU 最优值已完成"
T[ C81] = "进度 3/3: 寻找 MTU 最优值已完成"
T[ E82] = "Install CloudFlare Client and set mode to Proxy (bash menu.sh c)"
T[ C82] = "安装 CloudFlare Client 并设置为 Proxy 模式 (bash menu.sh c)"
T[ E83] = "Step 1/2: Installing WARP Client..."
T[ C83] = "进度 1/2: 安装 Client……"
T[ C83] = "进度 1/2: 安装 Client……"
T[ E84] = "Step 2/2: Setting Client Mode"
T[ C84] = "进度 2/2: 设置 Client 模式"
T[ C84] = "进度 2/2: 设置 Client 模式"
T[ E85] = "Client was installed.\n connect/disconnect by [warp r].\n uninstall by [warp u]"
T[ C85] = "Linux Client 已安装\n 连接/断开: warp r\n 卸载: warp u"
T[ E86] = "Client is working. Socks5 proxy listening on: \$(ss -nltp | grep -E 'warp|wireproxy' | grep -oP '127.0*\S+')"
@ -195,7 +195,7 @@ T[C92]="(!!! 已安装,请勿选择)"
T[ E93] = "Client is not installed."
T[ C93] = "Client 未安装"
T[ E94] = "Congratulations! WARP\$AC Linux Client is working. Spend time:\$(( end - start )) seconds.\\\n The script runs on today: \$TODAY. Total:\$TOTAL"
T[ C94] = "恭喜!WARP\$AC Linux Client 工作中, 总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数: \$TOTAL"
T[ C94] = "恭喜!WARP\$AC Linux Client 工作中, 总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数: \$TOTAL"
T[ E95] = "Client works with non-WARP IPv4. The script is aborted. Feedback: [https://github.com/fscarmen/warp/issues]"
T[ C95] = "Client 在非 WARP IPv4 下才能工作正常,脚本中止,问题反馈:[https://github.com/fscarmen/warp/issues]"
T[ E96] = "Client connecting failure. It may be a CloudFlare IPv4."
@ -216,8 +216,8 @@ T[E103]="Port 40000 is in use. Please input another Port\(\${i} times remaining\
T[ C103] = "40000 端口占用中,请使用另一端口\(剩余\${i}次\):"
T[ E104] = "Please customize the Client port (It must be 4-5 digits. Default to 40000 if it is blank):"
T[ C104] = "请自定义 Client 端口号 (必须为4-5位自然数,如果不输入,会默认40000):"
T[ E105] = "\n Please choose the priority:\n 1.IPv4 (default)\n 2.IPv6\n 3.Use initial settings\n "
T[ C105] = "\n 请选择优先级别:\n 1.IPv4 (默认)\n 2.IPv6\n 3.使用 VPS 初始设置\n "
T[ E105] = "Please choose the priority:\n 1.IPv4 (default)\n 2.IPv6\n 3.Use initial settings"
T[ C105] = "请选择优先级别:\n 1.IPv4 (默认)\n 2.IPv6\n 3.使用 VPS 初始设置"
T[ E106] = "IPv6 priority"
T[ C106] = "IPv6 优先"
T[ E107] = "IPv4 priority"
@ -254,8 +254,8 @@ T[E122]="Port change to \$PORT succeeded."
T[ C122] = "端口成功更换至 \$PORT"
T[ E123] = "Change the WARP IP to support Netflix (warp i)"
T[ C123] = "更换支持 Netflix 的 IP (warp i)"
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[ E124] = "1. Brush WARP IPv4 (default)\n 2. Brush WARP IPv6"
T[ C124] = "1. 刷 WARP IPv4 (默认)\n 2. 刷 WARP IPv6"
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"
@ -266,12 +266,12 @@ T[E128]="Successfully upgraded to a WARP Teams account"
T[ C128] = "已升级为 WARP Teams 账户"
T[ E129] = "The current Teams account is unavailable, automatically switch back to the free account"
T[ C129] = "当前 Teams 账户不可用,自动切换回免费账户"
T[ E130] = "\\\n Please confirm\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4\\\n "
T[ C130] = "\\\n 请确认Teams 信息\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4\\\n "
T[ E130] = "Please confirm\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4"
T[ C130] = "请确认Teams 信息\\\n Private key\\\t: \$PRIVATEKEY \$MATCH1\\\n Public key\\\t: \$PUBLICKEY \$MATCH2\\\n Address IPv4\\\t: \$ADDRESS4/32 \$MATCH3\\\n Address IPv6\\\t: \$ADDRESS6/128 \$MATCH4"
T[ E131] = "comfirm please enter [y] , and other keys to use free account:"
T[ C131] = "确认请按 y ,其他按键则使用免费账户:"
T[ E132] = "\n Is there a WARP+ or Teams account?\n 1. WARP+\n 2. Teams\n 3. use free account (default)\n "
T[ C132] = "\n 如有 WARP+ 或 Teams 账户请选择\n 1. WARP+\n 2. Teams\n 3. 使用免费账户 (默认)\n "
T[ E132] = "Is there a WARP+ or Teams account?\n 1. WARP+\n 2. Teams\n 3. use free account (default)"
T[ C132] = "如有 WARP+ 或 Teams 账户请选择\n 1. WARP+\n 2. Teams\n 3. 使用免费账户 (默认)"
T[ E133] = "Device name: \$(grep -s 'Device name' /etc/wireguard/info.log | awk '{ print \$NF }')\\\n Quota: \$QUOTA"
T[ C133] = "设备名: \$(grep -s 'Device name' /etc/wireguard/info.log | awk '{ print \$NF }')\\\n 剩余流量: \$QUOTA"
T[ E134] = "Curren architecture \$(uname -m) is not supported. Feedback: [https://github.com/fscarmen/warp/issues]"
@ -296,8 +296,8 @@ T[E143]="Change Client or WireProxy port"
T[ C143] = "更改 Client 或 WireProxy 端口"
T[ E144] = "Install WARP IPv6 interface"
T[ C144] = "安装 WARP IPv6 网络接口"
T[ E145] = "\\\n WARP ineterface can be switched to the following:\\\n 1. \$OPTION1\\\n 2. \$OPTION2\\\n 0. \${T[\${L}76]}\\\n "
T[ C145] = "\\\n WARP 网络接口可以切换为以下方式:\\\n 1. \$OPTION1\\\n 2. \$OPTION2\\\n 0. \${T[\${L}76]}\\\n "
T[ E145] = "WARP ineterface can be switched to the following:\\\n 1. \$OPTION1\\\n 2. \$OPTION2\\\n 0. \${T[\${L}76]}"
T[ C145] = "WARP 网络接口可以切换为以下方式:\\\n 1. \$OPTION1\\\n 2. \$OPTION2\\\n 0. \${T[\${L}76]}"
T[ E146] = "Cannot switch to the same form as the current one."
T[ C146] = "不能切换为当前一样的形态"
T[ E147] = "Not available for IPv6 only VPS"
@ -305,17 +305,16 @@ T[C147]="IPv6 only VPS 不能使用此方案"
T[ E148] = "Install wireproxy. Wireguard client that exposes itself as a socks5 proxy or tunnels (bash menu.sh w)"
T[ C148] = "安装 wireproxy,让 WARP 在本地创建一个 socks5 代理 (bash menu.sh w)"
T[ E149] = "Congratulations! WirePorxy is working. Spend time:\$(( end - start )) seconds.\\\n The script runs on today: \$TODAY. Total:\$TOTAL"
T[ C149] = "恭喜!WirePorxy 工作中, 总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数:\$TOTAL"
T[ E150] = "\n WGCF WARP, WARP Linux Client, WireProxy hasn't been installed yet. The script is aborted.\n"
T[ C150] = "\n WGCF WARP, WARP Linux Client 和 WireProxy 均未安装,脚本退出\n"
T[ E151] = "\n 1. WARP Linux Client account\n 2. WireProxy account\n"
T[ C151] = "\n 1. WARP Linux Client 账户\n 2. WireProxy 账户\n"
T[ E152] = "\n 1. WGCF WARP account\n 2. WireProxy account\n"
T[ C152] = "\n 1. WGCF WARP 账户\n 2. WireProxy 账户\n"
T[ E153] = "\n 1. WGCF WARP account\n 2. WARP Linux Client account\n"
T[ C153] = "\n 1. WGCF WARP 账户\n 2. WARP Linux Client 账户\n"
T[ E154] = "\n 1. WGCF WARP account\n 2. WARP Linux Client account\n 3. WireProxy account\n"
T[ C154] = "\n 1. WGCF WARP 账户\n 2. WARP Linux Client 账户\n 3. WireProxy 账户\n"
T[ C149] = "恭喜!WirePorxy 工作中, 总耗时:\$(( end - start ))秒, 脚本当天运行次数:\$TODAY,累计运行次数:\$TOTAL"
T[ E150] = "WGCF WARP, WARP Linux Client, WireProxy hasn't been installed yet. The script is aborted.\n"
T[ E151] = "1. WARP Linux Client account\n 2. WireProxy account"
T[ C151] = "1. WARP Linux Client 账户\n 2. WireProxy 账户"
T[ E152] = "1. WGCF WARP account\n 2. WireProxy account"
T[ C152] = "1. WGCF WARP 账户\n 2. WireProxy 账户"
T[ E153] = "1. WGCF WARP account\n 2. WARP Linux Client account"
T[ C153] = "1. WGCF WARP 账户\n 2. WARP Linux Client 账户"
T[ E154] = "1. WGCF WARP account\n 2. WARP Linux Client account\n 3. WireProxy account"
T[ C154] = "1. WGCF WARP 账户\n 2. WARP Linux Client 账户\n 3. WireProxy 账户"
T[ E155] = "WGCF WARP has not been installed yet."
T[ C155] = "WGCF WARP 还未安装"
T[ E156] = "(!!! AMD64 only, do not select.)"
@ -346,6 +345,10 @@ T[E168]="Install CloudFlare Client and set mode to WARP (bash menu.sh l)"
T[ C168] = "安装 CloudFlare Client 并设置为 WARP 模式 (bash menu.sh l)"
T[ E169] = "WARP\$AC IPv4: \$WAN4 \$WARPSTATUS4 \$COUNTRY4 \$ASNORG4"
T[ C169] = "WARP\$AC IPv4: \$WAN4 \$WARPSTATUS4 \$COUNTRY4 \$ASNORG4"
T[ E170] = "Confirm all uninstallation please press [y], other keys do not uninstall by default:"
T[ C170] = "确认全部卸载请按y,其他键默认不卸载:"
T[ E171] = "Uninstall dependencies were complete."
T[ C171] = "依赖卸载成功"
# 自定义字体彩色,read 函数,友道翻译函数
red( ) { echo -e " \033[31m\033[01m $@ \033[0m " ; }
@ -399,7 +402,7 @@ check_operating_system(){
# 自定义 Alpine 系统若干函数
alpine_wgcf_restart( ) { wg-quick down wgcf >/dev/null 2>& 1; wg-quick up wgcf >/dev/null 2>& 1; }
alpine_wgcf_enable( ) { echo 'nohup wg-quick up wgcf &' > /etc/local.d/wgcf.start; chmod +x /etc/local.d/wgcf.start; rc-update add local; }
alpine_wgcf_enable( ) { echo -e "/opt/warp-go/tun.sh\nnohup /opt/warp-go/warp-go --config=/opt/warp-go/warp.conf &" > /etc/local.d/wgcf.start; chmod +x /etc/local.d/wgcf.start; rc-update add local; }
REGEX = ( "debian" "ubuntu" "centos|red hat|kernel|oracle linux|alma|rocky" "'amazon linux'" "alpine" "arch linux" )
RELEASE = ( "Debian" "Ubuntu" "CentOS" "CentOS" "Alpine" "Arch" )
@ -427,7 +430,9 @@ check_operating_system(){
check_dependencies( ) {
type -p curl >/dev/null 2>& 1 || ( yellow " ${ T [ ${ L } 7 ] } " && ${ PACKAGE_INSTALL [int] } curl 2>/dev/null) || ( yellow " ${ T [ ${ L } 8 ] } " && ${ PACKAGE_UPDATE [int] } && ${ PACKAGE_INSTALL [int] } curl 2>/dev/null)
! 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
# 对于 alpine 系统,升级库并重新安装依赖
[ [ $SYSTEM = Alpine && ! -e /etc/wireguard/menu.sh ] ] && ( ${ PACKAGE_UPDATE [int] } ; ${ PACKAGE_INSTALL [int] } curl wget grep)
}
# 检测 IPv4 IPv6 信息,WARP Ineterface 开启,普通还是 Plus账户 和 IP 信息
@ -559,7 +564,7 @@ change_ip(){
grep -q "^#.*\:\:\/0" /etc/wireguard/wgcf.conf && T6 = 0 || T6 = 1
case " $T4 $T6 " in
01 ) NF = '6' ; ; 10 ) NF = '4' ; ;
11 ) yellow " ${ T [ ${ L } 124 ] } " && reading " ${ T [ ${ L } 50 ] } " NETFLIX
11 ) yellow " \n ${ T [ ${ L } 124 ] } \n " && reading " ${ T [ ${ L } 50 ] } " NETFLIX
NF = '4' && [ [ $NETFLIX = 2 ] ] && NF = '6' ; ;
esac
@ -651,7 +656,7 @@ change_ip(){
REGION = ${ REGION :- 'US' }
echo " $REGION " | grep -qi " $EXPECT " && green " $( eval echo " ${ T [ ${ L } 125 ] } " ) " && i = 0 && sleep 1h || wireproxy_restart
else
wireproxy_restart
wireproxy_restart
fi
done
}
@ -686,7 +691,7 @@ change_ip(){
case " $b " in
0 ) red " ${ T [ ${ L } 150 ] } " && exit 1; ;
1| 2| 4 ) ${ CHANGE_IP1 [b] } ; ;
* ) yellow " ${ SHOW_CHOOSE [b] } " && reading " ${ T [ ${ L } 50 ] } " MODE
* ) yellow " \n ${ SHOW_CHOOSE [b] } \n " && reading " ${ T [ ${ L } 50 ] } " MODE
case " $MODE " in
[ 1-3] ) $( eval echo " \${CHANGE_IP $MODE [b]} " ) ; ;
* ) red " ${ T [ ${ L } 51 ] } [1-3] " ; sleep 1; change_ip; ;
@ -716,8 +721,6 @@ uninstall(){
uninstall_wgcf( ) {
wg-quick down wgcf >/dev/null 2>& 1
systemctl disable --now wg-quick@wgcf >/dev/null 2>& 1
[ [ $SYSTEM != "Arch" ] ] && ${ PACKAGE_UNINSTALL [int] } wireguard-dkms ipset dnsmasq resolvconf 2>/dev/null
${ PACKAGE_UNINSTALL [int] } wireguard-tools openresolv 2>/dev/null
rpm -e wireguard-tools 2>/dev/null
[ [ $( systemctl is-active systemd-resolved) != active ] ] && systemctl enable --now systemd-resolved >/dev/null 2>& 1
rm -rf /usr/bin/wgcf /etc/wireguard /usr/bin/wireguard-go wgcf-account.toml wgcf-profile.conf /usr/bin/warp /etc/dnsmasq.d/warp.conf /usr/bin/wireproxy
@ -741,8 +744,6 @@ uninstall(){
# 卸载 WirePorxy
uninstall_wireproxy( ) {
systemctl disable --now wireproxy
[ [ $SYSTEM != "Arch" ] ] && ${ PACKAGE_UNINSTALL [int] } wireguard-dkms resolvconf 2>/dev/null
${ PACKAGE_UNINSTALL [int] } openresolv 2>/dev/null
rm -rf /usr/bin/wgcf /etc/wireguard /usr/bin/wireguard-go wgcf-account.toml wgcf-profile.conf /usr/bin/warp /etc/dnsmasq.d/warp.conf /usr/bin/wireproxy /lib/systemd/system/wireproxy.service
[ [ -e /etc/gai.conf ] ] && sed -i '/^precedence \:\:ffff\:0\:0/d;/^label 2002\:\:\/16/d' /etc/gai.conf
[ [ -e /usr/bin/tun.sh ] ] && rm -f /usr/bin/tun.sh && sed -i '/tun.sh/d' /etc/crontab
@ -752,13 +753,28 @@ uninstall(){
[ [ -e /etc/wireguard/warp_unlock.sh ] ] && bash <( curl -sSL https://raw.githubusercontent.com/fscarmen/warp_unlock/main/unlock.sh) -U -$L
# 根据已安装情况执行卸载任务并显示结果
UNINSTALL_CHECK = ( "wg-quick" "warp-cli" "wireproxy" )
UNINSTALL_DO = ( "uninstall_wgcf" "uninstall_proxy" "uninstall_wireproxy" )
UNINSTALL_RESULT = ( " ${ T [ ${ L } 117 ] } " " ${ T [ ${ L } 119 ] } " " ${ T [ ${ L } 98 ] } " )
for ( ( i = 0; i<${# UNINSTALL_CHECK } ; i++) ) ; do
type -p ${ UNINSTALL_CHECK [i] } >/dev/null 2>& 1 && ( ${ UNINSTALL_DO [i] } ; green " ${ UNINSTALL_RESULT [i] } " )
UNINSTALL_CHECK = ( "wg-quick" "warp-cli" "wireproxy" )
UNINSTALL_DO = ( "uninstall_wgcf" "uninstall_proxy" "uninstall_wireproxy" )
UNINSTALL_DEPENDENCIES = ( "wireguard-tools openresolv " "" " openresolv " )
UNINSTALL_NOT_ARCH = ( "wireguard-dkms ipset dnsmasq resolvconf " "" "wireguard-dkms resolvconf " )
UNINSTALL_RESULT = ( " ${ T [ ${ L } 117 ] } " " ${ T [ ${ L } 119 ] } " " ${ T [ ${ L } 98 ] } " )
for ( ( i = 0; i<${# UNINSTALL_CHECK [@] } ; i++) ) ; do
type -p ${ UNINSTALL_CHECK [i] } >/dev/null 2>& 1 && UNINSTALL_DO_LIST[ i] = 1 && UNINSTALL_DEPENDENCIES_LIST += ${ UNINSTALL_DEPENDENCIES [i] } &&
[ [ $SYSTEM != "Arch" ] ] && UNINSTALL_DEPENDENCIES_LIST += ${ UNINSTALL_NOT_ARCH [i] }
done
# 列出依赖,确认是手动还是自动卸载
UNINSTALL_DEPENDENCIES_LIST = $( echo $UNINSTALL_DEPENDENCIES_LIST | sed "s/ /\n/g" | sort -u | paste -d " " -s)
yellow " \n $( eval echo " ${ T [ ${ L } 79 ] } " ) \n " && reading " ${ T [ ${ L } 170 ] } " CONFIRM_UNINSTALL
# 卸载核心程序
for ( ( i = 0; i<${# UNINSTALL_DO_LIST [@] } ; i++) ) ; do
[ ${ UNINSTALL_DO_LIST [i] } = 1 ] && ( ${ UNINSTALL_DO [i] } ; green " ${ UNINSTALL_RESULT [i] } " )
done
# 选择自动卸载依赖执行以下
[ [ $CONFIRM_UNINSTALL = [ Yy] ] ] && ( ${ PACKAGE_UNINSTALL [int] } $UNINSTALL_DEPENDENCIES_LIST 2>/dev/null; green " ${ T [ ${ L } 171 ] } \n " )
# 显示卸载结果
ip4_info; [ [ $L = C && -n " $COUNTRY4 " ] ] && COUNTRY4 = $( translate " $COUNTRY4 " )
ip6_info; [ [ $L = C && -n " $COUNTRY6 " ] ] && COUNTRY6 = $( translate " $COUNTRY6 " )
@ -770,7 +786,7 @@ ver(){
wget -N -P /etc/wireguard https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh || wget -N -P /etc/wireguard https://raw.githubusercontent.com/fscarmen/warp/main/menu.sh
chmod +x /etc/wireguard/menu.sh
ln -sf /etc/wireguard/menu.sh /usr/bin/warp
green " ${ T [ ${ L } 64 ] } : $( grep ^VERSION /etc/wireguard/menu.sh | sed "s/.*=//g" ) ${ T [ ${ L } 18 ] } : $( grep " T\[ ${ L } 1] " /etc/wireguard/menu.sh | cut -d \" -f2) " || red " ${ T [ ${ L } 65 ] } "
green " ${ T [ ${ L } 64 ] } : $( grep ^VERSION /etc/wireguard/menu.sh | sed "s/.*=//g" ) ${ T [ ${ L } 18 ] } : $( grep " T\[ ${ L } 1] " /etc/wireguard/menu.sh | cut -d \" -f2) " || red " ${ T [ ${ L } 65 ] } "
exit
}
@ -850,7 +866,8 @@ wireproxy_onoff(){
systemctl stop wireproxy
[ [ ! $( ss -nltp) = ~ 'wireproxy' ] ] && green " ${ T [ ${ L } 158 ] } "
else systemctl start wireproxy
else
systemctl start wireproxy
sleep 1 && proxy_info
[ [ $( ss -nltp) = ~ 'wireproxy' ] ] && green " ${ T [ ${ L } 99 ] } \n $( eval echo " ${ T [ ${ L } 162 ] } " ) "
[ [ -n " $QUOTA " ] ] && green " ${ T [ ${ L } 63 ] } : $QUOTA "
@ -868,7 +885,6 @@ check_stack(){
fi
CASE = ( "@0" "0@" "0@0" "@1" "0@1" "1@" "1@0" "1@1" )
for ( ( m = 0; m<${# CASE [@] } ; m++) ) ; do [ [ $T4 @$T6 = ${ CASE [m] } ] ] && break; done
NATIVE = ( "IPv6 only" "IPv4 only" " ${ T [ ${ L } 69 ] } " )
WARP_BEFORE = ( "" "" "" "WARP IPv6 only" "WARP IPv6" "WARP IPv4 only" "WARP IPv4" " ${ T [ ${ L } 70 ] } " )
WARP_AFTER1 = ( "" "" "" "WARP IPv4" "WARP IPv4" "WARP IPv6" "WARP IPv6" "WARP IPv4" )
WARP_AFTER2 = ( "" "" "" " ${ T [ ${ L } 70 ] } " " ${ T [ ${ L } 70 ] } " " ${ T [ ${ L } 70 ] } " " ${ T [ ${ L } 70 ] } " "WARP IPv6" )
@ -906,7 +922,7 @@ stack_switch(){
[ [ " $T4 @ $T6 @ $SWITCHCHOOSE " = ~ '1@0@4' | '0@1@6' | '1@1@D' ] ] && red " ${ T [ ${ L } 146 ] } " && exit 1 || TO = " $T4 $T6 $SWITCHCHOOSE "
else
OPTION1 = " $( eval echo " ${ T [ ${ L } 141 ] } " ) " ; OPTION2 = " $( eval echo " ${ T [ ${ L } 142 ] } " ) "
yellow " $( eval echo " ${ T [ ${ L } 145 ] } " ) " && reading " ${ T [ ${ L } 50 ] } " SWITCHTO
yellow " \n $( eval echo " ${ T [ ${ L } 145 ] } " ) \n " && reading " ${ T [ ${ L } 50 ] } " SWITCHTO
case " $SWITCHTO " in
1 ) TO = ${ TO1 [m] } ; ;
2 ) TO = ${ TO2 [m] } ; ;
@ -930,18 +946,19 @@ check_system_info(){
if [ [ $WG = 1 ] ] ; then
TUN = $( cat /dev/net/tun 2>& 1 | tr '[:upper:]' '[:lower:]' )
if [ [ ! $TUN = ~ 'in bad state' ] ] && [ [ ! $TUN = ~ '处于错误状态' ] ] && [ [ ! $TUN = ~ 'Die Dateizugriffsnummer ist in schlechter Verfassung' ] ] ; then
cat >/usr/bin/tun.sh << EOF
cat >/usr/bin/tun.sh << EOF
#!/usr/bin/env bash
mkdir -p /dev/net
mknod /dev/net/tun c 10 200
chmod 0666 /dev/net/tun
EOF
bash /usr/bin/tun.sh
TUN = $( cat /dev/net/tun 2>& 1 | tr '[:upper:]' '[:lower:]' )
bash /usr/bin/tun.sh
TUN = $( cat /dev/net/tun 2>& 1 | tr '[:upper:]' '[:lower:]' )
if [ [ ! $TUN = ~ 'in bad state' ] ] && [ [ ! $TUN = ~ '处于错误状态' ] ] && [ [ ! $TUN = ~ 'Die Dateizugriffsnummer ist in schlechter Verfassung' ] ] ; then
rm -f /usr/bin//tun.sh && red " ${ T [ ${ L } 3 ] } " && exit 1
else
echo "@reboot root bash /usr/bin/tun.sh" >> /etc/crontab
chmod +x /usr/bin/tun.sh
[ $SYSTEM != Alpine ] && echo "@reboot root bash /usr/bin/tun.sh" >> /etc/crontab
fi
fi
fi
@ -962,7 +979,7 @@ EOF
[ [ $L = C && -n " $COUNTRY4 " ] ] && COUNTRY4 = $( translate " $COUNTRY4 " )
[ [ $L = C && -n " $COUNTRY6 " ] ] && COUNTRY6 = $( translate " $COUNTRY6 " )
# 判断当前 WARP 状态,决定变量 PLAN,变量 PLAN 含义: 1=单栈 2=双栈 3=WARP已开启
# 判断当前 WARP 状态,决定变量 PLAN,变量 PLAN 含义: 1=单栈 2=双栈 3=WARP已开启
[ [ $TRACE4 $TRACE6 = ~ on| plus ] ] && PLAN = 3 || PLAN = $(( IPV4+IPV6))
# 判断处理器架构
@ -973,7 +990,7 @@ EOF
* ) red " $( eval echo " ${ T [ ${ L } 134 ] } " ) " && exit 1; ;
esac
# 判断当前 Linux Client 状态,决定变量 CLIENT,变量 CLIENT 含义: 0=未安装 1=已安装未激活 2=状态激活 3=Clinet proxy 已开启 5=Clinet warp 已开启
# 判断当前 Linux Client 状态,决定变量 CLIENT,变量 CLIENT 含义: 0=未安装 1=已安装未激活 2=状态激活 3=Clinet proxy 已开启 5=Clinet warp 已开启
CLIENT = 0
if type -p warp-cli >/dev/null 2>& 1; then
ACCOUNT = $( warp-cli --accept-tos account 2>/dev/null)
@ -987,7 +1004,7 @@ EOF
fi
fi
# 判断当前 WireProxy 状态,决定变量 WIREPROXY,变量 WIREPROXY 含义: 0=未安装 1=已安装未激活 2=状态激活 3=Clinet 已开启
# 判断当前 WireProxy 状态,决定变量 WIREPROXY,变量 WIREPROXY 含义: 0=未安装 1=已安装未激活 2=状态激活 3=Clinet 已开启
WIREPROXY = 0
if type -p wireproxy >/dev/null 2>& 1; then
WIREPROXY = 1
@ -1031,7 +1048,7 @@ input_url(){
[ [ $PUBLICKEY = ~ ^[ A-Z0-9a-z/+] { 43} = $ ] ] && MATCH2 = ${ T [ ${ L } 135 ] } || MATCH2 = ${ T [ ${ L } 136 ] }
[ [ $ADDRESS4 = ~ ^172.16.[ 01] .[ 0-9] { 1,3} $ ] ] && MATCH3 = ${ T [ ${ L } 135 ] } || MATCH3 = ${ T [ ${ L } 136 ] }
[ [ $ADDRESS6 = ~ ^fd01( :[ 0-9a-f] { 0,4} ) { 7} $ ] ] && MATCH4 = ${ T [ ${ L } 135 ] } || MATCH4 = ${ T [ ${ L } 136 ] }
yellow " $( eval echo " ${ T [ ${ L } 130 ] } " ) " && reading " ${ T [ ${ L } 131 ] } " CONFIRM
yellow " \n $( eval echo " ${ T [ ${ L } 130 ] } " ) \n " && reading " ${ T [ ${ L } 131 ] } " CONFIRM
}
# 升级 WARP+ 账户(如有),限制位数为空或者26位以防输入错误,WARP interface 可以自定义设备名(不允许字符串间有空格,如遇到将会以_代替)
@ -1211,14 +1228,14 @@ install(){
rm -rf /usr/bin/wgcf /usr/bin/wireguard-go wgcf-account.toml wgcf-profile.conf
# 询问是否有 WARP+ 或 Teams 账户
[ [ -z $LICENSETYPE ] ] && yellow " ${ T [ ${ L } 132 ] } " && reading " ${ T [ ${ L } 50 ] } " LICENSETYPE
[ [ -z $LICENSETYPE ] ] && yellow " \n ${ T [ ${ L } 132 ] } \n " && reading " ${ T [ ${ L } 50 ] } " LICENSETYPE
case $LICENSETYPE in
1 ) INPUT_LICENSE = 1 && input_license; ;
2 ) input_url; ;
esac
# 选择优先使用 IPv4 /IPv6 网络
yellow " ${ T [ ${ L } 105 ] } " && reading " ${ T [ ${ L } 50 ] } " PRIORITY
yellow " \n ${ T [ ${ L } 105 ] } \n " && reading " ${ T [ ${ L } 50 ] } " PRIORITY
# 脚本开始时间
start = $( date +%s)
@ -1248,15 +1265,15 @@ install(){
until [ [ -e wgcf-account.toml ] ] >/dev/null 2>& 1; do
wgcf register --accept-tos >/dev/null 2>& 1 && break
done
[ [ -n $LICENSE ] ] && yellow " \n${ T [ ${ L } 35 ] } \n " && sed -i " s#license_key.*#license_key = \" $LICENSE \"#g " wgcf-account.toml &&
( wgcf update --name " $NAME " > /etc/wireguard/info.log 2>& 1 || red " \n${ T [ ${ L } 36 ] } \n " )
[ [ -n $LICENSE ] ] && yellow " \n ${ T [ ${ L } 35 ] } \n" && sed -i " s#license_key.*#license_key = \" $LICENSE \"#g " wgcf-account.toml &&
( wgcf update --name " $NAME " > /etc/wireguard/info.log 2>& 1 || red " \n ${ T [ ${ L } 36 ] } \n" )
# 生成 Wire-Guard 配置文件 (wgcf-profile.conf)
[ [ -e wgcf-account.toml ] ] && wgcf generate >/dev/null 2>& 1
green " \n${ T [ ${ L } 33 ] } \n "
green " \n ${ T [ ${ L } 33 ] } \n"
# 反复测试最佳 MTU。 Wireguard Header: IPv4=60 bytes,IPv6=80 bytes,1280 ≤1 MTU ≤ 1420。 ping = 8(ICMP回显示请求和回显应答报文格式长度) + 20(IP首部) 。
# 详细说明:<[WireGuard] Header / MTU sizes for Wireguard>: https://lists.zx2c4.com/pipermail/wireguard/2017-December/002201.html
# 反复测试最佳 MTU。 Wireguard Header: IPv4=60 bytes,IPv6=80 bytes,1280 ≤1 MTU ≤ 1420。 ping = 8(ICMP回显示请求和回显应答报文格式长度) + 20(IP首部) 。
# 详细说明:<[WireGuard] Header / MTU sizes for Wireguard>: https://lists.zx2c4.com/pipermail/wireguard/2017-December/002201.html
MTU = $(( 1500 - 28 ))
[ [ $IPV4 $IPV6 = 01 ] ] && ping6 -c1 -W1 -s $MTU -Mdo 2606:4700:d0::a29f:c001 >/dev/null 2>& 1 || ping -c1 -W1 -s $MTU -Mdo 162.159.193.10 >/dev/null 2>& 1
until [ [ $? = 0 || $MTU -le $(( 1280 + 80 - 28 )) ] ] ; do
@ -1278,7 +1295,7 @@ install(){
MTU = $(( MTU+28-80))
[ [ -e wgcf-profile.conf ] ] && sed -i " s/MTU.*/MTU = $MTU /g " wgcf-profile.conf && green " \n${ T [ ${ L } 81 ] } \n "
[ [ -e wgcf-profile.conf ] ] && sed -i " s/MTU.*/MTU = $MTU /g " wgcf-profile.conf && green " \n ${ T [ ${ L } 81 ] } \n"
} &
# 对于 IPv4 only VPS 开启 IPv6 支持
@ -1294,7 +1311,7 @@ install(){
{ stack_priority; } &
# 根据系统选择需要安装的依赖
green " \n${ T [ ${ L } 32 ] } \n "
green " \n ${ T [ ${ L } 32 ] } \n"
Debian( ) {
# 添加 backports 源,之后才能安装 wireguard-tools
@ -1307,7 +1324,7 @@ install(){
# 更新源
${ PACKAGE_UPDATE [int] }
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
${ PACKAGE_INSTALL [int] } --no-install-recommends net-tools iproute2 openresolv dnsutils iptables
[ [ $OCTEEP != 1 ] ] && ${ PACKAGE_INSTALL [int] } --no-install-recommends wireguard-tools
@ -1319,13 +1336,13 @@ install(){
# 更新源
${ PACKAGE_UPDATE [int] }
# 安装一些必要的网络工具包和 wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
# 安装一些必要的网络工具包和 wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
${ PACKAGE_INSTALL [int] } --no-install-recommends net-tools iproute2 openresolv dnsutils iptables
[ [ $OCTEEP != 1 ] ] && ${ PACKAGE_INSTALL [int] } --no-install-recommends wireguard-tools
}
CentOS( ) {
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
[ [ $COMPANY = amazon ] ] && ${ PACKAGE_UPDATE [int] } && amazon-linux-extras install -y epel
${ PACKAGE_INSTALL [int] } epel-release
${ PACKAGE_INSTALL [int] } net-tools iptables
@ -1349,13 +1366,13 @@ install(){
}
Alpine( ) {
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
${ PACKAGE_INSTALL [int] } net-tools iproute2 openresolv openrc iptables ip6tables
[ [ $OCTEEP != 1 ] ] && ${ PACKAGE_INSTALL [int] } wireguard-tools
}
Arch( ) {
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
# 安装一些必要的网络工具包和wireguard-tools (Wire-Guard 配置工具: wg、wg-quick)
${ PACKAGE_INSTALL [int] } openresolv
[ [ $OCTEEP != 1 ] ] && ${ PACKAGE_INSTALL [int] } wireguard-tools
}
@ -1431,7 +1448,8 @@ BindAddress = 127.0.0.1:$PORT
EOF
# 创建 WireProxy systemd 进程守护
cat > /lib/systemd/system/wireproxy.service << EOF
if
cat > /lib/systemd/system/wireproxy.service << EOF
[ Unit]
Description = WireProxy for WARP
After = network.target
@ -1446,6 +1464,7 @@ Restart=always
[ Install]
WantedBy = multi-user.target
EOF
fi
# 运行 wireproxy
systemctl enable --now wireproxy; sleep 1
@ -1468,7 +1487,8 @@ EOF
red "\n==============================================================\n"
yellow " ${ T [ ${ L } 43 ] } \n " && help
else [ [ $ANEMONE = 1 ] ] && iptables_solution
else
[ [ $ANEMONE = 1 ] ] && iptables_solution
# 特殊 VPS 的配置文件 DNS 次序
[ [ $( hostname 2>& 1) = DiG9 ] ] && sed -i "s/DNS.*/DNS = 8.8.8.8,8.8.4.4,2001:4860:4860::8888,2001:4860:4860::8844/g" wgcf-profile.conf
@ -1731,7 +1751,7 @@ update(){
[ [ ! -e /etc/wireguard/wgcf-account.toml ] ] && red " ${ T [ ${ L } 59 ] } " && exit 1
[ [ ! -e /etc/wireguard/wgcf.conf ] ] && red " ${ T [ ${ L } 60 ] } " && exit 1
[ [ -z $LICENSETYPE ] ] && yellow " ${ T [ ${ L } 31 ] } " && reading " ${ T [ ${ L } 50 ] } " LICENSETYPE
[ [ -z $LICENSETYPE ] ] && yellow " \n ${ T [ ${ L } 31 ] } \n " && reading " ${ T [ ${ L } 50 ] } " LICENSETYPE
case " $LICENSETYPE " in
1 ) UPDATE_LICENSE = 1 && update_license
cd /etc/wireguard || exit
@ -1743,7 +1763,7 @@ update(){
net
[ [ $( curl -ks4 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g" ) = plus || $( curl -ks6 https://www.cloudflare.com/cdn-cgi/trace | grep warp | sed "s/warp=//g" ) = plus ] ] &&
check_quota &&
green " ${ T [ ${ L } 62 ] } \n ${ T [ ${ L } 25 ] } : $( grep 'Device name' /etc/wireguard/info.log | awk '{ print $NF }' ) \n ${ T [ ${ L } 63 ] } : $QUOTA " ) || red " ${ T [ ${ L } 36 ] } " ; ;
green " ${ T [ ${ L } 62 ] } \n ${ T [ ${ L } 25 ] } : $( grep 'Device name' /etc/wireguard/info.log | awk '{ print $NF }' ) \n ${ T [ ${ L } 63 ] } : $QUOTA " ) || red " ${ T [ ${ L } 36 ] } " ; ;
2 ) input_url
[ [ $CONFIRM = [ Yy] ] ] && ( echo " $TEAMS " > /etc/wireguard/info.log 2>& 1
@ -1776,7 +1796,7 @@ update(){
[ [ ! -e /etc/wireguard/wgcf-account.toml ] ] && red " ${ T [ ${ L } 59 ] } " && exit 1
[ [ ! -e /etc/wireguard/wgcf.conf ] ] && red " ${ T [ ${ L } 60 ] } " && exit 1
[ [ -z $LICENSETYPE ] ] && yellow " ${ T [ ${ L } 31 ] } " && reading " ${ T [ ${ L } 50 ] } " LICENSETYPE
[ [ -z $LICENSETYPE ] ] && yellow " ${ T [ ${ L } 31 ] } " && reading " ${ T [ ${ L } 50 ] } " LICENSETYPE
case " $LICENSETYPE " in
1 ) UPDATE_LICENSE = 1 && update_license
cd /etc/wireguard || exit
@ -1788,7 +1808,7 @@ update(){
systemctl restart wireproxy
[ [ $( eval echo " \$(curl -sx socks5h://localhost: $( ss -nltp | grep wireproxy | grep -oP '127.0*\S+' | cut -d: -f2) https://www.cloudflare.com/cdn-cgi/trace) " ) = ~ plus ] ] &&
check_quota &&
green " ${ T [ ${ L } 62 ] } \n ${ T [ ${ L } 25 ] } : $( grep 'Device name' /etc/wireguard/info.log | awk '{ print $NF }' ) \n ${ T [ ${ L } 63 ] } : $QUOTA " ) || red " ${ T [ ${ L } 36 ] } " ; ;
green " ${ T [ ${ L } 62 ] } \n ${ T [ ${ L } 25 ] } : $( grep 'Device name' /etc/wireguard/info.log | awk '{ print $NF }' ) \n ${ T [ ${ L } 63 ] } : $QUOTA " ) || red " ${ T [ ${ L } 36 ] } " ; ;
2 ) input_url
[ [ $CONFIRM = [ Yy] ] ] && ( echo " $TEAMS " > /etc/wireguard/info.log 2>& 1
@ -1861,7 +1881,7 @@ menu_setting(){
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'
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'
}
# 显示菜单
@ -1869,20 +1889,20 @@ menu(){
clear
yellow " ${ T [ ${ L } 16 ] } "
red "======================================================================================================================\n"
green " ${ T [ ${ L } 17 ] } : $VERSION ${ T [ ${ L } 18 ] } : ${ T [ ${ L } 1 ] } \n ${ T [ ${ L } 19 ] } :\n ${ T [ ${ L } 20 ] } : $SYS \n ${ T [ ${ L } 21 ] } : $( uname -r) \n ${ T [ ${ L } 22 ] } : $ARCHITECTURE \n ${ T [ ${ L } 23 ] } : $VIRT "
green " IPv4: $WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4 "
green " IPv6: $WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 "
[ [ $TRACE4 $TRACE6 = ~ plus ] ] && green " $( eval echo " ${ T [ ${ L } 114 ] } " ) $PLUSINFO "
[ [ $TRACE4 $TRACE6 = ~ on ] ] && green " ${ T [ ${ L } 115 ] } "
[ [ $PLAN != 3 ] ] && green " ${ T [ ${ L } 116 ] } "
[ [ $CLIENT = 0 ] ] && green " ${ T [ ${ L } 112 ] } "
[ [ $CLIENT = 2 ] ] && green " $( eval echo " ${ T [ ${ L } 113 ] } " ) "
[ [ $CLIENT = 3 ] ] && green " WARP$AC ${ T [ ${ L } 24 ] } $( eval echo " ${ T [ ${ L } 27 ] } " ) "
[ [ $CLIENT = 5 ] ] && green " WARP$AC ${ T [ ${ L } 24 ] } $( eval echo " ${ T [ ${ L } 169 ] } " ) "
[ [ $WIREPROXY = 0 ] ] && green " ${ T [ ${ L } 160 ] } "
[ [ $WIREPROXY = 2 ] ] && green " ${ T [ ${ L } 161 ] } "
[ [ $WIREPROXY = 3 ] ] && green " WARP$AC2 ${ T [ ${ L } 159 ] } $( eval echo " ${ T [ ${ L } 162 ] } " ) "
grep -q '+' <<< $AC $AC2 && green " ${ T [ ${ L } 63 ] } : $QUOTA "
green " ${ T [ ${ L } 17 ] } : $VERSION \t ${ T [ ${ L } 18 ] } : ${ T [ ${ L } 1 ] } \n ${ T [ ${ L } 19 ] } :\n\t ${ T [ ${ L } 20 ] } : $SYS \n\t ${ T [ ${ L } 21 ] } : $( uname -r) \n\t ${ T [ ${ L } 22 ] } : $ARCHITECTURE \n\t ${ T [ ${ L } 23 ] } : $VIRT "
green " \t IPv4: $WAN4 $WARPSTATUS4 $COUNTRY4 $ASNORG4 "
green " \t IPv6: $WAN6 $WARPSTATUS6 $COUNTRY6 $ASNORG6 "
[ [ $TRACE4 $TRACE6 = ~ plus ] ] && green " \t $( eval echo " ${ T [ ${ L } 114 ] } " ) \t $PLUSINFO "
[ [ $TRACE4 $TRACE6 = ~ on ] ] && green " \t ${ T [ ${ L } 115 ] } "
[ [ $PLAN != 3 ] ] && green " \t ${ T [ ${ L } 116 ] } "
[ [ $CLIENT = 0 ] ] && green " \t ${ T [ ${ L } 112 ] } "
[ [ $CLIENT = 2 ] ] && green " \t $( eval echo " ${ T [ ${ L } 113 ] } " ) "
[ [ $CLIENT = 3 ] ] && green " \t WARP$AC ${ T [ ${ L } 24 ] } \t $( eval echo " ${ T [ ${ L } 27 ] } " ) "
[ [ $CLIENT = 5 ] ] && green " \t WARP$AC ${ T [ ${ L } 24 ] } \t $( eval echo " ${ T [ ${ L } 169 ] } " ) "
[ [ $WIREPROXY = 0 ] ] && green " \t ${ T [ ${ L } 160 ] } "
[ [ $WIREPROXY = 2 ] ] && green " \t ${ T [ ${ L } 161 ] } "
[ [ $WIREPROXY = 3 ] ] && green " \t WARP$AC2 ${ T [ ${ L } 159 ] } \t $( eval echo " ${ T [ ${ L } 162 ] } " ) "
grep -q '+' <<< $AC $AC2 && green " \t ${ T [ ${ L } 63 ] } : $QUOTA "
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
@ -1896,7 +1916,7 @@ menu(){
fi
}
# 传参选项 OPTION: 1=为 IPv4 或者 IPv6 补全另一栈WARP; 2=安装双栈 WARP; u=卸载 WARP; b=升级内核、开启BBR及DD; o=WARP开关;p=刷 WARP+ 流量; 其他或空值=菜单界面
# 传参选项 OPTION: 1=为 IPv4 或者 IPv6 补全另一栈WARP; 2=安装双栈 WARP; u=卸载 WARP; b=升级内核、开启BBR及DD; o=WARP开关;p=刷 WARP+ 流量; 其他或空值=菜单界面
[ [ $1 != '[option]' ] ] && OPTION = $( tr '[:upper:]' '[:lower:]' <<< " $1 " )
# 参数选项 URL 或 License 或转换 WARP 单双栈