From 1b39b2ebd4674eb40f35b6ad89b5e4be927b5099 Mon Sep 17 00:00:00 2001 From: juewuy Date: Sun, 25 Oct 2020 10:01:58 +0800 Subject: [PATCH] =?UTF-8?q?v1.0.0beta15.4=20~Redir=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9F=BA=E4=BA=8Etproxy=E7=9A=84udp=E4=BB=A3?= =?UTF-8?q?=E7=90=86=20~=E4=BF=AE=E5=A4=8D=E6=9B=B4=E6=96=B0=E6=A3=80?= =?UTF-8?q?=E6=B5=8B=E5=A4=B1=E8=B4=A5=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/clashfm.tar.gz | Bin 21343 -> 21741 bytes bin/version | 2 +- install.sh | 6 ++- scripts/clash.sh | 115 ++++++++++++++++++++++++----------------- scripts/getdate.sh | 126 +++++++++++++++++++++++---------------------- scripts/start.sh | 27 +++++++++- 6 files changed, 162 insertions(+), 114 deletions(-) diff --git a/bin/clashfm.tar.gz b/bin/clashfm.tar.gz index bd3e1aaf4c06e28b6a0c4e450b7904f7740863b6..422a25ab440b64fee1d50dfc4000af970dafad8a 100644 GIT binary patch delta 21606 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 | grep -oE "releases/tag/.*" | awk -F '[/" ]' '{print $3}') + webget /tmp/clashrelease https://github.com.cnpmjs.org/juewuy/ShellClash/releases/latest echoon rediroff 2>/tmp/clashrelease + release_new=$( cat /tmp/clashrelease | grep -aoE "releases/tag/.*" | awk -F '[/" ]' '{print $3}') [ -z "$release_new" ] && release_new=master url=$url@$release_new fi webget /tmp/clashversion $url/bin/version echooff -[ "$result" = "200" ] && source /tmp/clashversion || echo -e "\033[31m检查更新失败!\033[0m" +[ "$result" = "200" ] && versionsh=$(cat /tmp/clashversion | grep "versionsh" | awk -F "=" '{print $2}') [ -z "$release_new" ] && release_new=$versionsh rm -rf /tmp/clashversion +rm -rf /tmp/clashrelease [ -z "$release_new" ] && echo "无法连接服务器!" && exit tarurl=$url/bin/clashfm.tar.gz diff --git a/scripts/clash.sh b/scripts/clash.sh index 3a57e31..2c82f0a 100644 --- a/scripts/clash.sh +++ b/scripts/clash.sh @@ -76,7 +76,7 @@ getconfig(){ [ -n "$cronpath" ] && sed -i "1i\cronpath=\'$cronpath\'" $ccfg fi #输出状态 - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;46m欢迎使用ShellClash!\033[0m 版本:$versionsh_l" echo -e "Clash服务"$run","$auto"" if [ -n "$PID" ];then @@ -142,7 +142,7 @@ setport(){ clashadv fi fi - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e " 1 修改Http/Sock5端口: \033[36m$mix_port\033[0m" echo -e " 2 设置Http/Sock5密码: \033[36m$authentication\033[0m" echo -e " 3 修改静态路由端口: \033[36m$redir_port\033[0m" @@ -209,7 +209,7 @@ setdns(){ fi [ -z "$dns_nameserver" ] && dns_nameserver='114.114.114.114, 223.5.5.5' [ -z "$dns_fallback" ] && dns_fallback='1.0.0.1, 8.8.4.4' - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "当前基础DNS:\033[36m$dns_nameserver\033[0m" echo -e "fallbackDNS:\033[36m$dns_fallback\033[0m" echo -e "多个DNS地址请用\033[30;47m | \033[0m分隔一次性输入" @@ -262,10 +262,10 @@ setdns(){ checkport(){ for portx in $dns_port $mix_port $redir_port $db_port ;do if [ -n "$(netstat -ntul 2>&1 |grep :$portx)" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "检测到端口【$portx】被以下进程占用!clash可能无法正常启动!\033[33m" echo $(netstat -ntulp | grep :$portx | head -n 1) - echo -e "\033[0m~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo -e "\033[0m-----------------------------------------------" echo -e "\033[36m请修改默认端口配置!\033[0m" setport source $ccfg @@ -276,13 +276,13 @@ checkport(){ clashstart(){ #检查clash核心 if [ ! -f $clashdir/clash ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m没有找到核心文件,请先下载clash核心!\033[0m" source $clashdir/getdate.sh && checkupdate && getcore fi #检查GeoIP数据库 if [ ! -f $clashdir/Country.mmdb ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m没有找到GeoIP数据库文件,请下载数据库文件!\033[0m" source $clashdir/getdate.sh && checkupdate && getgeo fi @@ -362,7 +362,7 @@ macfilter(){ fi del_mac } - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- [ -f /var/lib/dhcp/dhcpd.leases ] && dhcpdir='/var/lib/dhcp/dhcpd.leases' [ -f /var/lib/dhcpd/dhcpd.leases ] && dhcpdir='/var/lib/dhcpd/dhcpd.leases' [ -f /tmp/dhcp.leases ] && dhcpdir='/tmp/dhcp.leases' @@ -411,7 +411,7 @@ macfilter(){ } clashcfg(){ set_redir_mod(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "当前代理模式为:\033[47;30m $redir_mod \033[0m;Clash核心为:\033[47;30m $clashcore \033[0m" echo -e "\033[33m切换模式后需要手动重启clash服务以生效!\033[0m" echo -e "\033[36mTun及混合模式必须使用clashpre核心!\033[0m" @@ -439,7 +439,7 @@ clashcfg(){ redir_mod=Redir模式 elif [ "$num" = 2 ]; then if [ "$clashcore" = "clash" ] || [ "$clashcore" = "clashr" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m当前核心不支持开启Tun模式!请先切换clash核心!!!\033[0m" clashcfg fi @@ -447,19 +447,19 @@ clashcfg(){ dns_mod=fake-ip elif [ "$num" = 3 ]; then if [ "$clashcore" = "clash" ] || [ "$clashcore" = "clashr" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m当前核心不支持开启Tun模式!请先切换clash核心!!!\033[0m" clashcfg fi redir_mod=混合模式 elif [ "$num" = 4 ]; then redir_mod=纯净模式 - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[32m已经设置为纯净模式!\033[0m" echo -e "\033[33m当前模式必须手动在设备WiFi或应用中配置HTTP或sock5代理\033[0m" echo -e "HTTP/SOCK5代理服务器地址:\033[30;47m$host\033[0m;端口均为:\033[30;47m$mix_port\033[0m" echo -e "\033[31m也可以使用PAC自动代理文件,具体使用方法请自行搜索\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- read -p "是否配置自动代理PAC文件(1/0) > " res if [ "$res" = 1 ]; then source $clashdir/getdate.sh && setpac @@ -472,11 +472,11 @@ clashcfg(){ sed -i "1i\redir_mod=$redir_mod" $ccfg sed -i '/dns_mod*/'d $ccfg sed -i "1i\dns_mod=$dns_mod" $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[36m已设为 $redir_mod !!\033[0m" } set_dns_mod(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "当前DNS运行模式为:\033[47;30m $dns_mod \033[0m" echo -e "\033[33m切换模式后需要手动重启clash服务以生效!\033[0m" echo ----------------------------------------------- @@ -504,7 +504,7 @@ clashcfg(){ sed -i "1i\dns_mod=$dns_mod" $ccfg sed -i '/redir_mod*/'d $ccfg sed -i "1i\redir_mod=$redir_mod" $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[36m已设为 $dns_mod 模式!!\033[0m" } @@ -513,9 +513,10 @@ clashcfg(){ [ -z "$common_ports" ] && common_ports=已开启 [ -z "$dns_mod" ] && dns_mod=redir_host [ -z "$dns_over" ] && dns_over=已开启 + [ -z "$local_proxy" ] && local_proxy=未开启 [ -z "$(cat $clashdir/mac)" ] && mac_return=未开启 || mac_return=已启用 # - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;47m欢迎使用功能设置菜单:\033[0m" echo -e "\033[32m修改配置后请手动重启clash服务!\033[0m" echo ----------------------------------------------- @@ -525,6 +526,7 @@ clashcfg(){ echo -e " 4 只代理常用端口: \033[36m$common_ports\033[0m ————用于屏蔽P2P流量" echo -e " 5 过滤局域网mac地址: \033[36m$mac_return\033[0m ————列表内设备不走代理" echo -e " 6 不使用本地DNS服务: \033[36m$dns_over\033[0m ————防止redir-host模式的dns污染" + echo -e " 7 设置代理本机流量: \033[36m$local_proxy\033[0m ————使用环境变量或者PAC配置本机代理" echo ----------------------------------------------- echo -e " 9 \033[32m重启\033[0mclash服务" echo -e " 0 返回上级菜单 \033[0m" @@ -545,7 +547,7 @@ clashcfg(){ elif [ "$num" = 3 ]; then sed -i '/skip_cert*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$skip_cert" = "未开启" ] > /dev/null 2>&1; then sed -i "1i\skip_cert=已开启" $ccfg echo -e "\033[33m已设为开启跳过本地证书验证!!\033[0m" @@ -559,7 +561,7 @@ clashcfg(){ elif [ "$num" = 4 ]; then sed -i '/common_ports*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$common_ports" = "未开启" ] > /dev/null 2>&1; then sed -i "1i\common_ports=已开启" $ccfg echo -e "\033[33m已设为仅代理(22,53,587,465,995,993,143,80,443)等常用端口!!\033[0m" @@ -576,7 +578,7 @@ clashcfg(){ elif [ "$num" = 6 ]; then sed -i '/dns_over*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$dns_over" = "未开启" ] > /dev/null 2>&1; then sed -i "1i\dns_over=已开启" $ccfg echo -e "\033[33m已设置DNS为不走本地dnsmasq服务器!\033[0m" @@ -591,6 +593,25 @@ clashcfg(){ fi clashcfg + elif [ "$num" = 7 ]; then + sed -i '/local_proxy*/'d $ccfg + echo ----------------------------------------------- + if [ "$local_proxy" = "未开启" ] > /dev/null 2>&1; then + sed -i "1i\local_proxy=已开启" $ccfg + local_proxy=已开启 + $clashdir/start.sh set_proxy $mix_port $hostdir + echo -e "\033[32m已经成功配置本机代理~\033[0m" + echo -e "\033[36m如未生效,请重新启动终端或重新连接SSH!\033[0m" + else + sed -i "1i\local_proxy=未开启" $ccfg + local_proxy=未开启 + $clashdir/start.sh unset_proxy + echo -e "\033[33m已经停用本机代理规则!!\033[0m" + echo -e "\033[36m如未生效,请重新启动终端或重新连接SSH!\033[0m" + fi + sleep 1 + clashcfg + elif [ "$num" = 9 ]; then clashstart clashsh @@ -604,9 +625,9 @@ clashadv(){ [ -z "$modify_yaml" ] && modify_yaml=未开启 [ -z "$ipv6_support" ] && ipv6_support=未开启 [ -z "$start_old" ] && start_old=未开启 - [ -z "$local_proxy" ] && local_proxy=未开启 + [ -z "$tproxy_mod" ] && tproxy_mod=未开启 # - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;47m欢迎使用进阶模式菜单:\033[0m" echo -e "\033[33m如您不是很了解clash的运行机制,请勿更改!\033[0m" echo -e "\033[32m修改配置后请手动重启clash服务!\033[0m" @@ -614,7 +635,7 @@ clashadv(){ echo -e " 1 使用自定义配置: \033[36m$modify_yaml\033[0m ————不使用内置规则修饰config.yaml" echo -e " 2 启用ipv6支持: \033[36m$ipv6_support\033[0m ————实验性功能,可能不稳定" echo -e " 3 使用保守方式启动: \033[36m$start_old\033[0m ————切换时会停止clash服务" - echo -e " 4 代理本机流量: \033[36m$local_proxy\033[0m ————使用环境变量或者PAC配置本机代理" + echo -e " 4 Redir模式udp转发: \033[36m$tproxy_mod\033[0m ————依赖iptables-mod-tproxy" echo -e " 5 手动指定clash运行端口及秘钥" echo -e " 6 手动配置内置DNS服务" echo ----------------------------------------------- @@ -631,7 +652,7 @@ clashadv(){ elif [ "$num" = 1 ]; then sed -i '/modify_yaml*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$modify_yaml" = "未开启" ] > /dev/null 2>&1; then sed -i "1i\modify_yaml=已开启" $ccfg echo -e "\033[33m已设为使用用户完全自定义的配置文件!!" @@ -648,7 +669,7 @@ clashadv(){ elif [ "$num" = 2 ]; then sed -i '/ipv6_support*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$ipv6_support" = "未开启" ] > /dev/null 2>&1; then sed -i "1i\ipv6_support=已开启" $ccfg echo -e "\033[33m已开启对ipv6协议的支持!!\033[0m" @@ -664,7 +685,7 @@ clashadv(){ elif [ "$num" = 3 ]; then sed -i '/start_old*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$start_old" = "未开启" ] > /dev/null 2>&1; then sed -i "1i\start_old=已开启" $ccfg echo -e "\033[33m改为使用保守方式启动clash服务!!\033[0m" @@ -681,20 +702,20 @@ clashadv(){ clashadv elif [ "$num" = 4 ]; then - sed -i '/local_proxy*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - if [ "$local_proxy" = "未开启" ] > /dev/null 2>&1; then - sed -i "1i\local_proxy=已开启" $ccfg - local_proxy=已开启 - $clashdir/start.sh set_proxy $mix_port $hostdir - echo -e "\033[32m已经成功配置本机代理~\033[0m" - echo -e "\033[36m如未生效,请重新启动终端或重新连接SSH!\033[0m" + sed -i '/tproxy_mod*/'d $ccfg + echo ----------------------------------------------- + if [ "$tproxy_mod" = "未开启" ]; then + if [ -n "$(iptables -j TPROXY 2>&1 | grep 'on-port')" ];then + sed -i "1i\tproxy_mod=已开启" $ccfg + tproxy_mod=已开启 + echo -e "\033[32m已经为Redir模式启用udp转发功能!\033[0m" + else + echo -e "\033[31m您的设备不支持tproxy模式,无法开启!\033[0m" + fi else - sed -i "1i\local_proxy=未开启" $ccfg - local_proxy=未开启 - $clashdir/start.sh unset_proxy - echo -e "\033[33m已经停用本机代理规则!!\033[0m" - echo -e "\033[36m如未生效,请重新启动终端或重新连接SSH!\033[0m" + sed -i "1i\tproxy_mod=未开启" $ccfg + tproxy_mod=未开启 + echo -e "\033[33m已经停止使用tproxy转发udp流量!!\033[0m" fi sleep 1 clashadv @@ -746,7 +767,7 @@ clashcron(){ clashcron elif [ "$num" = 9 ]; then sed -i /$cronname/d $cronpath - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m定时任务:$cronname已删除!\033[0m" clashcron elif [ "$num" = 8 ]; then @@ -787,7 +808,7 @@ clashcron(){ if [ "$res" = '1' ]; then sed -i /$cronname/d $cronpath echo "$min $hour * * $week $cronset >/dev/null 2>&1 #$week1的$hour点$min分$cronname" >> $cronpath - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m定时任务已添加!!!\033[0m" chmod 600 $cronpath #修改权限 fi @@ -795,10 +816,10 @@ clashcron(){ } checkcron(){ if [ -z "$cronpath" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[33m找不到定时任务配置文件,无法添加添加定时任务!" echo -e "\033[0m请手动指定定时任务配置文件,文件位置可以通过【crontab -e】命令查看\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- read -p "请输入crontab文件路径(输入回车返回主菜单) > " path if [ -z "$path" ];then clashsh @@ -814,7 +835,7 @@ clashcron(){ } #定时任务菜单 checkcron #检测定时任务文件 - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;47m欢迎使用定时任务功能:\033[0m" echo -e "\033[44m 实验性功能,遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" echo ----------------------------------------------- @@ -890,13 +911,13 @@ clashsh(){ elif [ "$num" = 3 ]; then $clashdir/start.sh stop - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31mClash服务已停止!\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- exit; elif [ "$num" = 4 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$start_old" = "已开启" ];then sed -i "/start_old*/d" $ccfg sed -i "1i\start_old=未开启" $ccfg diff --git a/scripts/getdate.sh b/scripts/getdate.sh index bac3c0b..196ba09 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -19,7 +19,7 @@ webget(){ export all_proxy='' } linkconfig(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[44m 实验性功能,遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" echo 当前使用规则为:$rule_link echo 1 ACL4SSR通用版无去广告(推荐) @@ -47,12 +47,12 @@ linkconfig(){ sed -i '/rule_link*/'d $ccfg sed -i "4i\rule_link="$num"" $ccfg rule_link=$num - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[32m设置成功!返回上级菜单\033[0m" fi } linkserver(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[44m 实验性功能,遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" echo -e "\033[36m 感谢 https://github.com/tindy2013/subconverter \033[0m" echo 当前使用后端为:$server_link @@ -73,13 +73,13 @@ linkserver(){ sed -i '/server_link*/'d $ccfg sed -i "4i\server_link="$num"" $ccfg server_link=$num - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[32m设置成功!返回上级菜单\033[0m" fi } linkfilter(){ [ -z "$exclude" ] && exclude="未设置" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[44m 实验性功能,遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" echo -e "\033[33m当前过滤关键字:\033[47;30m$exclude\033[0m" echo ----------------------------------------------- @@ -104,7 +104,7 @@ linkfilter(){ } linkfilter2(){ [ -z "$include" ] && include="未设置" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[44m 实验性功能,遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" echo -e "\033[33m当前筛选关键字:\033[47;30m$include\033[0m" echo ----------------------------------------------- @@ -130,7 +130,7 @@ linkfilter2(){ linkset(){ if [ -n "$Url" ];then [ -z "$skip_cert" ] && skip_cert=已开启 - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[47;30m请检查输入的链接是否正确:\033[0m" echo -e "\033[32;4m$Url\033[0m" echo ----------------------------------------------- @@ -172,7 +172,7 @@ linkset(){ linkset elif [ "$num" = '6' ]; then sed -i '/skip_cert*/'d $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ "$skip_cert" = "未开启" ] > /dev/null 2>&1; then sed -i "1i\skip_cert=已开启" $ccfg #echo -e "\033[33m已设为开启跳过本地证书验证!!\033[0m" @@ -195,7 +195,7 @@ getlink(){ i=1 while [ $i -le 99 ] do - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[44m 遇问题请加TG群反馈:\033[42;30m t.me/clashfm \033[0m" echo -e "\033[31m本功能依赖第三方网站在线服务实现,脚本本身不提供任何代理服务!\033[0m" echo ----------------------------------------------- @@ -220,24 +220,24 @@ getlink(){ elif [ -z "$url" ];then [ -n "$Url" ] && linkset elif [ "$url" = 0 ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m已撤销并删除所有已输入的链接!!!\033[0m" Url="" sleep 1 clashlink else - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m请输入正确的订阅链接!!!\033[0m" fi done #### - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo 输入太多啦,可能会导致订阅失败! echo "多个较短的链接请尽量用“|”分隔以一次性输入!" clashlink } getlink2(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[33m仅限导入完整clash配置文件链接!!!\033[0m" echo -e "可以使用\033[32m https://acl4ssr.netlify.app \033[0m在线生成配置文件" echo -e "\033[36m导入后如无法运行,请使用【导入订阅】功能" @@ -248,7 +248,7 @@ getlink2(){ test=$(echo $Https | grep -iE "http.*://" ) Https=`echo ${Https/\ \(*\)/''}` #删除恶心的超链接内容 if [ -n "$Https" -a -n "$test" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e 请检查输入的链接是否正确: echo -e "\033[4m$Https\033[0m" read -p "确认导入配置文件?原配置文件将被更名为config.yaml.bak![1/0] > " res @@ -265,7 +265,7 @@ getlink2(){ elif [ "$Https" = 0 ];then clashlink else - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m请输入正确的配置文件链接地址!!!\033[0m" echo -e "\033[33m链接地址必须是http或者https开头的形式\033[0m" clashlink @@ -282,7 +282,7 @@ clashlink(){ sed -i "5i\server_link=1" $ccfg server_link=1 fi - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;47m 欢迎使用导入配置文件功能!\033[0m" echo ----------------------------------------------- echo -e " 1 在线导入\033[36m订阅\033[0m并生成Clash配置文件" @@ -302,14 +302,14 @@ clashlink(){ clashsh elif [ "$num" = 1 ];then if [ -n "$Url" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[33m检测到已记录的订阅链接:\033[0m" echo -e "\033[4;32m$Url\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- read -p "清空链接/追加导入?[1/0] > " res if [ "$res" = '1' ]; then Url="" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m链接已清空!\033[0m" fi fi @@ -317,14 +317,14 @@ clashlink(){ elif [ "$num" = 2 ];then if [ -n "$Url" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[33m检测到已记录的订阅链接:\033[0m" echo -e "\033[4;32m$Url\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- read -p "清空链接/追加导入?[1/0] > " res if [ "$res" = '1' ]; then Url="" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m链接已清空!\033[0m" fi fi @@ -349,18 +349,18 @@ clashlink(){ elif [ "$num" = 7 ];then yamlbak=$yaml.bak if [ ! -f "$yaml".bak ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m没有找到配置文件的备份!\033[0m" else - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e 备份文件共有"\033[32m`wc -l < $yamlbak`\033[0m"行内容,当前文件共有"\033[32m`wc -l < $yaml`\033[0m"行内容 read -p "确认还原配置文件?此操作不可逆![1/0] > " res if [ "$res" = '1' ]; then mv $yamlbak $yaml - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[32m配置文件已还原!请手动重启clash服务!\033[0m" else - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m操作已取消!返回上级菜单!\033[0m" fi fi @@ -368,15 +368,15 @@ clashlink(){ elif [ "$num" = 8 ];then if [ -z "$Url" -a -z "$Https" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m没有找到你的订阅链接!请先输入链接!\033[0m" sleep 2 clashlink else - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[33m当前系统记录的订阅链接为:\033[0m" echo -e "\033[4;32m$Url\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- read -p "确认更新配置文件?[1/0] > " res if [ "$res" = '1' ]; then $clashdir/start.sh getyaml @@ -400,7 +400,7 @@ gettar(){ webget /tmp/clashfm.tar.gz $tarurl [ "$result" != "200" ] && echo "文件下载失败!" && exit 1 #解压 - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo 开始解压文件! mkdir -p $clashdir > /dev/null tar -zxvf '/tmp/clashfm.tar.gz' -C $clashdir/ @@ -486,7 +486,7 @@ getcore(){ fi } ### - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- [ -z "$cpucore" ] && getcputype echo -e "当前clash核心:\033[47;30m $clashcore \033[46;30m$clashv\033[0m" echo -e "当前系统处理器架构:\033[32m $cpucore \033[0m" @@ -535,15 +535,15 @@ getcore(){ fi #生成链接 corelink="$update_url/bin/$clashcore/clash-linux-$cpucore" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo 正在连接服务器获取clash核心文件…………链接地址为: echo -e "\033[4;32m$corelink\033[0m" echo 如无法正常下载可以手动复制到浏览器下载核心文件! - echo -e "\033[36m~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" + echo -e "\033[36m-----------------------------------------------" echo -e "| |" echo -e "| 需要一点时间,请耐心等待! |" echo -e "| \033[0m如长时间没有数据请用ctrl+c退出 |" - echo -e "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\033[0m" + echo -e "-----------------------------------------------\033[0m" #获取在线clash核心文件 webget /tmp/clash.new $corelink if [ "$result" != "200" ];then @@ -560,7 +560,7 @@ getcore(){ sed -i '/clashv=*/'d $ccfg sed -i "1i\clashv=$version" $ccfg rm -rf /tmp/clashversion - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[32m$clashcore核心安装成功!\033[0m" fi } @@ -571,16 +571,16 @@ getgeo(){ echo ----------------------------------------------- read -p "是否更新数据库文件?[1/0] > " res if [ "$res" = '1' ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo 正在从服务器获取数据库文件………… webget /tmp/Country.mmdb $update_url/bin/Country.mmdb if [ "$result" != "200" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m文件下载失败!\033[0m" - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- getgeo else - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[32mGeoIP数据库文件下载成功!\033[0m" mv /tmp/Country.mmdb $clashdir/Country.mmdb sed -i '/Geo_v=*/'d $ccfg @@ -588,11 +588,11 @@ getgeo(){ rm -rf /tmp/clashversion fi else - clashsh + update fi } getdb(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[36m安装本地版dashboard管理面板\033[0m" echo -e "\033[32m打开管理面板的速度更快且更稳定\033[0m" echo ----------------------------------------------- @@ -715,7 +715,7 @@ setpac(){ #检测目录 [ -n "$authentication" ] && echo 检测到已经设置http代理密码,pac不支持加密代理,请先取消加密! && sleep 1 && clashadv [ ! -d /www/clash -a ! -d $clashdir/ui ] && echo 未检测到本地Dashboard面板,请先安装面板! && sleep 1 && getdb - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;47m生成用于设备WIFI或浏览器的自动PAC代理文件\033[0m" echo -e "\033[33m适用于纯净模式或本机代理配置\033[0m" [ -f $dbdir/pac ] && echo -e "PAC地址:\033[32mhttp://$host$dbdir/pac\033[0m" @@ -740,7 +740,7 @@ setpac(){ } setserver(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;47m您可以在此处切换在线更新时使用的资源地址\033[0m" echo -e "当前源:\033[4;32m$update_url\033[0m" echo ----------------------------------------------- @@ -763,10 +763,10 @@ setserver(){ elif [ "$num" = 4 ]; then update_url='https://gitee.com/juewuy/ShellClash/raw/master' elif [ "$num" = 5 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- read -p "请输入个人源路径 > " update_url if [ -z "$update_url" ];then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[31m取消输入,返回上级菜单\033[0m" update fi @@ -779,7 +779,7 @@ setserver(){ #写入mark文件 sed -i '/update_url*/'d $ccfg sed -i "1i\update_url=\'$update_url\'" $ccfg - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[32m源地址更新成功!\033[0m" release_new="" update @@ -787,7 +787,8 @@ setserver(){ checkupdate(){ if [ -z "$release_new" ];then if [ "$update_url" = "https://cdn.jsdelivr.net/gh/juewuy/ShellClash" ];then - release_new=$(webget /dev/null https://github.com.cnpmjs.org/juewuy/ShellClash/releases/latest echoon rediroff 2>&1 | grep -oE "releases/tag/.*" | awk -F '[/" ]' '{print $3}') + webget /tmp/clashrelease https://github.com.cnpmjs.org/juewuy/ShellClash/releases/latest echoon rediroff 2>/tmp/clashrelease + release_new=$( cat /tmp/clashrelease | grep -aoE "releases/tag/.*" | awk -F '[/" ]' '{print $3}') [ -z "$release_new" ] && release_new=master update_url=$update_url@$release_new fi @@ -795,11 +796,12 @@ if [ -z "$release_new" ];then [ "$result" = "200" ] && source /tmp/clashversion || echo -e "\033[31m检查更新失败!\033[0m" [ -z "$release_new" ] && release_new=$versionsh rm -rf /tmp/clashversion + rm -rf /tmp/clashrelease fi } update(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - echo -e "\033[33m正在检查更新!\033[0m" + echo ----------------------------------------------- + echo -ne "\033[32m正在检查更新!\033[0m\r" checkupdate [ "$clashcore" = "clash" ] && clash_n=$clash_v || clash_n=$clashpre_v echo -e "\033[30;47m欢迎使用更新功能:\033[0m" @@ -844,7 +846,7 @@ update(){ setserver elif [ "$num" = 8 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "感谢:\033[32mClash \033[0m作者\033[36m Dreamacro\033[0m 项目地址:\033[32mhttps://github.com/Dreamacro/clash\033[0m" echo -e "感谢:\033[32msubconverter \033[0m作者\033[36m tindy2013\033[0m 项目地址:\033[32mhttps://github.com/tindy2013/subconverter\033[0m" echo -e "感谢:\033[32malecthw提供的GeoIP数据库\033[0m 项目地址:\033[32mhttps://github.com/alecthw/mmdb_china_ip_list\033[0m" @@ -893,7 +895,7 @@ userguide(){ clashlink } testcommand(){ - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "\033[30;47m这里是测试命令菜单\033[0m" echo -e "\033[33m如遇问题尽量运行相应命令后截图发群\033[0m" echo -e "磁盘占用/所在目录:" @@ -923,34 +925,34 @@ testcommand(){ echo -e "\033[31m如有报错请截图后到TG群询问!!!\033[0m" exit; elif [ "$num" = 2 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- netstat -ntulp |grep 53 - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- echo -e "可以使用\033[44m netstat -ntulp |grep xxx \033[0m来查询任意(xxx)端口" exit; elif [ "$num" = 3 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- openssl speed -multi 4 -evp aes-128-gcm - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- exit; elif [ "$num" = 4 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- iptables -t nat -L PREROUTING --line-numbers - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- iptables -t nat -L clash --line-numbers - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- iptables -t nat -L clash_dns --line-numbers exit; elif [ "$num" = 5 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- sed -n '1,40p' $yaml - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- exit; elif [ "$num" = 6 ]; then echo "注意:依赖curl(不支持wget),且测试结果不保证一定准确!" delay=`curl -kx ${authentication}@127.0.0.1:$mix_port -o /dev/null -s -w '%{time_starttransfer}' 'https://google.tw' & { sleep 3 ; kill $! & }` > /dev/null 2>&1 delay=`echo |awk "{print $delay*1000}"` > /dev/null 2>&1 - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- if [ `echo ${#delay}` -gt 1 ];then echo -e "\033[32m连接成功!响应时间为:"$delay" ms\033[0m" else @@ -960,7 +962,7 @@ testcommand(){ elif [ "$num" = 7 ]; then userguide elif [ "$num" = 9 ]; then - echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + echo ----------------------------------------------- cat $clashdir/log exit; else diff --git a/scripts/start.sh b/scripts/start.sh index dcecfca..388a436 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -26,7 +26,7 @@ getconfig(){ [ "$common_ports" = "已开启" ] && ports='-m multiport --dports 53,587,465,995,993,143,80,443 ' } logger(){ - echo -e "\033[31m$1\033[0m" + [ -z "$1" ] && echo -e "\033[31m$1\033[0m" echo `date "+%G-%m-%d %H:%M:%S"` $1 >> $clashdir/log [ "$(wc -l $clashdir/log | awk '{print $1}')" -gt 30 ] && sed -i '1d' $clashdir/log } @@ -87,8 +87,9 @@ EOF` exit 1 else retry=$((retry+1)) + logger "配置文件获取失败!" echo -e "\033[32m尝试使用其他服务器获取配置!\033[0m" - logger "正在尝试第$retry次/共5次!" + logger "正在重试第$retry次/共5次!" sed -i '/server_link=*/'d $ccfg if [ "$server_link" -ge 5 ]; then server_link=0 @@ -150,6 +151,8 @@ EOF` $clashdir/clash -t -d $clashdir echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ exit 1 + else + logger "配置文件获取成功!clash服务已启动!" echooff fi fi } @@ -234,6 +237,21 @@ start_redir(){ ip6tables -t nat -A PREROUTING -p tcp -j clashv6 fi } +start_udp(){ + ip rule add fwmark 1 table 100 + ip route add local default dev lo table 100 + iptables -t mangle -N clash + iptables -t mangle -A clash -d 0.0.0.0/8 -j RETURN + iptables -t mangle -A clash -d 10.0.0.0/8 -j RETURN + iptables -t mangle -A clash -d 127.0.0.0/8 -j RETURN + iptables -t mangle -A clash -d 169.254.0.0/16 -j RETURN + iptables -t mangle -A clash -d 172.16.0.0/12 -j RETURN + iptables -t mangle -A clash -d 192.168.0.0/16 -j RETURN + iptables -t mangle -A clash -d 224.0.0.0/4 -j RETURN + iptables -t mangle -A clash -d 240.0.0.0/4 -j RETURN + iptables -t mangle -A clash -p udp -j TPROXY --on-port $redir_port --tproxy-mark 1 + iptables -t mangle -A PREROUTING -p udp -j clash +} stop_iptables(){ #重置iptables规则 iptables -t nat -D PREROUTING -p tcp -j clash > /dev/null 2>&1 @@ -245,6 +263,10 @@ stop_iptables(){ iptables -t nat -F clash_dns > /dev/null 2>&1 iptables -t nat -X clash_dns > /dev/null 2>&1 iptables -D FORWARD -o utun -j ACCEPT > /dev/null 2>&1 + #重置udp规则 + iptables -t mangle -D PREROUTING -p udp -j clash > /dev/null 2>&1 + iptables -t mangle -F clash > /dev/null 2>&1 + iptables -t mangle -X clash > /dev/null 2>&1 #重置ipv6规则 ip6tables -t nat -D PREROUTING -p tcp -j clashv6 > /dev/null 2>&1 ip6tables -t nat -D PREROUTING -p udp -j clashv6_dns > /dev/null 2>&1 @@ -356,6 +378,7 @@ afstart(){ #修改iptables规则使流量进入clash [ "$redir_mod" != "纯净模式" ] && [ "$dns_no" != "true" ] && start_dns [ "$redir_mod" != "纯净模式" ] && [ "$redir_mod" != "Tun模式" ] && start_redir + [ "$redir_mod" = "Redir模式" ] && [ "$tproxy_mod" = "已开启" ] && start_udp #标记启动时间 mark_time #设置本机代理