From 20abcfebb079fcffff4770b6d2bf714caca68176 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Thu, 6 Feb 2020 20:33:21 +0800 Subject: [PATCH] luci-app-clash: bump to 1.5.2 --- package/jsda/luci-app-clash/Makefile | 8 +- .../luasrc/controller/clash.lua | 35 ++++- .../luasrc/model/cbi/clash/client.lua | 5 +- .../luasrc/model/cbi/clash/create.lua | 4 +- .../luasrc/model/cbi/clash/dns.lua | 2 +- .../luasrc/model/cbi/clash/port.lua | 6 +- .../luasrc/model/cbi/clash/update.lua | 55 +++++++- .../luasrc/view/clash/status.htm | 5 +- .../luasrc/view/clash/update.htm | 24 +++- package/jsda/luci-app-clash/po/zh-cn/clash.po | 3 + .../jsda/luci-app-clash/root/etc/init.d/clash | 123 ++++++++++-------- .../root/usr/share/clash/luci_version | 2 +- .../root/usr/share/clash/proxy.sh | 34 ++--- .../root/usr/share/clash/yum_change.sh | 16 ++- 14 files changed, 213 insertions(+), 109 deletions(-) diff --git a/package/jsda/luci-app-clash/Makefile b/package/jsda/luci-app-clash/Makefile index 9050aede3c..11c5da4d20 100644 --- a/package/jsda/luci-app-clash/Makefile +++ b/package/jsda/luci-app-clash/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-clash -PKG_VERSION:=1.5.1 +PKG_VERSION:=1.5.2 PKG_MAINTAINER:=frainzy1477 @@ -22,7 +22,7 @@ define Package/luci-app-clash/description endef define Build/Prepare - po2lmo ${CURDIR}/po/zh-cn/clash.po ${CURDIR}/po/zh-cn/clash.zh-cn.lmo + po2lmo ${CURDIR}/po/zh-cn/clash.po ${CURDIR}/po/zh-cn/clash.zh-cn.lmoo endef define Build/Configure @@ -96,7 +96,6 @@ define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_DIR) $(1)/etc/config $(INSTALL_DIR) $(1)/etc/clash - $(INSTALL_DIR) $(1)/tmp $(INSTALL_DIR) $(1)/usr/lib/lua/luci $(INSTALL_DIR) $(1)/usr/share/ $(INSTALL_DIR) $(1)/usr/share/clash @@ -106,6 +105,7 @@ define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/share/clash/dashboard/img $(INSTALL_DIR) $(1)/usr/share/clash/dashboard/js $(INSTALL_DIR) $(1)/etc/clash/clashtun + $(INSTALL_DIR) $(1)/etc/clash/dtun $(INSTALL_DIR) $(1)/usr/share/clashbackup $(INSTALL_DIR) $(1)/etc/clash/provider $(INSTALL_DIR) $(1)/usr/share/clash/config @@ -134,7 +134,7 @@ define Package/$(PKG_NAME)/install $(INSTALL_BIN) ./root/usr/share/clash/server.list $(1)/usr/share/clash/ $(INSTALL_BIN) ./root/usr/share/clash/clash_real.txt $(1)/usr/share/clash/ $(INSTALL_BIN) ./root/usr/share/clash/logstatus_check $(1)/usr/share/clash/ - $(INSTALL_BIN) ./root/usr/share/clash/clash.txt $(1)/tmp/ + $(INSTALL_BIN) ./root/usr/share/clash/clash.txt $(1)/usr/share/clash/ $(INSTALL_BIN) ./root/usr/share/clash/dashboard/index.html $(1)/usr/share/clash/dashboard/ $(INSTALL_BIN) ./root/usr/share/clash/dashboard/main.0bddb85299f970595cb5.css $(1)/usr/share/clash/dashboard/ diff --git a/package/jsda/luci-app-clash/luasrc/controller/clash.lua b/package/jsda/luci-app-clash/luasrc/controller/clash.lua index ce20051ac2..a0e06f442d 100644 --- a/package/jsda/luci-app-clash/luasrc/controller/clash.lua +++ b/package/jsda/luci-app-clash/luasrc/controller/clash.lua @@ -20,9 +20,9 @@ function index() entry({"admin", "services", "clash", "config"},cbi("clash/config"),_("Config"), 30).leaf = true entry({"admin", "services", "clash", "create"},cbi("clash/create"),_("Create Config"), 40).leaf = true - entry({"admin", "services", "clash", "servers-config"},cbi("clash/servers-config"), nil).leaf = true - entry({"admin", "services", "clash", "provider-config"},cbi("clash/provider-config"), nil).leaf = true - entry({"admin", "services", "clash", "groups"},cbi("clash/groups"), nil).leaf = true + entry({"admin", "services", "clash", "servers"},cbi("clash/servers-config"), nil).leaf = true + entry({"admin", "services", "clash", "provider"},cbi("clash/provider-config"), nil).leaf = true + entry({"admin", "services", "clash", "groups"},cbi("clash/groups"), nil).leaf = true entry({"admin", "services", "clash", "settings"}, firstchild(),_("Settings"), 50) entry({"admin", "services", "clash", "settings", "port"},cbi("clash/port"),_("Proxy Ports"), 60).leaf = true @@ -31,7 +31,7 @@ function index() entry({"admin", "services", "clash", "settings", "list"},cbi("clash/list"),_("Custom List"), 90).leaf = true entry({"admin", "services", "clash", "settings", "grules"},cbi("clash/game-settings"),_("Game Rules"), 91).dependent = false - entry({"admin", "services", "clash", "g-rules"},cbi("clash/game-rule"), nil).leaf = true + entry({"admin", "services", "clash", "g-rules"},cbi("clash/game-rule"), nil).leaf = true entry({"admin","services","clash","status"},call("action_status")).leaf=true entry({"admin", "services", "clash", "log"},cbi("clash/log"),_("Log"), 150).leaf = true @@ -174,15 +174,26 @@ end local function clash_core() if nixio.fs.access("/etc/clash/clash") then - return luci.sys.exec("/etc/clash/clash -v 2>/dev/null |awk -F ' ' '{print $2}'") + local core=luci.sys.exec("/etc/clash/clash -v 2>/dev/null |awk -F ' ' '{print $2}'") + if core ~= "" then + return luci.sys.exec("/etc/clash/clash -v 2>/dev/null |awk -F ' ' '{print $2}'") + else + return luci.sys.exec("sed -n 1p /usr/share/clash/core_version") + end else return "0" end end + local function clashr_core() if nixio.fs.access("/usr/bin/clash") then - return luci.sys.exec("/usr/bin/clash -v 2>/dev/null |awk -F ' ' '{print $2}'") + local core=luci.sys.exec("/usr/bin/clash -v 2>/dev/null |awk -F ' ' '{print $2}'") + if core ~= "" then + return luci.sys.exec("/usr/bin/clash -v 2>/dev/null |awk -F ' ' '{print $2}'") + else + return luci.sys.exec("sed -n 1p /usr/share/clash/corer_version") + end else return "0" end @@ -203,6 +214,14 @@ local function clashtun_core() end +local function dtun_core() + if nixio.fs.access("/etc/clash/dtun/clash") then + return luci.sys.exec("/etc/clash/dtun/clash -v 2>/dev/null |awk -F ' ' '{print $2}'") + else + return "0" + end +end + local function readlog() return luci.sys.exec("sed -n '$p' /usr/share/clash/clash_real.txt 2>/dev/null") @@ -268,6 +287,7 @@ function check_status() clash_core = clash_core(), clashr_core = clashr_core(), clashtun_core = clashtun_core(), + dtun_core = dtun_core(), new_core_version = new_core_version(), new_clashtun_core_version =new_clashtun_core_version(), check_clashtun_core = check_clashtun_core(), @@ -285,6 +305,7 @@ function action_status() current_version = current_version(), clash_core = clash_core(), clashr_core = clashr_core(), + dtun_core = dtun_core(), dash_pass = dash_pass(), clashtun_core = clashtun_core(), e_mode = e_mode(), @@ -363,7 +384,7 @@ end function logstatus_check() luci.http.prepare_content("text/plain; charset=utf-8") local fdp=tonumber(fs.readfile("/usr/share/clash/logstatus_check")) or 0 - local f=io.open("/tmp/clash.txt", "r+") + local f=io.open("/usr/share/clash/clash.txt", "r+") f:seek("set",fdp) local a=f:read(2048000) or "" fdp=f:seek() diff --git a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/client.lua b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/client.lua index a49ab472c6..05c336f730 100644 --- a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/client.lua +++ b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/client.lua @@ -22,7 +22,10 @@ if nixio.fs.access("/usr/bin/clash") then o:value("2", translate("Clashr")) end if nixio.fs.access("/etc/clash/clashtun/clash") then -o:value("3", translate("ClashTun")) +o:value("3", translate("Clash(cTun)")) +end +if nixio.fs.access("/etc/clash/dtun/clash") then +o:value("4", translate("Clash(dTun)")) end o.description = translate("Select core, clashr support ssr while clash does not.") diff --git a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/create.lua b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/create.lua index faf47c000a..88a91d23ea 100644 --- a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/create.lua +++ b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/create.lua @@ -150,7 +150,7 @@ s.anonymous = true s.addremove = true s.sortable = false s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/clash/servers-config/%s") +s.extedit = luci.dispatcher.build_url("admin/services/clash/servers/%s") function s.create(...) local sid = TypedSection.create(...) if sid then @@ -192,7 +192,7 @@ s.anonymous = true s.addremove = true s.sortable = false s.template = "cbi/tblsection" -s.extedit = luci.dispatcher.build_url("admin/services/clash/provider-config/%s") +s.extedit = luci.dispatcher.build_url("admin/services/clash/provider/%s") function s.create(...) local sid = TypedSection.create(...) if sid then diff --git a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/dns.lua b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/dns.lua index 912a237673..aefe70a682 100644 --- a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/dns.lua +++ b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/dns.lua @@ -90,7 +90,7 @@ o.inputstyle = "apply" o.write = function() m.uci:commit("clash") if luci.sys.call("pidof clash >/dev/null") == 0 then - SYS.call("/etc/init.d/clash restart >/dev/null 2>&1 &") + SYS.call("/etc/init.d/clash restart >/dev/null 2>&1 &") luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash")) else luci.http.redirect(luci.dispatcher.build_url("admin", "services", "clash" , "settings", "dns")) diff --git a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/port.lua b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/port.lua index 734ce1216e..899bb15d91 100644 --- a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/port.lua +++ b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/port.lua @@ -73,9 +73,9 @@ o.description = translate("Dashboard Secret") o = s:option(ListValue, "p_mode", translate("Proxy Mode")) o.description = translate("Choose proxy mode") -o:value("Rule", "RULE") -o:value("Global", "GLOBAL") -o:value("Direct", "DIRECT") +o:value("Rule", translate("RULE")) +o:value("Global", translate("GLOBAL")) +o:value("Direct", translate("DIRECT")) o.default = "Rule" o = s:option(ListValue, "level", translate("Log level")) diff --git a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/update.lua b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/update.lua index 70f09a90b9..9f173f75f0 100644 --- a/package/jsda/luci-app-clash/luasrc/model/cbi/clash/update.lua +++ b/package/jsda/luci-app-clash/luasrc/model/cbi/clash/update.lua @@ -12,6 +12,57 @@ font_off = [[]] bold_on = [[]] bold_off = [[]] + + +ko = Map("clash") +ko.reset = false +ko.submit = false +sul =ko:section(TypedSection, "clash","") +sul.anonymous = true +sul.addremove=false +o = sul:option(FileUpload, "") +o.description = translate("NB: Upload only Dreamacro clash tun core - (https://github.com/Dreamacro/clash/releases/tag/TUN)") +o.title = translate(" ") +o.template = "clash/clash_upload" +um = sul:option(DummyValue, "", nil) +um.template = "clash/clash_dvalue" + +local dir, fd +dir = "/etc/clash/dtun/" +http.setfilehandler( + function(meta, chunk, eof) + if not fd then + if not meta then return end + + if meta and chunk then fd = nixio.open(dir .. meta.file, "w") end + + if not fd then + um.value = translate("upload file error.") + return + end + end + if chunk and fd then + fd:write(chunk) + end + if eof and fd then + fd:close() + fd = nil + SYS.exec("chmod 755 /etc/clash/dtun/clash 2>&1 &") + um.value = translate("File saved to") .. ' "/etc/clash/dtun/"' + + end + end +) + +if luci.http.formvalue("upload") then + local f = luci.http.formvalue("ulfile") + if #f <= 0 then + um.value = translate("No specify upload file.") + end +end + + + m = Map("clash") m:section(SimpleSection).template = "clash/update" m.pageaction = false @@ -23,7 +74,7 @@ o = s:option(ListValue, "dcore", translate("Core Type")) o.default = "clashcore" o:value("1", translate("Clash")) o:value("2", translate("Clashr")) -o:value("3", translate("ClashTun")) +o:value("3", translate("Clash(ctun)")) o.description = translate("Select core, clashr support ssr while clash does not.") @@ -57,6 +108,6 @@ o.title = translate("Download") o.template = "clash/core_check" -return m, k +return m, ko,k diff --git a/package/jsda/luci-app-clash/luasrc/view/clash/status.htm b/package/jsda/luci-app-clash/luasrc/view/clash/status.htm index 916b2fd712..2c38a2921b 100644 --- a/package/jsda/luci-app-clash/luasrc/view/clash/status.htm +++ b/package/jsda/luci-app-clash/luasrc/view/clash/status.htm @@ -163,8 +163,9 @@ var HTTP = { ip.innerHTML = status.localip ? ''+status.localip+' ' : '<%:NOT SET%>'; port.innerHTML = status.dash_port ? ''+status.dash_port+' ' : '<%:NOT SET%>'; secret.innerHTML = status.dash_pass ? ''+status.dash_pass+' ' : '<%:NOT SET%>'; - emode.innerHTML = status.clash ? ''+status.e_mode+' ' : '<%:NOT RUNNING%>'; - conf.innerHTML = status.clash ? '' : '<%:NOT RUNNING%>'; + emode.innerHTML = status.clash ? ''+status.e_mode+' ' : '<%:NOT RUNNING%>'; if(status.typeconf != 0 || status.typeconf != ''){ + conf.innerHTML = status.typeconf ? '' : '<%:NOT RUNNING%>'; + } if(status.typeconf==1){ conf_path.innerHTML = status.clash ? '<%:SUBSCRIBE%> ' : '<%:NOT RUNNING%>'; } diff --git a/package/jsda/luci-app-clash/luasrc/view/clash/update.htm b/package/jsda/luci-app-clash/luasrc/view/clash/update.htm index e1b783d418..544ebf37fe 100644 --- a/package/jsda/luci-app-clash/luasrc/view/clash/update.htm +++ b/package/jsda/luci-app-clash/luasrc/view/clash/update.htm @@ -17,8 +17,11 @@ clashr <%:Collecting data...%> - clash(tun) <%:Collecting data...%> - + clash(ctun) <%:Collecting data...%> + + + clash(dtun) <%:Collecting data...%> + luci-app-clash <%:Collecting data...%> @@ -41,6 +44,8 @@ var core_butt = document.getElementById('_corebutt'); var corer_butt = document.getElementById('_corerbutt'); var coretun_butt = document.getElementById('_coretunbutt'); + var coredtun = document.getElementById('_coredtun'); + var coredtun_butt = document.getElementById('_coredtunbutt'); XHR.poll(1, '<%=luci.dispatcher.build_url("admin", "services", "clash", "status")%>', null, function(x, status) { if ( x && x.status == 200 ) { @@ -59,6 +64,11 @@ coretun.innerHTML = status.clashtun_core ? '<%:Not Installed%> ' : '<%:Checking...%>'; }else{ coretun.innerHTML = status.clashtun_core ? ''+status.clashtun_core+' ' : '<%:Checking...%>'; + } + if(status.dtun_core==0){ + coredtun.innerHTML = status.dtun_core ? '<%:Not Installed%> ' : '<%:Checking...%>'; + }else{ + coredtun.innerHTML = status.dtun_core ? ''+status.dtun_core+' ' : '<%:Checking...%>'; } version.innerHTML = status.current_version ? 'v'+status.current_version+' ' : '<%:Checking...%>'; @@ -72,6 +82,7 @@ core_butt.innerHTML = status.current_version ? '
' : ''; corer_butt.innerHTML = status.current_version ? '
' : ''; coretun_butt.innerHTML = status.current_version ? '
' : ''; + coredtun_butt.innerHTML = status.current_version ? '
' : ''; @@ -148,7 +159,14 @@ function clashr_core_check(btn) }); } - +function clashdtun_core_check(btn) +{ + XHR.get('<%=luci.dispatcher.build_url("admin", "services", "clash", "check_status")%>', null, function(x, status) { + url='https://github.com/Dreamacro/clash/releases/tag/TUN'; + window.open(url); + return false; + }); +} function clashtun_core_check(btn) { diff --git a/package/jsda/luci-app-clash/po/zh-cn/clash.po b/package/jsda/luci-app-clash/po/zh-cn/clash.po index 85fb3d6bf5..fd2c979524 100644 --- a/package/jsda/luci-app-clash/po/zh-cn/clash.po +++ b/package/jsda/luci-app-clash/po/zh-cn/clash.po @@ -952,3 +952,6 @@ msgstr "代理模式" msgid "Choose proxy mode" msgstr "选择代理模式" + +msgid "NB: Upload only Dreamacro clash tun core - (https://github.com/Dreamacro/clash/releases/tag/TUN)" +msgstr "注意:只上传clash tun内核-(https://github.com/Dreamacro/clash/releases/tag/TUN)" diff --git a/package/jsda/luci-app-clash/root/etc/init.d/clash b/package/jsda/luci-app-clash/root/etc/init.d/clash index 43c57cdf5a..233c38d12c 100755 --- a/package/jsda/luci-app-clash/root/etc/init.d/clash +++ b/package/jsda/luci-app-clash/root/etc/init.d/clash @@ -6,6 +6,7 @@ STOP=15 CLASH="/etc/clash/clash" CLASHR="/usr/bin/clash" CLASHT="/etc/clash/clashtun/clash" +CLASHD="/etc/clash/dtun/clash" CLASH_CONFIG="/etc/clash" CRON_FILE="/etc/crontabs/root" CONFIG_YAML="/etc/clash/config.yaml" @@ -34,7 +35,7 @@ add_cron(){ config_type=$(uci get clash.config.config_type 2>/dev/null) #=========================================================================================================================== sed -i '/clash.txt/d' $CRON_FILE - echo '0 0 * * 0 echo "" >> /tmp/clash.txt' >> $CRON_FILE + echo '0 0 * * 0 echo "" >> /usr/share/clash/clash.txt' >> $CRON_FILE [ -n "$(grep -w "/usr/share/clash/clash.sh" $CRON_FILE)" ] && sed -i '/\/usr\/share\/clash\/clash.sh/d' $CRON_FILE [ -n "$(grep -w "/usr/share/clash/v2ssr.sh" $CRON_FILE)" ] && sed -i '/\/usr\/share\/clash\/v2ssr.sh/d' $CRON_FILE auto=$(uci get clash.config.auto_update 2>/dev/null) @@ -206,7 +207,8 @@ rules(){ ipv6=$(uci get clash.config.ipv6 2>/dev/null) core=$(uci get clash.config.core 2>/dev/null) tun_mode=$(uci get clash.config.tun_mode 2>/dev/null) - + lan_ip=$(uci get network.lan.ipaddr 2>/dev/null |awk -F '/' '{print $1}' 2>/dev/null) + wan=$(ubus call network.interface.wan status 2>/dev/null | grep \"address\" | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' 2>/dev/null) if [ "${core}" -eq 1 ] || [ "${core}" -eq 2 ];then iptables -t nat -N clash iptables -t nat -A clash -d 0.0.0.0/8 -j RETURN @@ -217,15 +219,13 @@ rules(){ iptables -t nat -A clash -d 192.168.0.0/16 -j RETURN iptables -t nat -A clash -d 224.0.0.0/4 -j RETURN iptables -t nat -A clash -d 240.0.0.0/4 -j RETURN - - + iptables -t nat -A clash -d "${lan_ip}" -j RETURN + if [ ! -z "$wan" ]; then + iptables -t nat -A clash -d "${wan}" -j RETURN + fi iptables -t nat -A clash -p tcp -j REDIRECT --to-ports "${redir_port}" - if [ -z "$(iptables -nvL zone_lan_prerouting -t nat)" ]; then - iptables -t nat -A PREROUTING -p tcp -j clash - else - iptables -t nat -A zone_lan_prerouting -p tcp -j clash - fi - + iptables -t nat -A PREROUTING -p tcp -j clash + fake_ip_range=$(egrep '^ {0,}fake-ip-range' /etc/clash/config.yaml |grep fake-ip-range: |awk -F ': ' '{print $2}') if [ ! -z "${fake_ip_range}" ];then @@ -238,14 +238,11 @@ rules(){ if [ -f /usr/sbin/ip6tables ] && [ "${ipv6}" -eq 1 ]; then ip6tables -t nat -N clash_ipv6 ip6tables -t nat -A clash_ipv6 -p tcp -j REDIRECT --to-ports "${redir_port}" - if [ -z "$(ip6tables -nvL zone_lan_prerouting -t nat)" ]; then - ip6tables -t nat -A PREROUTING -p tcp -j clash_ipv6 - else - ip6tables -t nat -A zone_lan_prerouting -p tcp -j clash_ipv6 - fi + ip6tables -t nat -A PREROUTING -p tcp -j clash_ipv6 + fi - elif [ "${core}" -eq 3 ];then + elif [ "${core}" -eq 3 ] || [ "${core}" -eq 4 ];then PROXY_FWMARK="0x162" PROXY_ROUTE_TABLE="0x162" PROXY_BYPASS_USER="root" @@ -265,11 +262,19 @@ rules(){ ipset add localnetwork 224.0.0.0/4 ipset add localnetwork 240.0.0.0/4 ipset add localnetwork 172.16.0.0/12 - + ipset add localnetwork "${lan_ip}" + if [ ! -z "$wan" ]; then + ipset add localnetwork "${wan}" + fi + if [ "${core}" -eq 3 ];then ip tuntap add user root mode tun $TUN_DEVICE_NAME ip link set $TUN_DEVICE_NAME up ip address replace 198.18.0.0/16 dev $TUN_DEVICE_NAME ip route replace default dev $TUN_DEVICE_NAME table "$PROXY_ROUTE_TABLE" + elif [ "${core}" -eq 4 ];then + ip route replace default dev utun table "$PROXY_ROUTE_TABLE" + fi + ip rule add fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" iptables -t mangle -N clash @@ -311,6 +316,10 @@ enable=$(uci get clash.config.enable 2>/dev/null) core=$(uci get clash.config.core 2>/dev/null) tun_mode=$(uci get clash.config.tun_mode 2>/dev/null) +if [ -f /etc/clash/config.yaml ];then + rm -rf /etc/clash/config.yaml >/dev/null 2>&1 +fi + if [ "${enable}" -eq 1 ]; then if [ "${lang}" == "en" ] || [ $lang == "auto" ];then echo "Starting Client.. " >$REAL_LOG @@ -323,10 +332,10 @@ if [ "${enable}" -eq 1 ]; then if [ "${core}" -eq 1 ] && [ ! -f /etc/clash/clash ]; then if [ "${lang}" == "en" ] || [ $lang == "auto" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - clash core not found, download and install clash from update page " >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - clash core not found, download and install clash from update page " >> /usr/share/clash/clash.txt echo "clash core not found, download and install clash from update page" >> $REAL_LOG elif [ "${lang}" == "zh_cn" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - 找不到/etc/clash/clash,请从更新页下载clash内核" >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - 找不到/etc/clash/clash,请从更新页下载clash内核" >> /usr/share/clash/clash.txt echo "找不到/etc/clash/clash,请从更新页下载clash内核" >> $REAL_LOG fi sleep 2 @@ -334,10 +343,10 @@ if [ "${core}" -eq 1 ] && [ ! -f /etc/clash/clash ]; then exit 0 elif [ "${core}" -eq 2 ] && [ ! -f /usr/bin/clash ]; then if [ "${lang}" == "en" ] || [ $lang == "auto" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - clashr core not found in /usr/bin/clash download and install clashr from update page " >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - clashr core not found in /usr/bin/clash download and install clashr from update page " >> /usr/share/clash/clash.txt echo "clashr core not found, download and install clash from update page" >> $REAL_LOG elif [ "${lang}" == "zh_cn" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - 找不到/usr/bin/clash,请从更新页下载clashr内核" >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - 找不到/usr/bin/clash,请从更新页下载clashr内核" >> /usr/share/clash/clash.txt echo "找不到/usr/bin/clash,请从更新页下载clashr内核" >> $REAL_LOG fi sleep 2 @@ -345,10 +354,10 @@ elif [ "${core}" -eq 2 ] && [ ! -f /usr/bin/clash ]; then exit 0 elif [ "${core}" -eq 3 ] && [ ! -f /etc/clash/clashtun/clash ]; then if [ "${lang}" == "en" ] || [ $lang == "auto" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - clashr Tun core not found in /etc/clash/clashtun/clash " >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - clashr Tun core not found in /etc/clash/clashtun/clash " >> /usr/share/clash/clash.txt echo "clash Tun core not found in /etc/clash/clashtun/clash" >> $REAL_LOG elif [ "${lang}" == "zh_cn" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - 找不到/etc/clash/clashtun/clash, clash Tun内核" >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - 找不到/etc/clash/clashtun/clash, clash Tun内核" >> /usr/share/clash/clash.txt echo "找不到/usr/bin/clash, clash Tun内核" >> $REAL_LOG fi sleep 2 @@ -412,8 +421,8 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5/1024)}')" game_rules >/dev/null 2>&1 - if [ "${core}" -eq 1 ];then - nohup $CLASH -d "$CLASH_CONFIG" > /tmp/clash.txt 2>&1 & + if [ "${core}" -eq 1 ];then + nohup $CLASH -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 & if [ "${lang}" == "en" ] || [ $lang == "auto" ];then echo "Clash Core Started Successfully " >$REAL_LOG @@ -422,16 +431,23 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5/1024)}')" fi elif [ "${core}" -eq 3 ];then - nohup $CLASHT -d "$CLASH_CONFIG" > /tmp/clash.txt 2>&1 & + nohup $CLASHT -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 & if [ "${lang}" == "en" ] || [ $lang == "auto" ];then echo "Clash Core Started Successfully " >$REAL_LOG elif [ "${lang}" == "zh_cn" ];then echo "Clash 计划任务,启动进程守护程序..." >$REAL_LOG fi + elif [ "${core}" -eq 4 ];then + nohup $CLASHD -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 & + if [ "${lang}" == "en" ] || [ $lang == "auto" ];then + echo "Clash Core Started Successfully " >$REAL_LOG + elif [ "${lang}" == "zh_cn" ];then + echo "Clash 计划任务,启动进程守护程序..." >$REAL_LOG + fi elif [ "${core}" -eq 2 ];then - nohup $CLASHR -d "$CLASH_CONFIG" > /tmp/clash.txt 2>&1 & + nohup $CLASHR -d "$CLASH_CONFIG" > /usr/share/clash/clash.txt 2>&1 & if [ "${lang}" == "en" ] || [ $lang == "auto" ];then echo "Clashr Core Started Successfully " >$REAL_LOG elif [ "${lang}" == "zh_cn" ];then @@ -448,11 +464,11 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5/1024)}')" echo "设置 Clash iptables" >$REAL_LOG fi - if [ "$(uci get firewall.@defaults[0].forward)" != "ACCEPT" ]; then + if [ "$(uci get firewall.@defaults[0].forward)" != "ACCEPT" ]; then uci set firewall.@defaults[0].forward=ACCEPT >/dev/null 2>&1 uci commit firewall >/dev/null 2>&1 /etc/init.d/firewall restart >/dev/null 2>&1 - fi + fi sleep 2 rules >/dev/null 2>&1 @@ -494,12 +510,12 @@ if [ -f $CONFIG_YAML ] && [ "$(ls -l $CONFIG_YAML|awk '{print int($5/1024)}')" fi else if [ "${lang}" == "en" ] || [ $lang == "auto" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - problem with config.yaml, config.yaml is either empty or not found " >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - problem with config.yaml, config.yaml is either empty or not found " >> /usr/share/clash/clash.txt echo " problem with config file " >$REAL_LOG sleep 5 echo "Clash for OpenWRT" >$REAL_LOG elif [ "${lang}" == "zh_cn" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - 你的config.yaml有问题还是为了空 0kb " >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - 你的config.yaml有问题还是为了空 0kb " >> /usr/share/clash/clash.txt echo " 你的config.yaml有问题还是为了空 0kb " >$REAL_LOG sleep 5 echo "Clash for OpenWRT" >$REAL_LOG @@ -509,12 +525,12 @@ fi else if [ "${lang}" == "en" ] || [ $lang == "auto" ];then echo "Enable Client and Start Client Again" >$REAL_LOG - echo " $(date "+%Y-%m-%d %H:%M:%S") - Enable Client and Start Client Again" >>/tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - Enable Client and Start Client Again" >>/usr/share/clash/clash.txt sleep 3 echo "Clash for OpenWRT" >$REAL_LOG elif [ "${lang}" == "zh_cn" ];then echo "启用客户端并重新启动客户端" >$REAL_LOG - echo " $(date "+%Y-%m-%d %H:%M:%S") - 启用客户端并重新启动客户端" >>/tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - 启用客户端并重新启动客户端" >>/usr/share/clash/clash.txt sleep 3 echo "Clash for OpenWRT" >$REAL_LOG fi @@ -530,19 +546,15 @@ remove_mark(){ dns_port=$(grep "^ \{0,\}listen:" $CONFIG_YAML |awk -F ':' '{print $3}' 2>/dev/null) if [ -f /usr/sbin/ip6tables ] && [ "${ipv6}" -eq 1 ]; then - ip6tables -t nat -F clash_ipv6 2>/dev/null1 && ip6tables -t nat -X clash_ipv6 2>/dev/null - if [ -z "$(ip6tables -nvL zone_lan_prerouting -t nat)" ]; then - ip6tables -t nat -D PREROUTING -p tcp -j clash_ipv6 >/dev/null 2>&1 - else - mangle_indexs=$(ip6tables -nvL zone_lan_prerouting -t nat | sed 1,2d | sed -n '/clash_ipv6/=' | sort -r) + ip6tables -t nat -F clash_ipv6 2>/dev/null1 && ip6tables -t nat -X clash_ipv6 2>/dev/null + mangle_indexs=$(ip6tables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/clash_ipv6/=' | sort -r) for mangle_index in $mangle_indexs; do - ip6tables -t nat -D zone_lan_prerouting $mangle_index 2>/dev/null + ip6tables -t nat -D PREROUTING $mangle_index 2>/dev/null done fi - fi - if [ "${core}" -eq 3 ];then + if [ "${core}" -eq 3 ] || [ "${core}" -eq 4 ];then PROXY_FWMARK="0x162" 2>/dev/null PROXY_ROUTE_TABLE="0x162" 2>/dev/null @@ -552,11 +564,11 @@ remove_mark(){ else TUN_DEVICE_NAME=$TUN_DEVICE fi - + if [ "${core}" -eq 3 ];then ip link set dev $TUN_DEVICE_NAME down 2>/dev/null ip tuntap del $TUN_DEVICE_NAME mode tun 2>/dev/null - ip route del default dev $TUN_DEVICE_NAME table "$PROXY_ROUTE_TABLE" 2>/dev/null + fi ip rule del fwmark "$PROXY_FWMARK" table "$PROXY_ROUTE_TABLE" 2>/dev/null iptables -t mangle -D OUTPUT -j clash 2>/dev/null @@ -578,7 +590,7 @@ remove_mark(){ ipset destroy localnetwork 2>/dev/null fi - /etc/init.d/dnsmasq restart >/dev/null 2>&1 + /etc/init.d/dnsmasq restart >/dev/null 2>&1 } stop(){ @@ -606,14 +618,11 @@ stop(){ fi iptables -t nat -F clash >/dev/null 2>&1 && iptables -t nat -X clash >/dev/null 2>&1 - if [ -z "$(iptables -nvL zone_lan_prerouting -t nat)" ]; then - iptables -t nat -D PREROUTING -p tcp -j clash >/dev/null 2>&1 - else - nat_indexs=$(iptables -nvL zone_lan_prerouting -t nat | sed 1,2d | sed -n '/clash/=' | sort -r) + nat_indexs=$(iptables -nvL PREROUTING -t nat | sed 1,2d | sed -n '/clash/=' | sort -r) for nat_index in $nat_indexs; do - iptables -t nat -D zone_lan_prerouting $nat_index >/dev/null 2>&1 + iptables -t nat -D PREROUTING $nat_index >/dev/null 2>&1 done - fi + fake=$(iptables -nvL OUTPUT -t nat |sed 1,2d |sed -n '/198.18.0.0\/16/=' |sort -r) for fake in $fake; do @@ -666,26 +675,26 @@ stop(){ revert_dns >/dev/null 2>&1 sleep 1 - echo "" >/tmp/clash.txt >/dev/null 2>&1 + echo "" >/usr/share/clash/clash.txt >/dev/null 2>&1 echo "0" > /usr/share/clash/logstatus_check >/dev/null 2>&1 - rm -rf /etc/clash/*.yaml /etc/clash/*.yml >/dev/null 2>&1 + if [ "${lang}" == "en" ] || [ $lang == "auto" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - CLIENT IS DISABLED " >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - CLIENT IS DISABLED " >> /usr/share/clash/clash.txt echo "Client is Disabled " >$REAL_LOG sleep 2 echo "Clash for OpenWRT" >$REAL_LOG elif [ "${lang}" == "zh_cn" ];then - echo " $(date "+%Y-%m-%d %H:%M:%S") - 客户端被禁用 " >> /tmp/clash.txt + echo " $(date "+%Y-%m-%d %H:%M:%S") - 客户端被禁用 " >> /usr/share/clash/clash.txt echo "客户端被禁用 " >$REAL_LOG sleep 2 echo "Clash for OpenWRT" >$REAL_LOG fi - if pidof clash >/dev/null; then - kill $(pidof clash) >/dev/null 2>&1 || kill -9 $(ps | grep clash | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - fi + if pidof clash >/dev/null; then + kill $(pidof clash) >/dev/null 2>&1 || kill -9 $(ps | grep clash | grep -v grep | awk '{print $1}') >/dev/null 2>&1 + fi #=========================================================================================================================== diff --git a/package/jsda/luci-app-clash/root/usr/share/clash/luci_version b/package/jsda/luci-app-clash/root/usr/share/clash/luci_version index 26ca594609..4cda8f19ed 100644 --- a/package/jsda/luci-app-clash/root/usr/share/clash/luci_version +++ b/package/jsda/luci-app-clash/root/usr/share/clash/luci_version @@ -1 +1 @@ -1.5.1 +1.5.2 diff --git a/package/jsda/luci-app-clash/root/usr/share/clash/proxy.sh b/package/jsda/luci-app-clash/root/usr/share/clash/proxy.sh index 63e7832bb2..41277ec2be 100755 --- a/package/jsda/luci-app-clash/root/usr/share/clash/proxy.sh +++ b/package/jsda/luci-app-clash/root/usr/share/clash/proxy.sh @@ -8,7 +8,7 @@ create=$(uci get clash.config.create 2>/dev/null) load_from=$(uci get clash.config.loadfrom 2>/dev/null) config_name=$(uci get clash.config.create_tag 2>/dev/null) CONFIG_YAML="/usr/share/clash/config/custom/${config_name}.yaml" -check_name=$(grep -F "${config_name}.yaml" "/usr/share/clashbackup/create_list.conf") +check_name=$(grep -F "${config_name}.yaml" "/usr/share/clashbackup/create_list.conf") same_tag=$(uci get clash.config.same_tag 2>/dev/null) @@ -401,17 +401,7 @@ config_load clash config_foreach servers_set "servers" fi -if [ -z "${scount}" ] || [ "${scount}" -eq 0 ];then -cat >> "$SERVER_FILE" <<-EOF -- name: Shadowsocks - type: ss - server: 127.0.0.1 - port: 1080 - cipher: aes-256-gcm - password: "12345" -EOF -fi - +if [ ! -z "${scount}" ] || [ "${scount}" -ne 0 ];then sed -i "1i\ " $SERVER_FILE 2>/dev/null sed -i "2i\Proxy:" $SERVER_FILE 2>/dev/null @@ -419,7 +409,7 @@ sed -i "2i\Proxy:" $SERVER_FILE 2>/dev/null egrep '^ {0,}-' $SERVER_FILE |grep name: |awk -F 'name: ' '{print $2}' |sed 's/,.*//' >$Proxy_Group 2>&1 sed -i "s/^ \{0,\}/ - /" $Proxy_Group 2>/dev/null - +fi yml_servers_add() @@ -501,14 +491,14 @@ yml_groups_set() echo " type: $type" >>$GROUP_FILE 2>/dev/null group_name="$name" - #echo " proxies: $group_name" >>$GROUP_FILE + echo " proxies: $group_name" >>$GROUP_FILE - if [ "$type" == "url-test" ] || [ "$type" == "load-balance" ] || [ "$type" == "fallback" ] ; then - echo " proxies:" >>$GROUP_FILE 2>/dev/null - #cat $Proxy_Group >> $GROUP_FILE 2>/dev/null - else - echo " proxies:" >>$GROUP_FILE 2>/dev/null - fi + #if [ "$type" == "url-test" ] || [ "$type" == "load-balance" ] || [ "$type" == "fallback" ] ; then + # echo " proxies:" >>$GROUP_FILE 2>/dev/null + # cat $Proxy_Group >> $GROUP_FILE 2>/dev/null + #else + # echo " proxies:" >>$GROUP_FILE 2>/dev/null + #fi if [ "$name" != "$old_name" ]; then sed -i "s/,${old_name}$/,${name}#d/g" $load 2>/dev/null @@ -609,12 +599,12 @@ if [ -f $SERVER_FILE ];then cat $SERVER_FILE >> $TEMP_FILE 2>/dev/null fi -cat $GROUP_FILE >> $TEMP_FILE 2>/dev/null - if [ -f $PROVIDER_FILE ];then cat $PROVIDER_FILE >> $TEMP_FILE 2>/dev/null fi +cat $GROUP_FILE >> $TEMP_FILE 2>/dev/null + if [ -f $CONFIG_YAML ];then rm -rf $CONFIG_YAML fi diff --git a/package/jsda/luci-app-clash/root/usr/share/clash/yum_change.sh b/package/jsda/luci-app-clash/root/usr/share/clash/yum_change.sh index 34c05ac16f..873215b986 100755 --- a/package/jsda/luci-app-clash/root/usr/share/clash/yum_change.sh +++ b/package/jsda/luci-app-clash/root/usr/share/clash/yum_change.sh @@ -17,14 +17,14 @@ fi if [ -z "$(grep "^ \{0,\}tun:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}listen:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}enhanced-mode:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}enable:" $CONFIG_YAML)" ] || [ -z "$(grep "^ \{0,\}dns:" $CONFIG_YAML)" ] ;then #=========================================================================================================================== -if [ "${core}" -eq 3 ];then +if [ "${core}" -eq 3 ] || [ "${core}" -eq 4 ];then uci set clash.config.mode="0" && uci set clash.config.tun_mode="1" && uci commit clash else uci set clash.config.mode="1" && uci set clash.config.tun_mode="0" && uci commit clash fi #=========================================================================================================================== fi - + sleep 2 #=========================================================================================================================== mode=$(uci get clash.config.mode 2>/dev/null) @@ -49,9 +49,13 @@ if [ "${mode}" -eq 1 ]; then fi sleep 2 echo "Clash for OpenWRT" >$REAL_LOG - + if [ ! -z "$(grep "^Proxy:" "$CONFIG_YAML")" ]; then sed -i "/Proxy:/i\#clash-openwrt" $CONFIG_YAML 2>/dev/null - sed -i "/#clash-openwrt/a\#=============" $CONFIG_YAML 2>/dev/null + elif [ ! -z "$(grep "^proxy-provider:" "$CONFIG_YAML")" ]; then + sed -i "/proxy-provider:/i\#clash-openwrt" $CONFIG_YAML 2>/dev/null + fi + + sed -i "/#clash-openwrt/a\#=============" $CONFIG_YAML 2>/dev/null sed -i "/#=============/a\ " $CONFIG_YAML 2>/dev/null sed -i '1,/#clash-openwrt/d' $CONFIG_YAML 2>/dev/null mv /etc/clash/config.yaml /etc/clash/dns.yaml @@ -102,7 +106,11 @@ elif [ "${tun_mode}" -eq 1 ]; then sleep 2 echo "Clash for OpenWRT" >$REAL_LOG + if [ ! -z "$(grep "^Proxy:" "$CONFIG_YAML")" ]; then sed -i "/Proxy:/i\#clash-openwrt" $CONFIG_YAML 2>/dev/null + elif [ ! -z "$(grep "^proxy-provider:" "$CONFIG_YAML")" ]; then + sed -i "/proxy-provider:/i\#clash-openwrt" $CONFIG_YAML 2>/dev/null + fi sed -i "/#clash-openwrt/a\#=============" $CONFIG_YAML 2>/dev/null sed -i "/#=============/a\ " $CONFIG_YAML 2>/dev/null sed -i '1,/#clash-openwrt/d' $CONFIG_YAML 2>/dev/null