From 3e1cea320b7b1b7f401de9b9424a6c4cf9e2a6ed Mon Sep 17 00:00:00 2001 From: fscarmen <62703343+fscarmen@users.noreply.github.com> Date: Thu, 31 Mar 2022 00:06:06 +0800 Subject: [PATCH] Update menu.sh --- menu.sh | 101 +++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 74 insertions(+), 27 deletions(-) diff --git a/menu.sh b/menu.sh index 1d4b52d..cb16c75 100644 --- a/menu.sh +++ b/menu.sh @@ -75,8 +75,8 @@ T[E32]="Step 1/3: Install dependencies..." T[C32]="进度 1/3:安装系统依赖……" T[E33]="Step 2/3: WGCF is ready" T[C33]="进度 2/3:已安装 WGCF" -T[E34]="This system is a native dualstack. You can only choose the WARP dualstack. Same options as 1" -T[C34]="此系统为原生双栈,只能选择 WARP 双栈方案,选项与 1 相同" +T[E34]="" +T[C34]="" T[E35]="Update WARP+ account..." T[C35]="升级 WARP+ 账户中……" T[E36]="The upgrade failed, WARP+ account error or more than 5 devices have been activated. Free WARP account to continu." @@ -151,8 +151,8 @@ T[E70]="WARP dualstack" T[C70]="WARP 双栈" T[E71]="Turn on WARP" T[C71]="打开 WARP" -T[E72]="Turn off, uninstall WARP interface and Linux Client" -T[C72]="永久关闭 WARP 网络接口,并删除 WARP 和 Linux Client" +T[E72]="Turn off, uninstall WARP interface, Linux Client and WireProxy" +T[C72]="永久关闭 WARP 网络接口,并删除 WARP、 Linux Client 和 WireProxy" T[E73]="Upgrade kernel, turn on BBR, change Linux system" T[C73]="升级内核、安装BBR、DD脚本" T[E74]="Getting WARP+ quota by scripts" @@ -293,8 +293,8 @@ T[E141]="Switch \${WARP_BEFORE[m]} to \${WARP_AFTER1[m]}" T[C141]="\${WARP_BEFORE[m]} 转为 \${WARP_AFTER1[m]}" T[E142]="Switch \${WARP_BEFORE[m]} to \${WARP_AFTER2[m]}" T[C142]="\${WARP_BEFORE[m]} 转为 \${WARP_AFTER2[m]}" -T[E143]="Change Client port" -T[C143]="更改 Client 端口" +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" @@ -333,6 +333,12 @@ T[E161]="WireProxy is installed and disconnected" T[C161]="WireProxy 已安装,状态为断开连接" T[E162]="Local Socks5:\$PROXYSOCKS52 WARP\$AC2 IPv4:\$PROXYIP2 \$PROXYCOUNTRY2 \$PROXYASNORG2" T[C162]="本地 Socks5:\$PROXYSOCKS52 WARP\$AC2 IPv4:\$PROXYIP2 \$PROXYCOUNTRY2 \$PROXYASNORG2" +T[E163]="Connect the WirePorxy" +T[C163]="连接 WirePorxy" +T[E164]="Disconnect the WirePorxy" +T[C164]="断开 WirePorxy" + + # 自定义字体彩色,read 函数,友道翻译函数 red(){ echo -e "\033[31m\033[01m$1\033[0m"; } @@ -470,7 +476,7 @@ proxy_info(){ PROXYIP2=$(expr "$PROXYJASON2" : '.*ip\":\"\([^"]*\).*') PROXYCOUNTRY2=$(expr "$PROXYJASON2" : '.*country\":\"\([^"]*\).*') [[ $L = C ]] && PROXYCOUNTRY2=$(translate "$PROXYCOUNTRY2") - PROXYASNORG2=$(expr "$PROXYJASON2" : '.*asn_org\":\"\([^"]*\).*')2 + PROXYASNORG2=$(expr "$PROXYJASON2" : '.*asn_org\":\"\([^"]*\).*') TRACE42=$(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)") if [[ $TRACE42 =~ plus ]]; then grep -sq 'Device name' /etc/wireguard/info.log && AC2='+' || AC2=' Teams' @@ -596,7 +602,10 @@ change_ip(){ } change_wireproxy(){ - wireproxy_restart(){ red " $(eval echo "${T[${L}126]}") " && kill -9 $(pgrep -f wireproxy) >/dev/null 2>&1; sleep 1; nohup wireproxy /etc/wireguard/proxy.conf >/dev/null 2>&1 &; sleep $j; } + wireproxy_restart(){ + red " $(eval echo "${T[${L}126]}") " && kill -9 $(pgrep -f wireproxy) >/dev/null 2>&1; sleep 1; nohup wireproxy /etc/wireguard/proxy.conf >/dev/null 2>&1 & + sleep $j + } PROXYPORT="$(ss -nltp | grep 'wireproxy' | grep -oP '127.0*\S+' | cut -d: -f2)" [[ -z "$EXPECT" ]] && input_region @@ -645,10 +654,10 @@ change_ip(){ case "$b" in 0 ) red " ${T[${L}150]} " && exit 1;; - 1|2|4 ) ${CHANGE_IP1[d]};; - * ) yellow " ${SHOW_CHOOSE[d]} " && reading " ${T[${L}50]} " MODE + 1|2|4 ) ${CHANGE_IP1[b]};; + * ) yellow " ${SHOW_CHOOSE[b]} " && reading " ${T[${L}50]} " MODE case "$MODE" in - [1-3] ) $(eval echo "\${CHANGE_IP$MODE[d]}");; + [1-3] ) $(eval echo "\${CHANGE_IP$MODE[b]}");; * ) red " ${T[${L}51]} [1-3] "; sleep 1; change_ip;; esac;; esac @@ -890,13 +899,19 @@ EOF [[ $TRACE4$TRACE6 =~ on|plus ]] && PLAN=3 || PLAN=$((IPV4+IPV6)) # 判断当前 Linux Client 状态,决定变量 CLIENT,变量 CLIENT 含义:0=未安装 1=已安装未激活 2=状态激活 3=Clinet 已开启 - type -P warp-cli >/dev/null 2>&1 && CLIENT=1 || CLIENT=0 - [[ $CLIENT = 1 ]] && [[ $(systemctl is-active warp-svc 2>/dev/null) = active || $(systemctl is-enabled warp-svc 2>/dev/null) = enabled ]] && CLIENT=2 - [[ $CLIENT = 2 ]] && [[ $(ss -nltp) =~ 'warp-svc' ]] && CLIENT=3 && proxy_info + CLIENT=0 + if type -P warp-cli >/dev/null 2>&1; then + CLIENT=1 + [[ $CLIENT = 1 ]] && [[ $(systemctl is-active warp-svc 2>/dev/null) = active || $(systemctl is-enabled warp-svc 2>/dev/null) = enabled ]] && CLIENT=2 + [[ $CLIENT = 2 ]] && [[ $(ss -nltp) =~ 'warp-svc' ]] && CLIENT=3 && proxy_info + fi # 判断当前 WireProxy 状态,决定变量 WIREPROXY,变量 WIREPROXY 含义:0=未安装 1=已安装未激活 2=状态激活 3=Clinet 已开启 - type -P wireproxy >/dev/null 2>&1 && WIREPROXY=1 || WIREPROXY=0 - [[ $WIREPROXY = 1 ]] && [[ $(ss -nltp) =~ 'wireproxy' ]] && WIREPROXY=3 && proxy_info || WIREPROXY=2 + WIREPROXY=0 + if type -P wireproxy >/dev/null 2>&1; then + WIREPROXY=1 + [[ $WIREPROXY = 1 ]] && [[ $(ss -nltp) =~ 'wireproxy' ]] && WIREPROXY=3 && proxy_info || WIREPROXY=2 + fi # 在KVM的前提下,判断 Linux 版本是否小于 5.6,如是则安装 wireguard 内核模块,变量 WG=1。由于 linux 不能直接用小数作比较,所以用 (主版本号 * 100 + 次版本号 )与 506 作比较 [[ $LXC != 1 && $(($(uname -r | cut -d . -f1) * 100 + $(uname -r | cut -d . -f2))) -lt 506 ]] && WG=1 @@ -966,6 +981,39 @@ input_port(){ done } +# Linux Client 或 WireProxy 端口 +change_port(){ + socks5_port(){ input_port; warp-cli --accept-tos set-proxy-port "$PORT"; } + wireproxy_port(){ + input_port + kill -9 $(pgrep -f wireproxy) >/dev/null 2>&1 + sed -i "s/BindAddress.*/BindAddress = 127.0.0.1:$PORT/g" /etc/wireguard/proxy.conf + nohup wireproxy /etc/wireguard/proxy.conf >/dev/null 2>&1 & + } + + INSTALL_CHECK=("$CLIENT" "$WIREPROXY") + CASE_RESAULT=("0 1" "1 0" "1 1") + SHOW_CHOOSE=("" "" "${T[${L}151]}") + CHANGE_PORT1=("wireproxy_port" "socks5_port" "socks5_port") + CHANGE_PORT2=("" "" "wireproxy_port") + + for ((e=0;c<${#INSTALL_CHECK[@]};e++)); do + [[ "${INSTALL_CHECK[e]}" -gt 1 ]] && INSTALL_RESULT[e]=1 || INSTALL_RESULT[e]=0 + done + + for ((f=0; b<${#CASE_RESAULT[@]}; f++)); do + [[ ${INSTALL_RESULT[@]} = "${CASE_RESAULT[b]}" ]] && break + done + + case "$f" in + 0|1 ) ${CHANGE_PORT1[f]};; + 2 ) yellow " ${SHOW_CHOOSE[f]} " && reading " ${T[${L}50]} " MODE + case "$MODE" in + [1-2] ) $(eval echo "\${CHANGE_IP$MODE[f]}");; + * ) red " ${T[${L}51]} [1-2] "; sleep 1; change_port;; + esac;; + esac + # 选用 iptables+dnsmasq+ipset 方案执行 iptables_solution(){ ${PACKAGE_INSTALL[int]} ipset dnsmasq resolvconf mtr @@ -1547,16 +1595,14 @@ update(){ # 判断当前 WARP 网络接口及 Client 的运行状态,并对应的给菜单和动作赋值 menu_setting(){ - case "$CLIENT" in - 2 ) OPTION1="${T[${L}88]}"; OPTION2="${T[${L}143]}"; OPTION3="${T[${L}144]}"; OPTION4="${T[${L}78]}"; OPTION5="${T[${L}77]}"; - ACTION1(){ proxy_onoff; }; ACTION2(){ input_port; warp-cli --accept-tos set-proxy-port "$PORT"; }; - ACTION3(){ CONF=106; [[ $TRACE6 != off ]] && red " ${T[${L}140]} " && exit 1 || install; }; ACTION4(){ update; }; ACTION5(){ onff; };; + if [[ "$CLIENT" -gt 1 || "$WIREPROXY" -gt 1 ]]; then + [[ "$CLIENT" -lt 3 ]] && OPTION1="${T[${L}88]}" || OPTION1="${T[${L}89]}" + [[ "$WIREPROXY" -lt 3 ]] && OPTION2="${T[${L}163]}" || OPTION2="${T[${L}164]}" + OPTION3="${T[${L}143]}"; OPTION4="${T[${L}78]}" - 3 ) OPTION1="${T[${L}89]}"; OPTION2="${T[${L}143]}"; OPTION3="${T[${L}144]}"; OPTION4="${T[${L}78]}"; OPTION5="${T[${L}77]}"; - ACTION1(){ proxy_onoff; }; ACTION2(){ input_port; warp-cli --accept-tos set-proxy-port "$PORT"; }; - ACTION3(){ CONF=106; [[ $TRACE6 != off ]] && red " ${T[${L}140]} " && exit 1 || install; }; ACTION4(){ update; }; ACTION5(){ onff; };; + ACTION1(){ proxy_onoff; }; ACTION2(){ wireproxy_onoff; }; ACTION3(){ change_port; }; ACTION4(){ update; }; - * ) check_stack + else check_stack case "$m" in [0-2] ) NATIVE=("IPv6 only" "IPv4 only" "${T[${L}69]}") CONF1=("014" "104" "114") @@ -1568,10 +1614,11 @@ menu_setting(){ * ) OPTION1="$(eval echo "${T[${L}141]}")"; OPTION2="$(eval echo "${T[${L}142]}")"; OPTION3="${T[${L}78]}"; OPTION4="${T[${L}77]}" ACTION1(){ stack_switch; }; ACTION2(){ stack_switch; }; ACTION3(){ update; }; ACTION4(){ onoff; };; esac;; - esac + fi + + OPTION5="${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="${T[${L}138]}"; OPTION13="${T[${L}148]}"; OPTION0="${T[${L}76]}" - OPTION5="${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="${T[${L}138]}"; OPTION13="${T[${L}148]}"; OPTION0="${T[${L}76]}" 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; }; ACTION12(){ [[ $m = 0 ]] && red " ${T[${L}147]} " && exit 1; CONF=${CONF1[m]}; ANEMONE=1 ;install; };