diff --git a/package/lean/luci-app-ssr-plus/Makefile b/package/lean/luci-app-ssr-plus/Makefile index 431ff9eb0e..4dae5c42a0 100644 --- a/package/lean/luci-app-ssr-plus/Makefile +++ b/package/lean/luci-app-ssr-plus/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-ssr-plus -PKG_VERSION:=177 +PKG_VERSION:=180 PKG_RELEASE:=1 include $(INCLUDE_DIR)/package.mk @@ -32,10 +32,10 @@ config PACKAGE_$(PKG_NAME)_INCLUDE_ShadowsocksR_Server default y if i386||x86_64||arm||aarch64 endef -LUCI_TITLE:=SS/SSR/V2Ray/Trojan LuCI interface +LUCI_TITLE:=SS/SSR/V2Ray/Trojan/Socks5/Tun LuCI interface LUCI_PKGARCH:=all LUCI_DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +pdnsd-alt +wget +lua +libuci-lua \ - +microsocks +dns2socks +shadowsocks-libev-ss-local +shadowsocksr-libev-ssr-local +shadowsocks-libev-ss-redir +simple-obfs +tcpping \ + +microsocks +dns2socks +shadowsocks-libev-ss-local +shadowsocksr-libev-ssr-local +shadowsocks-libev-ss-redir +simple-obfs +tcpping +resolveip\ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray_plugin:v2ray-plugin \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \ diff --git a/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua index 3176ad4562..f0ada633a5 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/controller/shadowsocksr.lua @@ -74,105 +74,50 @@ function refresh_data() local set = luci.http.formvalue("set") local uci = luci.model.uci.cursor() local icount = 0 - if set == "gfw_data" then - refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'gfwlist_url', 'https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt') .. ' > /tmp/gfw.b64' + local retstring = 0 + local function update(url, file, type, file2) + local Num = 1 + refresh_cmd = "wget-ssl --no-check-certificate -t 3 -T 10 -O- " .. url .. " > /tmp/ssr-update." .. type sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") if sret == 0 then - luci.sys.call("/usr/bin/ssr-gfw") - icount = luci.sys.exec("cat /tmp/gfwnew.txt | wc -l") - if tonumber(icount) > 1000 then - if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then - oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf") - luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf") - luci.sys.call("/etc/init.d/dnsmasq restart") - retstring = tostring(tonumber(icount)/2) - else - retstring = "0" - end - else - retstring = "-1" + if type == "gfw_data" then + luci.sys.call("/usr/bin/ssr-gfw " .. type) + Num = 2 + end + if type == "ad_data" then + luci.sys.call("/usr/bin/ssr-ad " .. type) + end + local new_md5 = luci.sys.exec("echo -n $([ -f '/tmp/ssr-update." .. type .. "' ] && md5sum /tmp/ssr-update." .. type .. " | awk '{print $1}')") + local old_md5 = luci.sys.exec("echo -n $([ -f '" .. file .. "' ] && md5sum " .. file .. " | awk '{print $1}')") + if new_md5 == old_md5 then + retstring = "0" + else + icount = luci.sys.exec("cat /tmp/ssr-update." .. type .. " | wc -l") + luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file) + if file2 then luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file2) end + retstring = tostring(tonumber(icount)/Num) + if type == "gfw_data" or type == "ad_data" then + luci.sys.exec("/usr/share/shadowsocksr/gfw2ipset.sh gfw_data") + else + luci.sys.exec("/etc/init.d/shadowsocksr restart &") + end end - luci.sys.exec("rm -f /tmp/gfwnew.txt") else retstring = "-1" end + luci.sys.exec("rm -f /tmp/ssr-update." .. type) + end + if set == "gfw_data" then + update(uci:get_first("shadowsocksr", "global", "gfwlist_url", "https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt"), "/etc/ssr/gfw_list.conf", set, "/tmp/dnsmasq.ssr/gfw_list.conf") end if set == "ip_data" then - refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'chnroute_url', 'https://ispip.clang.cn/all_cn.txt') .. " > /tmp/china_ssr.txt" - sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") - icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l") - if sret == 0 and tonumber(icount) > 1000 then - if nixio.fs.access("/etc/china_ssr.txt") then - oldcount = luci.sys.exec("cat /etc/china_ssr.txt | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/china_ssr.txt /etc/china_ssr.txt") - luci.sys.exec("/etc/init.d/shadowsocksr restart &") - retstring = tostring(tonumber(icount)) - else - retstring = "0" - end - else - retstring = "-1" - end - luci.sys.exec("rm -f /tmp/china_ssr.txt") - end - if set == "nfip_data" then - refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'nfip_url','https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt') .." > /tmp/netflixip.list" - sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") - icount = luci.sys.exec("cat /tmp/netflixip.list | wc -l") - if sret == 0 and tonumber(icount) > 5 then - if nixio.fs.access("/etc/config/netflixip.list") then - oldcount = luci.sys.exec("cat /etc/config/netflixip.list | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/netflixip.list /etc/config/netflixip.list") - luci.sys.exec("/etc/init.d/shadowsocksr restart &") - retstring = tostring(tonumber(icount)) - else - retstring = "0" - end - else - retstring = "-1" - end - luci.sys.exec("rm -f /tmp/netflixip.list") + update(uci:get_first("shadowsocksr", "global", "chnroute_url","https://ispip.clang.cn/all_cn.txt"), "/etc/ssr/china_ssr.txt", set) end if set == "ad_data" then - refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'adblock_url','https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt') .." > /tmp/adnew.conf" - sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") - if sret == 0 then - luci.sys.call("/usr/bin/ssr-ad") - icount = luci.sys.exec("cat /tmp/ad.conf | wc -l") - if tonumber(icount) > 100 then - if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then - oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf") - luci.sys.exec("cp -f /tmp/ad.conf /tmp/dnsmasq.ssr/ad.conf") - luci.sys.call("/etc/init.d/dnsmasq restart") - retstring = tostring(tonumber(icount)) - else - retstring = "0" - end - else - retstring = "-1" - end - luci.sys.exec("rm -f /tmp/ad.conf") - else - retstring = "-1" - end + update(uci:get_first("shadowsocksr", "global", "adblock_url","https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt"), "/etc/ssr/ad.conf", set, "/tmp/dnsmasq.ssr/ad.conf") + end + if set == "nfip_data" then + update(uci:get_first("shadowsocksr", "global", "nfip_url","https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt"), "/etc/ssr/netflixip.list", set) end luci.http.prepare_content("application/json") luci.http.write_json({ret = retstring,retcount = icount}) diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua index d7908e5e6e..1d409a87ff 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/advanced.lua @@ -61,12 +61,13 @@ o.default = "https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt" o = s:option(Value, "chnroute_url", translate("Chnroute Update url")) o:value("https://ispip.clang.cn/all_cn.txt", translate("Clang.CN")) +o:value("https://ispip.clang.cn/all_cn_cidr.txt", translate("Clang.CN.CIDR")) o.default = "https://ispip.clang.cn/all_cn.txt" o = s:option(Value, "nfip_url", translate("nfip_url")) -o:value("https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt", translate("Netflix IP Only")) -o:value("https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/getflix.txt", translate("Netflix and AWS")) -o.default = "https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt" +o:value("https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt", translate("Netflix IP Only")) +o:value("https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/getflix.txt", translate("Netflix and AWS")) +o.default = "https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/NF_only.txt" o.description = translate("Customize Netflix IP Url") -- [[ SOCKS5 Proxy ]]-- diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua index f42822f580..3bedd5bd30 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client-config.lua @@ -1,122 +1,118 @@ -- Copyright (C) 2017 yushi studio github.com/ywb94 -- Licensed to the public under the GNU General Public License v3. +require "nixio.fs" +require "luci.sys" +require "luci.http" local m, s, o,kcp_enable local shadowsocksr = "shadowsocksr" -local uci = luci.model.uci.cursor() -local fs = require "nixio.fs" -local sys = require "luci.sys" local sid = arg[1] local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") -local http = require "luci.http" local function isKcptun(file) - if not fs.access(file, "rwx", "rx", "rx") then - fs.chmod(file, 755) - end - - local str = sys.exec(file .. " -v | awk '{printf $1}'") - return (str:lower() == "kcptun") +if not nixio.fs.access(file, "rwx", "rx", "rx") then +nixio.fs.chmod(file, 755) +end +local str = luci.sys.exec(file .. " -v | awk '{printf $1}'") +return (str:lower() == "kcptun") end - local server_table = {} local encrypt_methods = { - "none", - "table", - "rc4", - "rc4-md5-6", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf", +"none", +"table", +"rc4", +"rc4-md5-6", +"rc4-md5", +"aes-128-cfb", +"aes-192-cfb", +"aes-256-cfb", +"aes-128-ctr", +"aes-192-ctr", +"aes-256-ctr", +"bf-cfb", +"camellia-128-cfb", +"camellia-192-cfb", +"camellia-256-cfb", +"cast5-cfb", +"des-cfb", +"idea-cfb", +"rc2-cfb", +"seed-cfb", +"salsa20", +"chacha20", +"chacha20-ietf", } local encrypt_methods_ss = { - -- aead - "aes-128-gcm", - "aes-192-gcm", - "aes-256-gcm", - "chacha20-ietf-poly1305", - "xchacha20-ietf-poly1305", - -- stream - "table", - "rc4", - "rc4-md5", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "salsa20", - "chacha20", - "chacha20-ietf", +-- aead +"aes-128-gcm", +"aes-192-gcm", +"aes-256-gcm", +"chacha20-ietf-poly1305", +"xchacha20-ietf-poly1305", +-- stream +"table", +"rc4", +"rc4-md5", +"aes-128-cfb", +"aes-192-cfb", +"aes-256-cfb", +"aes-128-ctr", +"aes-192-ctr", +"aes-256-ctr", +"bf-cfb", +"camellia-128-cfb", +"camellia-192-cfb", +"camellia-256-cfb", +"salsa20", +"chacha20", +"chacha20-ietf", } local protocol = { - "origin", - "verify_deflate", - "auth_sha1_v4", - "auth_aes128_sha1", - "auth_aes128_md5", - "auth_chain_a", - "auth_chain_b", - "auth_chain_c", - "auth_chain_d", - "auth_chain_e", - "auth_chain_f", +"origin", +"verify_deflate", +"auth_sha1_v4", +"auth_aes128_sha1", +"auth_aes128_md5", +"auth_chain_a", +"auth_chain_b", +"auth_chain_c", +"auth_chain_d", +"auth_chain_e", +"auth_chain_f", } obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", +"plain", +"http_simple", +"http_post", +"random_head", +"tls1.2_ticket_auth", } local securitys = { - "auto", - "none", - "aes-128-gcm", - "chacha20-poly1305" +"auto", +"none", +"aes-128-gcm", +"chacha20-poly1305" } - m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers") if m.uci:get(shadowsocksr, sid) ~= "servers" then - luci.http.redirect(m.redirect) - return +luci.http.redirect(m.redirect) +return end -- [[ Servers Setting ]]-- s = m:section(NamedSection, sid, "servers") s.anonymous = true -s.addremove = false +s.addremove = false o = s:option(DummyValue,"ssr_url","SS/SSR/V2RAY/TROJAN URL") -o.rawhtml = true +o.rawhtml = true o.template = "shadowsocksr/ssrurl" o.value =sid @@ -140,8 +136,8 @@ o.description = translate("Using incorrect encryption mothod may causes service o = s:option(Value, "alias", translate("Alias(optional)")) o = s:option(ListValue, "iface", translate("Network interface to use")) -for _, e in ipairs(sys.net.devices()) do - if e ~= "lo" then o:value(e) end +for _, e in ipairs(luci.sys.net.devices()) do +if e ~= "lo" then o:value(e) end end o:depends("type", "tun") o.description = translate("Redirect traffic to this network interface") @@ -250,8 +246,8 @@ o:depends("type", "v2ray") -- TCP伪装 o = s:option(ListValue, "tcp_guise", translate("Camouflage Type")) o:depends("transport", "tcp") -o:value("http", "HTTP") o:value("none", translate("None")) +o:value("http", "HTTP") o.rmempty = true -- HTTP域名 @@ -292,10 +288,10 @@ o.rmempty = true o = s:option(ListValue, "quic_security", translate("QUIC Security")) o:depends("transport", "quic") -o.rmempty = true o:value("none", translate("None")) o:value("aes-128-gcm", translate("aes-128-gcm")) o:value("chacha20-poly1305", translate("chacha20-poly1305")) +o.rmempty = true o = s:option(Value, "quic_key", translate("QUIC Key")) o:depends("transport", "quic") @@ -365,11 +361,11 @@ o.rmempty = true -- [[ allowInsecure ]]-- o = s:option(Flag, "insecure", translate("allowInsecure")) -o.rmempty = true +o.rmempty = false o:depends("type", "v2ray") o:depends("type", "trojan") o.default = "1" - +o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.") -- [[ TLS ]]-- o = s:option(Flag, "tls", translate("TLS")) o.rmempty = true @@ -409,31 +405,31 @@ o:depends("certificate", 1) cert_dir = "/etc/ssl/private/" local path -http.setfilehandler( - function(meta, chunk, eof) - if not fd then - if (not meta) or (not meta.name) or (not meta.file) then return end - fd = nixio.open(cert_dir .. meta.file, "w") - if not fd then - path = translate("Create upload file error.") - return - end - end - if chunk and fd then - fd:write(chunk) - end - if eof and fd then - fd:close() - fd = nil - path = '/etc/ssl/private/' .. meta.file .. '' - end - end - ) +luci.http.setfilehandler( +function(meta, chunk, eof) +if not fd then +if (not meta) or (not meta.name) or (not meta.file) then return end +fd = nixio.open(cert_dir .. meta.file, "w") +if not fd then +path = translate("Create upload file error.") +return +end +end +if chunk and fd then +fd:write(chunk) +end +if eof and fd then +fd:close() +fd = nil +path = '/etc/ssl/private/' .. meta.file .. '' +end +end +) if luci.http.formvalue("upload") then - local f = luci.http.formvalue("ulfile") - if #f <= 0 then - path = translate("No specify upload file.") - end +local f = luci.http.formvalue("ulfile") +if #f <= 0 then +path = translate("No specify upload file.") +end end o = s:option(Value, "certpath", translate("Current Certificate Path")) @@ -459,7 +455,6 @@ o.default = 1234 o.rmempty = false if nixio.fs.access("/usr/bin/kcptun-client") then - kcp_enable = s:option(Flag, "kcp_enable", translate("KcpTun Enable"), translate("bin:/usr/bin/kcptun-client")) kcp_enable.rmempty = true kcp_enable.default = "0" @@ -470,17 +465,17 @@ o = s:option(Value, "kcp_port", translate("KcpTun Port")) o.datatype = "port" o.default = 4000 function o.validate(self, value, section) - local kcp_file="/usr/bin/kcptun-client" - local enable = kcp_enable:formvalue(section) or kcp_enable.disabled - if enable == kcp_enable.enabled then - if not fs.access(kcp_file) then - return nil, translate("Haven't a Kcptun executable file") - elseif not isKcptun(kcp_file) then - return nil, translate("Not a Kcptun executable file") - end - end +local kcp_file="/usr/bin/kcptun-client" +local enable = kcp_enable:formvalue(section) or kcp_enable.disabled +if enable == kcp_enable.enabled then +if not nixio.fs.access(kcp_file) then +return nil, translate("Haven't a Kcptun executable file") +elseif not isKcptun(kcp_file) then +return nil, translate("Not a Kcptun executable file") +end +end - return value +return value end o:depends("type", "ssr") o:depends("type", "ss") @@ -494,7 +489,6 @@ o = s:option(Value, "kcp_param", translate("KcpTun Param")) o.default = "--nocomp" o:depends("type", "ssr") o:depends("type", "ss") - end return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua index c73e5e21dd..f17415f957 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/client.lua @@ -5,12 +5,9 @@ local m, s, sec, o, kcp_enable local shadowsocksr = "shadowsocksr" local uci = luci.model.uci.cursor() - -local sys = require "luci.sys" - m = Map(shadowsocksr, translate("ShadowSocksR Plus+ Settings")) -m:section(SimpleSection).template = "shadowsocksr/status" +m:section(SimpleSection).template = "shadowsocksr/status" local server_table = {} uci:foreach(shadowsocksr, "servers", function(s) @@ -106,4 +103,3 @@ o.description = translate("Custom DNS Server format as IP:PORT (default: 8.8.4.4 return m - diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua index 7a5e33b63c..ef4a6ba102 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/control.lua @@ -1,5 +1,6 @@ +require "luci.ip" +require "nixio.fs" local m, s, o -local NXFS = require "nixio.fs" m = Map("shadowsocksr", translate("IP black-and-white list")) @@ -27,9 +28,9 @@ o.rmempty = false o = s:taboption("lan_ac", DynamicList, "lan_ac_ips", translate("LAN Host List")) o.datatype = "ipaddr" luci.ip.neighbors({ family = 4 }, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end + if entry.reachable then + o:value(entry.dest:string()) + end end) o:depends("lan_ac_mode", "w") o:depends("lan_ac_mode", "b") @@ -37,25 +38,25 @@ o:depends("lan_ac_mode", "b") o = s:taboption("lan_ac", DynamicList, "lan_bp_ips", translate("LAN Bypassed Host List")) o.datatype = "ipaddr" luci.ip.neighbors({ family = 4 }, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end + if entry.reachable then + o:value(entry.dest:string()) + end end) o = s:taboption("lan_ac", DynamicList, "lan_fp_ips", translate("LAN Force Proxy Host List")) o.datatype = "ipaddr" luci.ip.neighbors({ family = 4 }, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end + if entry.reachable then + o:value(entry.dest:string()) + end end) o = s:taboption("lan_ac", DynamicList, "lan_gm_ips", translate("Game Mode Host List")) o.datatype = "ipaddr" luci.ip.neighbors({ family = 4 }, function(entry) - if entry.reachable then - o:value(entry.dest:string()) - end + if entry.reachable then + o:value(entry.dest:string()) + end end) -- Part of Self @@ -66,73 +67,68 @@ end) -- o:value("2", translatef("Forwarded Proxy")) -- o.rmempty = false -s:tab("esc", translate("Bypass Domain List")) - -local escconf = "/etc/config/white.list" +s:tab("esc", translate("Bypass Domain List")) +local escconf = "/etc/ssr/white.list" o = s:taboption("esc", TextValue, "escconf") o.rows = 13 o.wrap = "off" o.rmempty = true o.cfgvalue = function(self, section) - return NXFS.readfile(escconf) or "" + return nixio.fs.readfile(escconf) or "" end o.write = function(self, section, value) - NXFS.writefile(escconf, value:gsub("\r\n", "\n")) + nixio.fs.writefile(escconf, value:gsub("\r\n", "\n")) end o.remove = function(self, section, value) - NXFS.writefile(escconf, "") + nixio.fs.writefile(escconf, "") end - -s:tab("block", translate("Black Domain List")) - -local blockconf = "/etc/config/black.list" +s:tab("block", translate("Black Domain List")) +local blockconf = "/etc/ssr/black.list" o = s:taboption("block", TextValue, "blockconf") o.rows = 13 o.wrap = "off" o.rmempty = true o.cfgvalue = function(self, section) - return NXFS.readfile(blockconf) or " " + return nixio.fs.readfile(blockconf) or " " end o.write = function(self, section, value) - NXFS.writefile(blockconf, value:gsub("\r\n", "\n")) + nixio.fs.writefile(blockconf, value:gsub("\r\n", "\n")) end o.remove = function(self, section, value) - NXFS.writefile(blockconf, "") + nixio.fs.writefile(blockconf, "") end -s:tab("netflix", translate("Netflix Domain List")) +s:tab("denydomain", translate("Deny Domain List")) +local denydomainconf = "/etc/ssr/deny.list" +o = s:taboption("denydomain", TextValue, "denydomainconf") +o.rows = 13 +o.wrap = "off" +o.rmempty = true +o.cfgvalue = function(self, section) + return nixio.fs.readfile(denydomainconf) or " " +end +o.write = function(self, section, value) + nixio.fs.writefile(denydomainconf, value:gsub("\r\n", "\n")) +end +o.remove = function(self, section, value) + nixio.fs.writefile(denydomainconf, "") +end -local netflixconf = "/etc/config/netflix.list" +s:tab("netflix", translate("Netflix Domain List")) +local netflixconf = "/etc/ssr/netflix.list" o = s:taboption("netflix", TextValue, "netflixconf") o.rows = 13 o.wrap = "off" o.rmempty = true o.cfgvalue = function(self, section) - return NXFS.readfile(netflixconf) or " " + return nixio.fs.readfile(netflixconf) or " " end o.write = function(self, section, value) - NXFS.writefile(netflixconf, value:gsub("\r\n", "\n")) + nixio.fs.writefile(netflixconf, value:gsub("\r\n", "\n")) end o.remove = function(self, section, value) - NXFS.writefile(netflixconf, "") -end - -s:tab("netflixip", translate("Netflix IP List")) - -local netflixipconf = "/etc/config/netflixip.list" -o = s:taboption("netflixip", TextValue, "netflixipconf") -o.rows = 13 -o.wrap = "off" -o.rmempty = true -o.cfgvalue = function(self, section) - return NXFS.readfile(netflixipconf) or " " -end -o.write = function(self, section, value) - NXFS.writefile(netflixipconf, value:gsub("\r\n", "\n")) -end -o.remove = function(self, section, value) - NXFS.writefile(netflixipconf, "") + nixio.fs.writefile(netflixconf, "") end return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua index 6c5938ed7f..a71d0003bf 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/log.lua @@ -1,20 +1,20 @@ -local fs = require "nixio.fs" - +require "luci.util" +require "nixio.fs" f = SimpleForm("logview") - +f.reset = false +f.submit = false t = f:field(TextValue, "conf") t.rmempty = true t.rows = 20 function t.cfgvalue() - if fs.access("/tmp/ssrplus.log") then - local logs = luci.util.execi("cat /tmp/ssrplus.log") - local s = "" - for line in logs do - s = line .. "\n" .. s - end - return s - end + if nixio.fs.access("/tmp/ssrplus.log") then + local logs = luci.util.execi("cat /tmp/ssrplus.log") + local s = "" + for line in logs do + s = line .. "\n" .. s + end + return s + end end t.readonly="readonly" - -return f \ No newline at end of file +return f diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua index 29c75a406a..3361f7c36e 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server-config.lua @@ -9,38 +9,38 @@ local shadowsocksr = "shadowsocksr" local sid = arg[1] local encrypt_methods = { - "rc4-md5", - "rc4-md5-6", - "rc4", - "table", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf", +"rc4-md5", +"rc4-md5-6", +"rc4", +"table", +"aes-128-cfb", +"aes-192-cfb", +"aes-256-cfb", +"aes-128-ctr", +"aes-192-ctr", +"aes-256-ctr", +"bf-cfb", +"camellia-128-cfb", +"camellia-192-cfb", +"camellia-256-cfb", +"cast5-cfb", +"des-cfb", +"idea-cfb", +"rc2-cfb", +"seed-cfb", +"salsa20", +"chacha20", +"chacha20-ietf", } local protocol = { - "origin", +"origin", } obfs = { - "plain", - "http_simple", - "http_post", +"plain", +"http_simple", +"http_post", } m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) @@ -51,13 +51,10 @@ if m.uci:get(shadowsocksr, sid) ~= "server_config" then return end - - - -- [[ Server Setting ]]-- s = m:section(NamedSection, sid, "server_config") s.anonymous = true -s.addremove = false +s.addremove = false o = s:option(Flag, "enable", translate("Enable")) o.default = 1 @@ -66,14 +63,16 @@ o.rmempty = false o = s:option(ListValue, "type", translate("Server Type")) o:value("socks5", translate("Socks5")) if nixio.fs.access("/usr/bin/ssr-server") then -o:value("ssr", translate("ShadowsocksR")) + o:value("ssr", translate("ShadowsocksR")) end o.default = "socks5" o = s:option(Value, "server_port", translate("Server Port")) o.datatype = "port" -o.default = 8388 +math.randomseed(tostring(os.time()):reverse():sub(1, 7)) +o.default = math.random(10240,20480) o.rmempty = false +o.description = translate("warning! Please do not reuse the port!") o = s:option(Value, "timeout", translate("Connection Timeout")) o.datatype = "uinteger" @@ -99,7 +98,6 @@ for _, v in ipairs(protocol) do o:value(v) end o.rmempty = false o:depends("type", "ssr") - o = s:option(ListValue, "obfs", translate("Obfs")) for _, v in ipairs(obfs) do o:value(v) end o.rmempty = false diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua index ec273e0f3b..a41163e1a5 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua @@ -1,56 +1,53 @@ -- Copyright (C) 2017 yushi studio -- Licensed to the public under the GNU General Public License v3. - +require "luci.http" +require "luci.dispatcher" local m, sec, o local shadowsocksr = "shadowsocksr" -local uci = luci.model.uci.cursor() - - -m = Map(shadowsocksr) - local encrypt_methods = { - "table", - "rc4", - "rc4-md5", - "rc4-md5-6", - "aes-128-cfb", - "aes-192-cfb", - "aes-256-cfb", - "aes-128-ctr", - "aes-192-ctr", - "aes-256-ctr", - "bf-cfb", - "camellia-128-cfb", - "camellia-192-cfb", - "camellia-256-cfb", - "cast5-cfb", - "des-cfb", - "idea-cfb", - "rc2-cfb", - "seed-cfb", - "salsa20", - "chacha20", - "chacha20-ietf", +"table", +"rc4", +"rc4-md5", +"rc4-md5-6", +"aes-128-cfb", +"aes-192-cfb", +"aes-256-cfb", +"aes-128-ctr", +"aes-192-ctr", +"aes-256-ctr", +"bf-cfb", +"camellia-128-cfb", +"camellia-192-cfb", +"camellia-256-cfb", +"cast5-cfb", +"des-cfb", +"idea-cfb", +"rc2-cfb", +"seed-cfb", +"salsa20", +"chacha20", +"chacha20-ietf", } local protocol = { - "origin", - "verify_deflate", - "auth_sha1_v4", - "auth_aes128_sha1", - "auth_aes128_md5", - "auth_chain_a", +"origin", +"verify_deflate", +"auth_sha1_v4", +"auth_aes128_sha1", +"auth_aes128_md5", +"auth_chain_a", } obfs = { - "plain", - "http_simple", - "http_post", - "random_head", - "tls1.2_ticket_auth", - "tls1.2_ticket_fastauth", +"plain", +"http_simple", +"http_post", +"random_head", +"tls1.2_ticket_auth", +"tls1.2_ticket_fastauth", } +m = Map(shadowsocksr) -- [[ Global Setting ]]-- sec = m:section(TypedSection, "server_global", translate("Global Setting")) sec.anonymous = true diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua index d1ca504671..6ab28404a6 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/servers.lua @@ -1,20 +1,16 @@ -- Licensed to the public under the GNU General Public License v3. - +require "luci.http" +require "luci.dispatcher" +require "luci.model.uci" local m, s, o local shadowsocksr = "shadowsocksr" - local uci = luci.model.uci.cursor() local server_count = 0 uci:foreach("shadowsocksr", "servers", function(s) - server_count = server_count + 1 + server_count = server_count + 1 end) -local fs = require "nixio.fs" -local sys = require "luci.sys" - -local ucic = luci.model.uci.cursor() - -m = Map(shadowsocksr, translate("Servers subscription and manage")) +m = Map(shadowsocksr, translate("Servers subscription and manage")) -- Server Subscribe @@ -28,7 +24,7 @@ o.description = translate("Auto Update Server subscription, GFW list and CHN rou o = s:option(ListValue, "auto_update_time", translate("Update time (every day)")) for t = 0,23 do -o:value(t, t..":00") + o:value(t, t..":00") end o.default=2 o.rmempty = false @@ -44,7 +40,7 @@ o = s:option(Button,"update_Sub",translate("Update Subscribe List")) o.inputstyle = "reload" o.description = translate("Update subscribe url list first") o.write = function() - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) end o = s:option(Flag, "switch", translate("Subscribe Default Auto-Switch")) @@ -58,25 +54,25 @@ o.description = translate("Through proxy update list, Not Recommended ") o = s:option(Button,"subscribe", translate("Update All Subscribe Severs")) -o.rawhtml = true +o.rawhtml = true o.template = "shadowsocksr/subscribe" o = s:option(Button,"delete",translate("Delete All Subscribe Severs")) o.inputstyle = "reset" -o.description = string.format(translate("Server Count") .. ": %d", server_count) +o.description = string.format(translate("Server Count") .. ": %d", server_count) o.write = function() -uci:delete_all("shadowsocksr", "servers", function(s) - if s.hashkey or s.isSubscribe then - return true - else - return false - end -end) -uci:save("shadowsocksr") -uci:commit("shadowsocksr") -luci.sys.exec("/etc/init.d/shadowsocksr restart") -luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) -return + uci:delete_all("shadowsocksr", "servers", function(s) + if s.hashkey or s.isSubscribe then + return true + else + return false + end + end) + uci:save("shadowsocksr") + uci:commit("shadowsocksr") + luci.sys.exec("/etc/init.d/shadowsocksr restart") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) + return end -- [[ Servers Manage ]]-- @@ -85,12 +81,12 @@ s.anonymous = true s.addremove = true s.template = "cbi/tblsection" s.sortable = true -s.extedit = luci.dispatcher.build_url("admin/services/shadowsocksr/servers/%s") +s.extedit = luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers", "%s") function s.create(...) local sid = TypedSection.create(...) if sid then luci.http.redirect(s.extedit % sid) - return + return end end @@ -117,15 +113,14 @@ o = s:option(DummyValue, "server", translate("Ping Latency")) o.template="shadowsocksr/ping" o.width="10%" - node = s:option(Button,"apply_node",translate("Apply")) node.inputstyle = "apply" node.write = function(self, section) - ucic:set("shadowsocksr", '@global[0]', 'global_server', section) - ucic:save("shadowsocksr") - ucic:commit("shadowsocksr") - luci.sys.exec("/etc/init.d/shadowsocksr restart") - luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "client")) + uci:set("shadowsocksr", '@global[0]', 'global_server', section) + uci:save("shadowsocksr") + uci:commit("shadowsocksr") + luci.sys.exec("/etc/init.d/shadowsocksr restart") + luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "client")) end o = s:option(Flag, "switch_enable", translate("Auto Switch")) @@ -136,4 +131,4 @@ end m:append(Template("shadowsocksr/server_list")) -return m \ No newline at end of file +return m diff --git a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua index 0ae5219eea..c12fd5e258 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua +++ b/package/lean/luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/status.lua @@ -1,6 +1,8 @@ -- Copyright (C) 2017 yushi studio -- Licensed to the public under the GNU General Public License v3. - +require "nixio.fs" +require "luci.sys" +require "luci.model.uci" local m, s, o local redir_run=0 local reudp_run=0 @@ -19,72 +21,67 @@ font_blue = [[]] font_off = [[]] bold_on = [[]] bold_off = [[]] - -local fs = require "nixio.fs" -local sys = require "luci.sys" local kcptun_version=translate("Unknown") local kcp_file="/usr/bin/kcptun-client" -if not fs.access(kcp_file) then -kcptun_version=translate("Not exist") +if not nixio.fs.access(kcp_file) then + kcptun_version=translate("Not exist") else -if not fs.access(kcp_file, "rwx", "rx", "rx") then -fs.chmod(kcp_file, 755) -end -kcptun_version=sys.exec(kcp_file .. " -v | awk '{printf $3}'") -if not kcptun_version or kcptun_version == "" then -kcptun_version = translate("Unknown") + if not nixio.fs.access(kcp_file, "rwx", "rx", "rx") then + nixio.fs.chmod(kcp_file, 755) + end + kcptun_version=luci.sys.exec(kcp_file .. " -v | awk '{printf $3}'") + if not kcptun_version or kcptun_version == "" then + kcptun_version = translate("Unknown") + end end +if nixio.fs.access("/etc/ssr/gfw_list.conf") then + gfw_count = tonumber(luci.sys.exec("cat /etc/ssr/gfw_list.conf | wc -l"))/2 end -if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then -gfw_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l"))/2 +if nixio.fs.access("/etc/ssr/ad.conf") then + ad_count = tonumber(luci.sys.exec("cat /etc/ssr/ad.conf | wc -l")) end -if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then -ad_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l")) +if nixio.fs.access("/etc/ssr/china_ssr.txt") then + ip_count = tonumber(luci.sys.exec("cat /etc/ssr/china_ssr.txt | wc -l")) end -if nixio.fs.access("/etc/china_ssr.txt") then -ip_count = tonumber(sys.exec("cat /etc/china_ssr.txt | wc -l")) +if nixio.fs.access("/etc/ssr/netflixip.list") then + nfip_count = tonumber(luci.sys.exec("cat /etc/ssr/netflixip.list | wc -l")) end -if nixio.fs.access("/etc/config/netflixip.list") then -nfip_count = tonumber(sys.exec("cat /etc/config/netflixip.list | wc -l")) -end - -local icount=sys.exec("busybox ps -w | grep ssr-reudp |grep -v grep| wc -l") +local icount=luci.sys.exec("busybox ps -w | grep ssr-reudp |grep -v grep| wc -l") if tonumber(icount)>0 then -reudp_run=1 + reudp_run=1 else -icount=sys.exec("busybox ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l") -if tonumber(icount)>0 then -reudp_run=1 -end + icount=luci.sys.exec("busybox ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l") + if tonumber(icount)>0 then + reudp_run=1 + end end if luci.sys.call("busybox ps -w | grep ssr-retcp | grep -v grep >/dev/null") == 0 then -redir_run=1 + redir_run=1 end if luci.sys.call("busybox ps -w | grep ssr-local | grep -v ssr-socksdns |grep -v grep >/dev/null") == 0 then -sock5_run=1 + sock5_run=1 end if luci.sys.call("pidof kcptun-client >/dev/null") == 0 then -kcptun_run=1 + kcptun_run=1 end if luci.sys.call("busybox ps -w | grep ssr-server | grep -v grep >/dev/null") == 0 then -server_run=1 -end - -if luci.sys.call("busybox ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then -tunnel_run=1 + server_run=1 end +-- if luci.sys.call("busybox ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then +-- tunnel_run=1 +-- end if luci.sys.call("pidof pdnsd >/dev/null") == 0 or (luci.sys.call("busybox ps -w | grep ssr-dns |grep -v grep >/dev/null") == 0 and luci.sys.call("pidof dns2socks >/dev/null") == 0)then -pdnsd_run=1 + pdnsd_run=1 end m = SimpleForm("Version") @@ -94,56 +91,56 @@ m.submit = false s=m:field(DummyValue,"redir_run",translate("Global Client")) s.rawhtml = true if redir_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off + s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off else -s.value = translate("Not Running") + s.value = translate("Not Running") end s=m:field(DummyValue,"reudp_run",translate("Game Mode UDP Relay")) s.rawhtml = true if reudp_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off + s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off else -s.value = translate("Not Running") + s.value = translate("Not Running") end if uci:get_first(shadowsocksr, 'global', 'pdnsd_enable', '0') ~= '0' then -s=m:field(DummyValue,"pdnsd_run",translate("DNS Anti-pollution")) -s.rawhtml = true -if pdnsd_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end + s=m:field(DummyValue,"pdnsd_run",translate("DNS Anti-pollution")) + s.rawhtml = true + if pdnsd_run == 1 then + s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off + else + s.value = translate("Not Running") + end end s=m:field(DummyValue,"sock5_run",translate("Global SOCKS5 Proxy Server")) s.rawhtml = true if sock5_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off + s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off else -s.value = translate("Not Running") + s.value = translate("Not Running") end s=m:field(DummyValue,"server_run",translate("Local Servers")) s.rawhtml = true if server_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off + s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off else -s.value = translate("Not Running") + s.value = translate("Not Running") end if nixio.fs.access("/usr/bin/kcptun-client") then -s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) -s.rawhtml = true -s.value =kcptun_version -s=m:field(DummyValue,"kcptun_run",translate("KcpTun")) -s.rawhtml = true -if kcptun_run == 1 then -s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off -else -s.value = translate("Not Running") -end + s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) + s.rawhtml = true + s.value =kcptun_version + s=m:field(DummyValue,"kcptun_run",translate("KcpTun")) + s.rawhtml = true + if kcptun_run == 1 then + s.value =font_blue .. bold_on .. translate("Running") .. bold_off .. font_off + else + s.value = translate("Not Running") + end end s=m:field(DummyValue,"google",translate("Google Connectivity")) @@ -170,10 +167,10 @@ s.template = "shadowsocksr/refresh" s.value = nfip_count .. " " .. translate("Records") if uci:get_first(shadowsocksr, 'global', 'adblock', '0') == '1' then -s=m:field(DummyValue,"ad_data",translate("Advertising Data")) -s.rawhtml = true -s.template = "shadowsocksr/refresh" -s.value = ad_count .. " " .. translate("Records") + s=m:field(DummyValue,"ad_data",translate("Advertising Data")) + s.rawhtml = true + s.template = "shadowsocksr/refresh" + s.value = ad_count .. " " .. translate("Records") end s=m:field(DummyValue,"check_port",translate("Check Server Port")) diff --git a/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm index d257fe1c6d..ac2a27f627 100644 --- a/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm +++ b/package/lean/luci-app-ssr-plus/luasrc/view/shadowsocksr/ssrurl.htm @@ -47,15 +47,15 @@ var s = document.getElementById(urlname + '-status'); if (!s) return false; - var v_server = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server')[0]; - var v_port = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server_port')[0]; - var v_protocol = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.protocol')[0]; - var v_method = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.encrypt_method')[0]; - var v_obfs = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.obfs')[0]; - var v_password = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.password')[0]; - var v_obfs_param = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.obfs_param')[0]; - var v_protocol_param = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.protocol_param')[0]; - var v_alias = document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.alias')[0]; + var v_server = document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0]; + var v_port = document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0]; + var v_protocol = document.getElementsByName('cbid.shadowsocksr.' + sid + '.protocol')[0]; + var v_method = document.getElementsByName('cbid.shadowsocksr.' + sid + '.encrypt_method')[0]; + var v_obfs = document.getElementsByName('cbid.shadowsocksr.' + sid + '.obfs')[0]; + var v_password = document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0]; + var v_obfs_param = document.getElementsByName('cbid.shadowsocksr.' + sid + '.obfs_param')[0]; + var v_protocol_param = document.getElementsByName('cbid.shadowsocksr.' + sid + '.protocol_param')[0]; + var v_alias = document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0]; var ssr_str = v_server.value + ":" + v_port.value + ":" + v_protocol.value + ":" + @@ -104,8 +104,8 @@ if (ssu[0] == "ssr") { var sstr = b64decsafe(ssu[1]); var ploc = sstr.indexOf("/?"); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].value = "ssr"; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "ssr"; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); var url0, param = ""; if (ploc > 0) { url0 = sstr.substr(0, ploc); @@ -123,17 +123,17 @@ pdict[decodeURIComponent(b[0])] = decodeURIComponent(b[1] || ''); } } - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server')[0].value = ssm[1]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server_port')[0].value = ssm[2]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.protocol')[0].value = ssm[3]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.encrypt_method')[0].value = ssm[4]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.obfs')[0].value = ssm[5]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.password')[0].value = b64decsafe(ssm[6]); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.obfs_param')[0].value = dictvalue(pdict, 'obfsparam'); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.protocol_param')[0].value = dictvalue(pdict, 'protoparam'); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = ssm[1]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = ssm[2]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.protocol')[0].value = ssm[3]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.encrypt_method')[0].value = ssm[4]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.obfs')[0].value = ssm[5]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = b64decsafe(ssm[6]); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.obfs_param')[0].value = dictvalue(pdict, 'obfsparam'); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.protocol_param')[0].value = dictvalue(pdict, 'protoparam'); var rem = pdict['remarks']; if (typeof (rem) != 'undefined' && rem != '' && rem.length > 0) - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.alias')[0].value = b64decutf8safe(rem); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = b64decutf8safe(rem); s.innerHTML = "导入ShadowsocksR配置信息成功"; return false; } else if (ssu[0] == "ss") { @@ -169,35 +169,35 @@ method = userInfo.substr(0, userInfoSplitIndex); password = userInfo.substr(userInfoSplitIndex + 1); } - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].value = "ss"; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server')[0].value = server; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server_port')[0].value = port; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.password')[0].value = password || ""; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.encrypt_method_ss')[0].value = method || ""; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.plugin')[0].value = plugin || ""; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = pluginOpts || ""; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "ss"; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = server; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = port; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = password || ""; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.encrypt_method_ss')[0].value = method || ""; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin')[0].value = plugin || ""; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = pluginOpts || ""; if (param != undefined) { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); } s.innerHTML = "导入Shadowsocks配置信息成功"; } else { var sstr = b64decsafe(url0); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].value = "ss"; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "ss"; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); var team = sstr.split('@'); console.log(param); var part1 = team[0].split(':'); var part2 = team[1].split(':'); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server')[0].value = part2[0]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server_port')[0].value = part2[1]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.password')[0].value = part1[1]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.encrypt_method_ss')[0].value = part1[0]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.plugin')[0].value = ""; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = ""; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = part2[0]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = part2[1]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = part1[1]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.encrypt_method_ss')[0].value = part1[0]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin')[0].value = ""; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = ""; if (param != undefined) { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); } s.innerHTML = "导入Shadowsocks配置信息成功"; } @@ -213,8 +213,8 @@ } var sstr = url0; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].value = "trojan"; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "trojan"; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); var team = sstr.split('@'); var password = team[0] var serverPart = team[1].split(':'); @@ -230,63 +230,65 @@ } } - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server')[0].value = serverPart[0]; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server_port')[0].value = port; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.password')[0].value = password; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.tls_host')[0].value = queryParam.peer || ''; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.insecure')[0].checked = queryParam.allowInsecure === '1'; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = serverPart[0]; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = port; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = password; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = queryParam.peer || ''; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = queryParam.allowInsecure === '1'; if (param != undefined) { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); } s.innerHTML = "导入Trojan配置信息成功"; return false; } else if (ssu[0] == "vmess") { var sstr = b64DecodeUnicode(ssu[1]); var ploc = sstr.indexOf("/?"); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].value = "v2ray"; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "v2ray"; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); var url0, param = ""; if (ploc > 0) { url0 = sstr.substr(0, ploc); param = sstr.substr(ploc + 2); } var ssm = JSON.parse(sstr); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.alias')[0].value = ssm.ps; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server')[0].value = ssm.add; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.server_port')[0].value = ssm.port; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.alter_id')[0].value = ssm.aid; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.vmess_id')[0].value = ssm.id; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.transport')[0].value = ssm.net; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.transport')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = ssm.ps; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = ssm.add; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.server_port')[0].value = ssm.port; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.alter_id')[0].value = ssm.aid; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.vmess_id')[0].value = ssm.id; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.transport')[0].value = ssm.net; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.transport')[0].dispatchEvent(event); if (ssm.net == "tcp") { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.http_host')[0].value = ssm.host; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.http_path')[0].value = ssm.path; + if (ssm.type && ssm.type != "http") {ssm.type = "none"} + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tcp_guise')[0].value = ssm.type; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.http_host')[0].value = ssm.host; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.http_path')[0].value = ssm.path; } if (ssm.net == "ws") { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.ws_host')[0].value = ssm.host; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.ws_path')[0].value = ssm.path; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.ws_host')[0].value = ssm.host; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.ws_path')[0].value = ssm.path; } if (ssm.net == "h2") { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.h2_host')[0].value = ssm.host; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.h2_path')[0].value = ssm.path; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.h2_host')[0].value = ssm.host; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.h2_path')[0].value = ssm.path; } if (ssm.net == "quic") { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.quic_security')[0].value = ssm.securty; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.quic_key')[0].value = ssm.key; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.quic_security')[0].value = ssm.securty; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.quic_key')[0].value = ssm.key; } if (ssm.net == "kcp") { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.kcp_guise')[0].value = ssm.type; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.kcp_guise')[0].value = ssm.type; } if (ssm.tls == "tls") { - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.tls_host')[0].value = ssm.host; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].checked = true; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls_host')[0].value = ssm.host; } - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.mux')[0].checked = true; - document.getElementsByName('widget.cbid.shadowsocksr.' + sid + '.mux')[0].dispatchEvent(event); + document.getElementsByName('cbid.shadowsocksr.' + sid + '.mux')[0].checked = true; + document.getElementsByName('cbid.shadowsocksr.' + sid + '.mux')[0].dispatchEvent(event); s.innerHTML = "导入V2ray配置信息成功"; return false; } diff --git a/package/lean/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po b/package/lean/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po index 6052702dab..7676547003 100644 --- a/package/lean/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po +++ b/package/lean/luci-app-ssr-plus/po/zh_Hans/ssr-plus.po @@ -61,9 +61,21 @@ msgstr "密码" msgid "Encrypt Method" msgstr "加密方式" +msgid "Transport" +msgstr "传输协议" + msgid "Protocol" msgstr "传输协议" +msgid "allowInsecure" +msgstr "允许不安全连接" + +msgid "Concurrency" +msgstr "最大并发连接数" + +msgid "If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates." +msgstr "是否允许不安全连接。当选择时,将不会检查远端主机所提供的 TLS 证书的有效性。" + msgid "Protocol param(optional)" msgstr "传输协议参数(可选)" @@ -657,3 +669,9 @@ msgstr "本机服务端" msgid "Global SOCKS5 Proxy Server" msgstr "SOCKS5 代理服务端(全局)" + +msgid "warning! Please do not reuse the port!" +msgstr "警告!请不要重复使用端口!" + +msgid "Deny Domain List" +msgstr "禁止连接的域名" diff --git a/package/lean/luci-app-ssr-plus/root/etc/config/black.list b/package/lean/luci-app-ssr-plus/root/etc/config/black.list deleted file mode 100644 index e60cdc3a10..0000000000 --- a/package/lean/luci-app-ssr-plus/root/etc/config/black.list +++ /dev/null @@ -1,58 +0,0 @@ -1dot1dot1dot1.cloudflare-dns.com -91smartyun.pt -adobe.com -amazonaws.com -ampproject.org -apple.news -aws.amazon.com -azureedge.net -backpackers.com.tw -bitfinex.com -buzzfeed.com -clockwise.ee -cloudflare-dns.com -cloudfront.net -coindesk.com -coinsquare.io -cryptocompare.com -dns.google -dns9.quad9.net -doh.opendns.com -dropboxstatic.com -eurecom.fr -gdax.com -github.com -kknews.cc -nutaq.com -openairinterface.org -skype.com -sublimetext.com -textnow.com -textnow.me -trouter.io -uploaded.net -whatsapp.com -whatsapp.net -wsj.net -google.com -google.com.hk -gstatic.com -googleusercontent.com -googlepages.com -googlevideo.com -googlecode.com -googleapis.com -googlesource.com -googledrive.com -ggpht.com -youtube.com -youtu.be -ytimg.com -twitter.com -facebook.com -fastly.net -akamai.net -akamaiedge.net -akamaihd.net -edgesuite.net -edgekey.net diff --git a/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr b/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr index 7e2789232a..4329c7839e 100644 --- a/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr +++ b/package/lean/luci-app-ssr-plus/root/etc/config/shadowsocksr @@ -6,38 +6,32 @@ config global option dports '2' option pdnsd_enable '1' option monitor_enable '1' - option global_server 'nil' option enable_switch '1' option switch_timeout '5' option switch_time '667' option switch_try_count '3' - option gfwlist_url 'https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt' + option gfwlist_url 'https://cdn.jsdelivr.net/gh/Loukky/gfwlist-by-loukky/gfwlist.txt' option chnroute_url 'https://ispip.clang.cn/all_cn.txt' - option nfip_url 'https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt' + option nfip_url 'https://cdn.jsdelivr.net/gh/QiuSimons/Netflix_IP/getflix.txt' option adblock_url 'https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf' - option netflix_server 'same' option threads '0' - -config socks5_proxy - option socks '0' - option local_port '1080' - option local_address '0.0.0.0' + option global_server 'disable' + option netflix_server 'nil' + option netflix_proxy '0' config access_control - option wan_bp_list '/etc/china_ssr.txt' - option lan_ac_mode 'b' + option lan_ac_mode '0' option router_proxy '1' list wan_fw_ips '149.154.160.0/20' list wan_fw_ips '67.198.55.0/24' list wan_fw_ips '91.108.4.0/22' list wan_fw_ips '91.108.56.0/22' list wan_fw_ips '109.239.140.0/24' - list wan_fw_ips '1.1.1.1/32' - list wan_fw_ips '1.0.0.1/32' - list wan_fw_ips '8.8.8.8/32' - list wan_fw_ips '8.8.4.4/32' - list wan_fw_ips '9.9.9.9/32' - list wan_fw_ips '146.112.41.2/32' + +config socks5_proxy + option socks '0' + option local_port '1080' + option local_address '0.0.0.0' config server_global option enable_server '0' diff --git a/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr index f45565ecd6..aa6f6cf9d7 100755 --- a/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr +++ b/package/lean/luci-app-ssr-plus/root/etc/init.d/shadowsocksr @@ -10,10 +10,11 @@ START=95 STOP=15 - SERVICE_DAEMONIZE=1 -NAME=shadowsocksr EXTRA_COMMANDS=rules +MAXFD=32768 +NAME=shadowsocksr +LOCK_FILE=/var/lock/${NAME}.lock CONFIG_FILE=/var/etc/${NAME}.json CONFIG_UDP_FILE=/var/etc/${NAME}_u.json CONFIG_SOCK5_FILE=/var/etc/${NAME}_s.json @@ -28,7 +29,6 @@ kcp_flag=0 pdnsd_enable_flag=0 switch_enable=0 switch_server=$1 -MAXFD=32768 CRON_FILE=/etc/crontabs/root threads=1 @@ -42,33 +42,48 @@ uci_get_by_type() { echo ${ret:=$3} } +uci_set_by_name() { + uci set $NAME.$1.$2=$3 2>/dev/null + uci commit $NAME +} + +uci_set_by_type() { + uci set $NAME.@$1[0].$2=$3 2>/dev/null + uci commit $NAME +} + uci_get_by_cfgid() { local ret=$(uci show $NAME.@$1[0].$2 | awk -F '.' '{print $2}' 2>/dev/null) echo ${ret:=$3} } -check_host() { +get_host_ip() { local host=$1 - if echo $host | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - hostip=$host - elif [ "$host" != "${host#*:[0-9a-fA-F]}" ]; then - hostip=$host - else - hostip=$(ping $host -W 1 -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1) - if echo $hostip | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - hostip=$hostip + local isip="" + local ip=$host + isip=$(echo $host | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}") + if [ -z "$isip" ]; then + if [ "$host" != "${host#*:[0-9a-fA-F]}" ]; then + ip=$host else - hostip="127.0.0.1" + local ip=$(resolveip -4 -t 3 $host | awk 'NR==1{print}') + [ -z "$ip" ] && ip=$(wget -q -O- http://119.29.29.29/d?dn=$1 | awk -F ';' '{print $1}') fi fi - echo -e $hostip + echo ${ip:="ERROR"} +} + +clean_log() { + logsnum=$(cat /tmp/ssrplus.log 2>/dev/null | wc -l) + [ "$logsnum" -gt 1000 ] && { + echo "$(date "+%Y-%m-%d %H:%M:%S") 日志文件过长,清空处理!" >/tmp/ssrplus.log + } } add_cron() { + touch $CRON_FILE sed -i '/shadowsocksr/d' $CRON_FILE - sed -i '/ssrplus.log/d' $CRON_FILE && echo '0 1 * * * echo "" > /tmp/ssrplus.log' >>$CRON_FILE - [ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/share/shadowsocksr/ssrplusupdate.sh >> /tmp/ssrplus.log 2>&1" >>$CRON_FILE - + [ $(uci_get_by_type server_subscribe auto_update 0) -eq 1 ] && echo "0 $(uci_get_by_type server_subscribe auto_update_time) * * * /usr/share/shadowsocksr/ssrplusupdate.sh >>/tmp/ssrplus.log 2>&1" >>$CRON_FILE crontab $CRON_FILE } @@ -76,41 +91,58 @@ del_cron() { sed -i '/shadowsocksr/d' $CRON_FILE sed -i '/ssrplus.log/d' $CRON_FILE /etc/init.d/cron restart + clean_log } -run_mode=$(uci_get_by_type global run_mode) +unlock() { + failcount=1 + while [ "$failcount" -le 10 ]; do + if [ -f "$LOCK_FILE" ]; then + let "failcount++" + sleep 1s + [ "$failcount" -ge 10 ] && rm -f "$LOCK_FILE" + else + break + fi + done +} + +find_bin() { + case "$1" in + ss) ret="/usr/bin/ss-redir" ;; + ss-local) ret="/usr/bin/ss-local" ;; + ssr) ret="/usr/bin/ssr-redir" ;; + ssr-local) ret="/usr/bin/ssr-local" ;; + ssr-server) ret="/usr/bin/ssr-server" ;; + v2ray) ret="/usr/bin/v2ray/v2ray" && [ ! -f "$ret" ] && ret="/usr/bin/v2ray" ;; + trojan) ret="/usr/sbin/trojan" ;; + socks5 | tun) ret="/usr/sbin/redsocks2" ;; + esac + echo $ret +} gen_config_file() { - local host=$(uci_get_by_name $1 server) - if echo $host | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - hostip=$host - elif [ "$host" != "${host#*:[0-9a-fA-F]}" ]; then - hostip=$host + local hostip=$(get_host_ip $(uci_get_by_name $1 server)) + if [ "$hostip" == "ERROR" ]; then + hostip=$(uci_get_by_name $1 ip) else - hostip=$(ping $host -W 1 -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1) - if echo $hostip | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - hostip=$hostip - else - hostip=$(cat /etc/ssr_ip) - fi + uci_set_by_name $1 ip $hostip fi [ "$2" == "0" -a "$kcp_flag" == "1" ] && hostip="127.0.0.1" - if [ "$2" == "0" ]; then - config_file=$CONFIG_FILE - elif [ "$2" == "1" ]; then - config_file=$CONFIG_UDP_FILE - elif [ "$2" == "2" ]; then - config_file=$CONFIG_NETFLIX_FILE - else - config_file=$CONFIG_SOCK5_FILE - fi + case "$2" in + 0) config_file=$CONFIG_FILE ;; + 1) config_file=$CONFIG_UDP_FILE ;; + 2) config_file=$CONFIG_NETFLIX_FILE ;; + *) config_file=$CONFIG_SOCK5_FILE ;; + esac if [ $(uci_get_by_name $1 fast_open 0) == "1" ]; then fastopen="true" else fastopen="false" fi - local stype=$(uci_get_by_name $1 type) - if [ "$stype" == "ss" ]; then + local type=$(uci_get_by_name $1 type) + case "$type" in + ss) cat <<-EOF >$config_file { "server": "$hostip", @@ -126,16 +158,15 @@ gen_config_file() { EOF local plugin=$(uci_get_by_name $1 plugin) if [ -n "$plugin" ]; then - if [ "$plugin" == "simple-obfs" ]; then - plugin="obfs-local" - fi + [ "$plugin" == "simple-obfs" ] && plugin="obfs-local" if [ -x "/usr/bin/$plugin" ]; then sed -i "s@$hostip\",@$hostip\",\n\"plugin\": \"$plugin\",\n\"plugin_opts\": \"$(uci_get_by_name $1 plugin_opts)\",@" $config_file else echo "$(date "+%Y-%m-%d %H:%M:%S") Warning!!! SIP003 plugin $plugin not found!!!" >>/tmp/ssrplus.log fi fi - elif [ "$stype" == "ssr" ]; then + ;; + ssr) cat <<-EOF >$config_file { "server": "$hostip", @@ -153,357 +184,18 @@ gen_config_file() { "fast_open": $fastopen } EOF - elif [ "$stype" == "v2ray" ]; then + ;; + v2ray) lua /usr/share/shadowsocksr/genv2config.lua $GLOBAL_SERVER tcp $(uci_get_by_name $1 local_port) >/var/etc/v2-ssr-retcp.json sed -i 's/\\//g' /var/etc/v2-ssr-retcp.json - elif [ "$stype" == "trojan" ]; then + ;; + trojan) lua /usr/share/shadowsocksr/gentrojanconfig.lua $GLOBAL_SERVER nat $(uci_get_by_name $1 local_port) >/var/etc/trojan-ssr-retcp.json sed -i 's/\\//g' /var/etc/trojan-ssr-retcp.json - fi -} - -get_arg_out() { - case "$(uci_get_by_type access_control router_proxy 1)" in - 1) echo "-o" ;; - 2) echo "-O" ;; + ;; esac } -start_rules() { - local server=$(uci_get_by_name $GLOBAL_SERVER server) - #resolve name - if echo $server | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - server=$server - elif [ "$server" != "${server#*:[0-9a-fA-F]}" ]; then - server=$server - else - server=$(ping $server -W 1 -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1) - if echo $server | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - echo $server >/etc/ssr_ip - else - server=$(cat /etc/ssr_ip) - fi - fi - kcp_server=$server - local kcp_enable=$(uci_get_by_name $GLOBAL_SERVER kcp_enable 0) - if [ $kcp_enable == "1" ]; then - kcp_flag=1 - fi - local local_port=$(uci_get_by_name $GLOBAL_SERVER local_port) - local lan_ac_ips=$(uci_get_by_type access_control lan_ac_ips) - local lan_ac_mode=$(uci_get_by_type access_control lan_ac_mode) - local router_proxy=$(uci_get_by_type access_control router_proxy) - if [ "$GLOBAL_SERVER" == "$UDP_RELAY_SERVER" -a "$kcp_flag" == "0" ]; then - ARG_UDP="-u" - elif [ -n "$UDP_RELAY_SERVER" ]; then - ARG_UDP="-U" - local udp_server=$(uci_get_by_name $UDP_RELAY_SERVER server) - local udp_local_port=$(uci_get_by_name $UDP_RELAY_SERVER local_port) - fi - if [ -n "$lan_ac_ips" ]; then - case "$lan_ac_mode" in - w | W | b | B) local ac_ips="$lan_ac_mode$lan_ac_ips" ;; - esac - fi - - #deal gfw firewall rule - local gfwmode="" - if [ "$run_mode" == "gfw" ]; then - gfwmode="-g" - elif [ "$run_mode" == "router" ]; then - gfwmode="-r" - elif [ "$run_mode" == "oversea" ]; then - gfwmode="-c" - elif [ "$run_mode" == "all" ]; then - gfwmode="-z" - fi - local dports=$(uci_get_by_type global dports 1) - if [ $dports == "1" ]; then - proxyport=" " - else - proxyport="-m multiport --dports 22,53,587,465,995,993,143,80,443" - fi - if [ "$NETFLIX_SERVER" != "nil" ]; then - if [ "$NETFLIX_SERVER" != "$GLOBAL_SERVER" ]; then - netflix="1" - else - netflix="2" - fi - else - netflix="0" - fi - netflix_ip=$(check_host $(uci_get_by_name $NETFLIX_SERVER server 127.0.0.1)) - /usr/bin/ssr-rules \ - -s "$server" \ - -l "$local_port" \ - -S "$udp_server" \ - -L "$udp_local_port" \ - -a "$ac_ips" \ - -i "$(uci_get_by_type access_control wan_bp_list)" \ - -b "$(uci_get_by_type access_control wan_bp_ips)" \ - -w "$(uci_get_by_type access_control wan_fw_ips)" \ - -B "$(uci_get_by_type access_control lan_bp_ips)" \ - -p "$(uci_get_by_type access_control lan_fp_ips)" \ - -G "$(uci_get_by_type access_control lan_gm_ips)" \ - -D "$proxyport" \ - -F "$netflix" \ - -N "$netflix_ip" \ - -M "$(uci_get_by_type global netflix_proxy 0)" \ - $(get_arg_out) $gfwmode $ARG_UDP - return $? -} - -start_pdnsd() { - local usr_dns="$1" - local usr_port="$2" - local tcp_dns_list="208.67.222.222, 208.67.220.220" - [ -z "$usr_dns" ] && usr_dns="8.8.8.8" - [ -z "$usr_port" ] && usr_port="53" - [ -d /var/etc ] || mkdir -p /var/etc - if [ ! -d /var/pdnsd ]; then - mkdir -p /var/pdnsd - echo -ne "pd13\000\000\000\000" >/var/pdnsd/pdnsd.cache - chown -R nobody:nogroup /var/pdnsd - fi - cat <<-EOF >/var/etc/pdnsd.conf - global{ - perm_cache=1024; - cache_dir="/var/pdnsd"; - pid_file="/var/run/pdnsd.pid"; - run_as="nobody"; - server_ip=127.0.0.1; - server_port=5335; - status_ctl=on; - query_method=tcp_only; - min_ttl=1h; - max_ttl=1w; - timeout=10; - neg_domain_pol=on; - proc_limit=2; - procq_limit=8; - par_queries=1; - } - server{ - label="ssr-usrdns"; - ip=$usr_dns; - port=$usr_port; - timeout=6; - uptest=none; - interval=10m; - purge_cache=off; - } - EOF - /usr/sbin/pdnsd -c /var/etc/pdnsd.conf & -} - -start_redir() { - case "$(uci_get_by_name $GLOBAL_SERVER auth_enable)" in - 1 | on | true | yes | enabled) ARG_OTA="-A" ;; - *) ARG_OTA="" ;; - esac - #deal kcp - local kcp_enable=$(uci_get_by_name $GLOBAL_SERVER kcp_enable 0) - if [ "$kcp_enable" == "1" ]; then - [ ! -f "/usr/bin/kcptun-client" ] && return 1 - local kcp_str=$(/usr/bin/kcptun-client -v | grep kcptun | wc -l) - [ "0" == "$kcp_str" ] && return 1 - local kcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) - local server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) - local password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) - local kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) - [ "$password" != "" ] && password="--key "$password - service_start /usr/bin/kcptun-client \ - -r $kcp_server:$kcp_port \ - -l :$server_port $password $kcp_param - kcp_enable_flag=1 - fi - - gen_config_file $GLOBAL_SERVER 0 $(uci_get_by_name $GLOBAL_SERVER local_port 1234) - local stype=$(uci_get_by_name $GLOBAL_SERVER type) - if [ "$stype" == "ss" ]; then - sscmd="/usr/bin/ss-redir" - elif [ "$stype" == "ssr" ]; then - sscmd="/usr/bin/ssr-redir" - elif [ "$stype" == "v2ray" ]; then - sscmd="/usr/bin/v2ray/v2ray" - [ ! -f "$sscmd" ] && sscmd="/usr/bin/v2ray" - elif [ "$stype" == "trojan" ]; then - sscmd="/usr/sbin/trojan" - elif [ "$stype" == "socks5" ]; then - sscmd="/usr/sbin/redsocks2" - elif [ "$stype" == "tun" ]; then - sscmd="/usr/sbin/redsocks2" - fi - - local ntype=$(uci_get_by_name $NETFLIX_SERVER type) - if [ "$ntype" == "ss" ]; then - ncmd="/usr/bin/ss-redir" - sssock="/usr/bin/ss-local" - elif [ "$ntype" == "ssr" ]; then - ncmd="/usr/bin/ssr-redir" - sssock="/usr/bin/ssr-local" - elif [ "$ntype" == "v2ray" ]; then - ncmd="/usr/bin/v2ray/v2ray" - [ ! -f "$ncmd" ] && ncmd="/usr/bin/v2ray" - elif [ "$ntype" == "trojan" ]; then - ncmd="/usr/sbin/trojan" - elif [ "$ntype" == "socks5" ]; then - ncmd="/usr/sbin/redsocks2" - elif [ "$ntype" == "tun" ]; then - ncmd="/usr/sbin/redsocks2" - fi - - local utype=$(uci_get_by_name $UDP_RELAY_SERVER type) - if [ "$utype" == "ss" ]; then - ucmd="/usr/bin/ss-redir" - elif [ "$utype" == "ssr" ]; then - ucmd="/usr/bin/ssr-redir" - elif [ "$utype" == "v2ray" ]; then - ucmd="/usr/bin/v2ray/v2ray" - [ ! -f "$ucmd" ] && ucmd="/usr/bin/v2ray" - elif [ "$utype" == "trojan" ]; then - ucmd="/usr/sbin/trojan" - elif [ "$stype" == "socks5" ]; then - ucmd="/usr/sbin/redsocks2" - elif [ "$stype" == "tun" ]; then - ucmd="/usr/sbin/redsocks2" - fi - if [ "$(uci_get_by_type global threads 0)" == "0" ]; then - threads=$(cat /proc/cpuinfo | grep 'processor' | wc -l) - else - threads=$(uci_get_by_type global threads) - fi - - if [ "$stype" == "ss" -o "$stype" == "ssr" ]; then - local last_config_file=$CONFIG_FILE - local pid_file="/var/run/ssr-retcp.pid" - for i in $(seq 1 $threads); do - $sscmd -c $CONFIG_FILE $ARG_OTA -f /var/run/ssr-retcp_$i.pid >/dev/null 2>&1 - done - echo "$(date "+%Y-%m-%d %H:%M:%S") Shadowsocks/ShadowsocksR $threads Threads Started!" >>/tmp/ssrplus.log - elif [ "$stype" == "v2ray" ]; then - $sscmd -config /var/etc/v2-ssr-retcp.json >/dev/null 2>&1 & - echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd -version | head -1) Started!" >>/tmp/ssrplus.log - elif [ "$stype" == "trojan" ]; then - for i in $(seq 1 $threads); do - $sscmd --config /var/etc/trojan-ssr-retcp.json >/dev/null 2>&1 & - done - echo "$(date "+%Y-%m-%d %H:%M:%S") $($sscmd --version 2>&1 | head -1) , $threads Threads Started!" >>/tmp/ssrplus.log - elif [ "$stype" == "socks5" ]; then - /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-retcp.conf" socks5 tcp $(uci_get_by_name $GLOBAL_SERVER local_port) \ - $(check_host $(uci_get_by_name $GLOBAL_SERVER server)) $(uci_get_by_name $GLOBAL_SERVER server_port) \ - $(uci_get_by_name $GLOBAL_SERVER auth_enable 0) $(uci_get_by_name $GLOBAL_SERVER username) $(uci_get_by_name $GLOBAL_SERVER password) - for i in $(seq 1 $threads); do - $sscmd -c /var/etc/redsocks-ssr-retcp.conf >/dev/null 2>&1 - done - echo "$(date "+%Y-%m-%d %H:%M:%S") Socks5 REDIRECT/TPROXY $threads Threads Started!" >>/tmp/ssrplus.log - elif [ "$stype" == "tun" ]; then - /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-retcp.conf" vpn $(uci_get_by_name $GLOBAL_SERVER iface "br-lan") $(uci_get_by_name $GLOBAL_SERVER local_port) - for i in $(seq 1 $threads); do - $sscmd -c /var/etc/redsocks-ssr-retcp.conf >/dev/null 2>&1 - done - echo "$(date "+%Y-%m-%d %H:%M:%S") Network Tunnel REDIRECT $threads Threads Started!" >>/tmp/ssrplus.log - fi - - if [ "$NETFLIX_SERVER" != "nil" ] && [ "$NETFLIX_SERVER" != "$GLOBAL_SERVER" ]; then - if [ "$ntype" == "ss" -o "$ntype" == "ssr" ]; then - gen_config_file $NETFLIX_SERVER 2 4321 - gen_config_file $NETFLIX_SERVER 3 1088 - $sssock -c /var/etc/shadowsocksr_s.json $ARG_OTA -f /var/run/ssr-socksdns.pid >/dev/null 2>&1 - dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & - $ncmd -c /var/etc/shadowsocksr_n.json $ARG_OTA -f /var/run/ssr-netflix.pid >/dev/null 2>&1 - elif [ "$ntype" == "v2ray" ]; then - lua /usr/share/shadowsocksr/genv2config.lua $NETFLIX_SERVER tcp 4321 1088 >/var/etc/v2-ssr-netflix.json - $ncmd -config /var/etc/v2-ssr-netflix.json >/dev/null 2>&1 & - dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & - elif [ "$ntype" == "trojan" ]; then - lua /usr/share/shadowsocksr/gentrojanconfig.lua $NETFLIX_SERVER nat 4321 >/var/etc/trojan-ssr-netflix.json - sed -i 's/\\//g' /var/etc/trojan-ssr-netflix.json - $ncmd --config /var/etc/trojan-ssr-netflix.json >/dev/null 2>&1 & - lua /usr/share/shadowsocksr/gentrojanconfig.lua $NETFLIX_SERVER client 1088 >/var/etc/trojan-ssr-socksdns.json - sed -i 's/\\//g' /var/etc/trojan-ssr-socksdns.json - $ncmd --config /var/etc/trojan-ssr-socksdns.json >/dev/null 2>&1 & - dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & - elif [ "$ntype" == "socks5" ]; then - /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-netflix.conf" socks5 tcp 4321 \ - $(check_host $(uci_get_by_name $NETFLIX_SERVER server)) $(uci_get_by_name $NETFLIX_SERVER server_port) \ - $(uci_get_by_name $NETFLIX_SERVER auth_enable 0) $(uci_get_by_name $NETFLIX_SERVER username) $(uci_get_by_name $NETFLIX_SERVER password) - $ncmd -c /var/etc/redsocks-ssr-netflix.conf >/dev/null 2>&1 - microsocks -i 127.0.0.1 -p 1088 ssr-socksdns >/dev/null 2>&1 & - dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & - elif [ "$ntype" == "tun" ]; then - /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-netflix.conf" vpn $(uci_get_by_name $NETFLIX_SERVER iface "br-lan") 4321 - $ncmd -c /var/etc/redsocks-ssr-netflix.conf >/dev/null 2>&1 - microsocks -i 127.0.0.1 -p 1088 ssr-socksdns >/dev/null 2>&1 & - dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & - fi - fi - - if [ -n "$UDP_RELAY_SERVER" ]; then - if [ "$utype" == "ss" -o "$utype" == "ssr" ]; then - case "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable)" in - 1 | on | true | yes | enabled) ARG_OTA="-A" ;; - *) ARG_OTA="" ;; - esac - gen_config_file $UDP_RELAY_SERVER 1 $(uci_get_by_name $UDP_RELAY_SERVER local_port 1234) - last_config_file=$CONFIG_UDP_FILE - pid_file="/var/run/ssr-reudp.pid" - $ucmd -c $last_config_file $ARG_OTA -U -f /var/run/ssr-reudp.pid >/dev/null 2>&1 - elif [ "$utype" == "v2ray" ]; then - lua /usr/share/shadowsocksr/genv2config.lua $UDP_RELAY_SERVER udp $(uci_get_by_name $UDP_RELAY_SERVER local_port) >/var/etc/v2-ssr-reudp.json - sed -i 's/\\//g' /var/etc/v2-ssr-reudp.json - $ucmd -config /var/etc/v2-ssr-reudp.json >/dev/null 2>&1 & - elif [ "$stype" == "trojan" ]; then - lua /usr/share/shadowsocksr/gentrojanconfig.lua $GLOBAL_SERVER client 10801 >/var/etc/trojan-ssr-reudp.json - sed -i 's/\\//g' /var/etc/trojan-ssr-reudp.json - $ucmd --config /var/etc/trojan-ssr-reudp.json >/dev/null 2>&1 & - ipt2socks -U -b 0.0.0.0 -4 -s 127.0.0.1 -p 10801 -l $(uci_get_by_name $UDP_RELAY_SERVER local_port) >/dev/null 2>&1 & - elif [ "$utype" == "socks5" ]; then - /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-reudp.conf" socks5 udp $(uci_get_by_name $UDP_RELAY_SERVER local_port) \ - $(check_host $(uci_get_by_name $UDP_RELAY_SERVER server)) $(uci_get_by_name $UDP_RELAY_SERVER server_port) \ - $(uci_get_by_name $UDP_RELAY_SERVER auth_enable 0) $(uci_get_by_name $UDP_RELAY_SERVER username) $(uci_get_by_name $UDP_RELAY_SERVER password) - $ucmd -c /var/etc/redsocks-ssr-reudp.conf >/dev/null 2>&1 - elif [ "$stype" == "tun" ]; then - redir_udp=0 - echo "$(date "+%Y-%m-%d %H:%M:%S") Network Tunnel UDP TPROXY Relay not supported!" >>/tmp/ssrplus.log - fi - fi - #deal with dns - local ssr_dns="$(uci_get_by_type global pdnsd_enable 0)" - local dnsstr="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)" - local dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}') - local dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}') - if [ "$ssr_dns" != "0" ]; then # not use custom dns service - if [ "$run_mode" == "gfw" ]; then - ipset add gfwlist $dnsserver 2>/dev/null - elif [ "$run_mode" == "oversea" ]; then - ipset add oversea $dnsserver 2>/dev/null - else - ipset add ss_spec_wan_ac $dnsserver nomatch 2>/dev/null - fi - fi - if [ "$ssr_dns" == "1" ]; then - start_pdnsd $dnsserver $dnsport - pdnsd_enable_flag=1 - elif [ "$ssr_dns" == "2" ]; then - microsocks -i 127.0.0.1 -p 10802 ssr-dns >/dev/null 2>&1 & - dns2socks 127.0.0.1:10802 $dnsserver:$dnsport 127.0.0.1:5335 -q >/dev/null 2>&1 & - pdnsd_enable_flag=2 - fi - if [ "$(uci_get_by_type global enable_switch)" == "1" ]; then - if [ "$(uci_get_by_name $GLOBAL_SERVER switch_enable 1)" == "1" ]; then - if [ -z "$switch_server" ]; then - local switch_time=$(uci_get_by_type global switch_time) - local switch_timeout=$(uci_get_by_type global switch_timeout) - service_start /usr/bin/ssr-switch start $switch_time $switch_timeout - switch_enable=1 - fi - fi - fi - add_cron - return $? -} - gen_service_file() { if [ $(uci_get_by_name $1 fast_open) == "1" ]; then fastopen="true" @@ -526,26 +218,6 @@ gen_service_file() { EOF } -start_service() { - [ $(uci_get_by_name $1 enable 0) == "0" ] && return 1 - let server_count=server_count+1 - if [ "$server_count" == "1" ]; then - if ! (iptables-save -t filter | grep SSR-SERVER-RULE >/dev/null); then - iptables -N SSR-SERVER-RULE && \ - iptables -t filter -I INPUT -j SSR-SERVER-RULE - fi - fi - if [ "$(uci_get_by_name $1 type ssr)" == "ssr" ]; then - gen_service_file $1 /var/etc/${NAME}_$server_count.json - /usr/bin/ssr-server -c /var/etc/${NAME}_$server_count.json -u -f /var/run/ssr-server$server_count.pid >/dev/null 2>&1 - else - microsocks -i :: -p $(uci_get_by_name $1 server_port) -1 -u $(uci_get_by_name $1 username) -P $(uci_get_by_name $1 password) ssr-server$server_count >/dev/null 2>&1 & - fi - iptables -t filter -A SSR-SERVER-RULE -p tcp --dport $(uci_get_by_name $1 server_port) -j ACCEPT - iptables -t filter -A SSR-SERVER-RULE -p udp --dport $(uci_get_by_name $1 server_port) -j ACCEPT - return 0 -} - gen_serv_include() { FWI=$(uci get firewall.shadowsocksr.path 2>/dev/null) [ -n "$FWI" ] || return 0 @@ -565,42 +237,432 @@ gen_serv_include() { EOF } -start_server() { - SERVER_ENABLE=$(uci_get_by_type server_global enable_server 0) - [ "$SERVER_ENABLE" == "0" ] && return 0 - mkdir -p /var/run /var/etc - config_load $NAME - config_foreach start_service server_config - gen_serv_include +start_dns() { + local ssr_dns="$(uci_get_by_type global pdnsd_enable 0)" + local dnsstr="$(uci_get_by_type global tunnel_forward 8.8.4.4:53)" + local dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}') + local dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}') + start_pdnsd() { + local usr_dns="$1" + local usr_port="$2" + [ -z "$usr_dns" ] && usr_dns="8.8.8.8" + [ -z "$usr_port" ] && usr_port="53" + [ -d /var/etc ] || mkdir -p /var/etc + if [ ! -f "/var/pdnsd/pdnsd.cache" ]; then + mkdir -p /var/pdnsd + touch /var/pdnsd/pdnsd.cache + chown -R nobody:nogroup /var/pdnsd + fi + cat <<-EOF >/var/etc/pdnsd.conf + global{ + perm_cache=1024; + cache_dir="/var/pdnsd"; + pid_file="/var/run/pdnsd.pid"; + run_as="nobody"; + server_ip=127.0.0.1; + server_port=5335; + status_ctl=on; + query_method=tcp_only; + min_ttl=1h; + max_ttl=1w; + timeout=10; + neg_domain_pol=on; + proc_limit=2; + procq_limit=8; + par_queries=1; + } + server{ + label="ssr-usrdns"; + ip=$usr_dns; + port=$usr_port; + timeout=6; + uptest=none; + interval=10m; + purge_cache=off; + } + EOF + /usr/sbin/pdnsd -c /var/etc/pdnsd.conf >/dev/null 2>&1 & + } + if [ "$ssr_dns" != "0" ]; then + case "$run_mode" in + gfw) ipset add gfwlist $dnsserver 2>/dev/null ;; + oversea) ipset add oversea $dnsserver 2>/dev/null ;; + *) ipset add ss_spec_wan_ac $dnsserver nomatch 2>/dev/null ;; + esac + fi + case "$ssr_dns" in + 1) + start_pdnsd $dnsserver $dnsport + pdnsd_enable_flag=1 + ;; + 2) + microsocks -i 127.0.0.1 -p 10802 ssr-dns >/dev/null 2>&1 & + dns2socks 127.0.0.1:10802 $dnsserver:$dnsport 127.0.0.1:5335 -q >/dev/null 2>&1 & + pdnsd_enable_flag=2 + ;; + esac +} + +start_redir_tcp() { + local type=$(uci_get_by_name $GLOBAL_SERVER type) + local bin=$(find_bin $type) + [ ! -f "$bin" ] && echo "$(date "+%Y-%m-%d %H:%M:%S") Main node:Can't find $bin program, can't start!" >>/tmp/ssrplus.log && return 1 + case "$(uci_get_by_name $GLOBAL_SERVER auth_enable)" in + 1 | on | true | yes | enabled) ARG_OTA="-A" ;; + *) ARG_OTA="" ;; + esac + local kcp_enable=$(uci_get_by_name $GLOBAL_SERVER kcp_enable 0) + if [ "$kcp_enable" == "1" ]; then + [ ! -f "/usr/bin/kcptun-client" ] && return 1 + local kcp_str=$(/usr/bin/kcptun-client -v | grep kcptun | wc -l) + [ "0" == "$kcp_str" ] && return 1 + local kcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) + local server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) + local password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) + local kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) + [ "$password" != "" ] && password="--key "$password + service_start /usr/bin/kcptun-client \ + -r $kcp_server:$kcp_port \ + -l :$server_port $password $kcp_param + kcp_enable_flag=1 + fi + gen_config_file $GLOBAL_SERVER 0 $(uci_get_by_name $GLOBAL_SERVER local_port 1234) + if [ "$(uci_get_by_type global threads 0)" == "0" ]; then + threads=$(cat /proc/cpuinfo | grep 'processor' | wc -l) + else + threads=$(uci_get_by_type global threads) + fi + case "$type" in + ss | ssr) + local last_config_file=$CONFIG_FILE + local name="Shadowsocks" + [ "$type" == "ssr" ] && name="ShadowsocksR" + for i in $(seq 1 $threads); do + $bin -c $CONFIG_FILE $ARG_OTA -f /var/run/ssr-retcp_$i.pid >/dev/null 2>&1 + done + echo "$(date "+%Y-%m-%d %H:%M:%S") Main node:$name $threads Threads Started!" >>/tmp/ssrplus.log + ;; + v2ray) + $bin -config /var/etc/v2-ssr-retcp.json >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Main node:$($bin -version | head -1) Started!" >>/tmp/ssrplus.log + ;; + trojan) + for i in $(seq 1 $threads); do + $bin --config /var/etc/trojan-ssr-retcp.json >/dev/null 2>&1 & + done + echo "$(date "+%Y-%m-%d %H:%M:%S") Main node:$($bin --version 2>&1 | head -1) , $threads Threads Started!" >>/tmp/ssrplus.log + ;; + socks5) + /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-retcp.conf" socks5 tcp $(uci_get_by_name $GLOBAL_SERVER local_port) \ + $(get_host_ip $(uci_get_by_name $GLOBAL_SERVER server)) $(uci_get_by_name $GLOBAL_SERVER server_port) \ + $(uci_get_by_name $GLOBAL_SERVER auth_enable 0) $(uci_get_by_name $GLOBAL_SERVER username) $(uci_get_by_name $GLOBAL_SERVER password) + for i in $(seq 1 $threads); do + $bin -c /var/etc/redsocks-ssr-retcp.conf >/dev/null 2>&1 + done + echo "$(date "+%Y-%m-%d %H:%M:%S") Main node:Socks5 REDIRECT/TPROXY $threads Threads Started!" >>/tmp/ssrplus.log + ;; + tun) + /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-retcp.conf" vpn $(uci_get_by_name $GLOBAL_SERVER iface "br-lan") $(uci_get_by_name $GLOBAL_SERVER local_port) + for i in $(seq 1 $threads); do + $bin -c /var/etc/redsocks-ssr-retcp.conf >/dev/null 2>&1 + done + echo "$(date "+%Y-%m-%d %H:%M:%S") Main node:Network Tunnel REDIRECT $threads Threads Started!" >>/tmp/ssrplus.log + ;; + esac + return 0 +} + +start_redir_udp() { + if [ -n "$UDP_RELAY_SERVER" ]; then + local type=$(uci_get_by_name $UDP_RELAY_SERVER type) + local bin=$(find_bin $type) + [ ! -f "$bin" ] && echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay:Can't find $bin program, can't start!" >>/tmp/ssrplus.log && return 1 + case "$type" in + ss | ssr) + case "$(uci_get_by_name $UDP_RELAY_SERVER auth_enable)" in + 1 | on | true | yes | enabled) ARG_OTA="-A" ;; + *) ARG_OTA="" ;; + esac + local name="Shadowsocks" + [ "$type" == "ssr" ] && name="ShadowsocksR" + gen_config_file $UDP_RELAY_SERVER 1 $(uci_get_by_name $UDP_RELAY_SERVER local_port 1234) + last_config_file=$CONFIG_UDP_FILE + $bin -c $last_config_file $ARG_OTA -U -f /var/run/ssr-reudp.pid >/dev/null 2>&1 + echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay:$name Started!" >>/tmp/ssrplus.log + ;; + v2ray) + lua /usr/share/shadowsocksr/genv2config.lua $UDP_RELAY_SERVER udp $(uci_get_by_name $UDP_RELAY_SERVER local_port) >/var/etc/v2-ssr-reudp.json + sed -i 's/\\//g' /var/etc/v2-ssr-reudp.json + $bin -config /var/etc/v2-ssr-reudp.json >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay:$($bin -version | head -1) Started!" >>/tmp/ssrplus.log + ;; + trojan) + lua /usr/share/shadowsocksr/gentrojanconfig.lua $GLOBAL_SERVER client 10801 >/var/etc/trojan-ssr-reudp.json + sed -i 's/\\//g' /var/etc/trojan-ssr-reudp.json + $bin --config /var/etc/trojan-ssr-reudp.json >/dev/null 2>&1 & + ipt2socks -U -b 0.0.0.0 -4 -s 127.0.0.1 -p 10801 -l $(uci_get_by_name $UDP_RELAY_SERVER local_port) >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay:$($bin --version 2>&1 | head -1) Started!" >>/tmp/ssrplus.log + ;; + socks5) + /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-reudp.conf" socks5 udp $(uci_get_by_name $UDP_RELAY_SERVER local_port) \ + $(get_host_ip $(uci_get_by_name $UDP_RELAY_SERVER server)) $(uci_get_by_name $UDP_RELAY_SERVER server_port) \ + $(uci_get_by_name $UDP_RELAY_SERVER auth_enable 0) $(uci_get_by_name $UDP_RELAY_SERVER username) $(uci_get_by_name $UDP_RELAY_SERVER password) + $bin -c /var/etc/redsocks-ssr-reudp.conf >/dev/null 2>&1 + echo "$(date "+%Y-%m-%d %H:%M:%S") UDP TPROXY Relay:Socks5 REDIRECT/TPROXY Started!" >>/tmp/ssrplus.log + ;; + tun) + redir_udp=0 + echo "$(date "+%Y-%m-%d %H:%M:%S") Network Tunnel UDP TPROXY Relay not supported!" >>/tmp/ssrplus.log + ;; + esac + fi + return 0 +} + +start_shunt() { + if [ "$NETFLIX_SERVER" != "nil" ] && [ "$NETFLIX_SERVER" != "$GLOBAL_SERVER" ]; then + local type=$(uci_get_by_name $NETFLIX_SERVER type) + local bin=$(find_bin $type) + [ ! -f "$bin" ] && echo "$(date "+%Y-%m-%d %H:%M:%S") Netflix shunt:Can't find $bin program, can't start!" >>/tmp/ssrplus.log && return 1 + case "$type" in + ss | ssr) + local bin2=$(find_bin $type-local) + [ ! -f "$bin2" ] && echo "$(date "+%Y-%m-%d %H:%M:%S") Netflix shunt:Can't find $bin2 program, can't start!" >>/tmp/ssrplus.log && return 2 + local name="Shadowsocks" + [ "$type" == "ssr" ] && name="ShadowsocksR" + gen_config_file $NETFLIX_SERVER 2 4321 + gen_config_file $NETFLIX_SERVER 3 1088 + $bin -c /var/etc/shadowsocksr_n.json $ARG_OTA -f /var/run/ssr-netflix.pid >/dev/null 2>&1 + $bin2 -c /var/etc/shadowsocksr_s.json $ARG_OTA -f /var/run/ssr-socksdns.pid >/dev/null 2>&1 + dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Netflix shunt:$name Started!" >>/tmp/ssrplus.log + ;; + v2ray) + lua /usr/share/shadowsocksr/genv2config.lua $NETFLIX_SERVER tcp 4321 1088 >/var/etc/v2-ssr-netflix.json + $bin -config /var/etc/v2-ssr-netflix.json >/dev/null 2>&1 & + dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Netflix shunt:$($bin -version | head -1) Started!" >>/tmp/ssrplus.log + ;; + trojan) + lua /usr/share/shadowsocksr/gentrojanconfig.lua $NETFLIX_SERVER nat 4321 >/var/etc/trojan-ssr-netflix.json + sed -i 's/\\//g' /var/etc/trojan-ssr-netflix.json + $bin --config /var/etc/trojan-ssr-netflix.json >/dev/null 2>&1 & + lua /usr/share/shadowsocksr/gentrojanconfig.lua $NETFLIX_SERVER client 1088 >/var/etc/trojan-ssr-socksdns.json + sed -i 's/\\//g' /var/etc/trojan-ssr-socksdns.json + $bin --config /var/etc/trojan-ssr-socksdns.json >/dev/null 2>&1 & + dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Netflix shunt:$($bin --version 2>&1 | head -1) Started!" >>/tmp/ssrplus.log + ;; + socks5) + /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-netflix.conf" socks5 tcp 4321 \ + $(get_host_ip $(uci_get_by_name $NETFLIX_SERVER server)) $(uci_get_by_name $NETFLIX_SERVER server_port) \ + $(uci_get_by_name $NETFLIX_SERVER auth_enable 0) $(uci_get_by_name $NETFLIX_SERVER username) $(uci_get_by_name $NETFLIX_SERVER password) + $bin -c /var/etc/redsocks-ssr-netflix.conf >/dev/null 2>&1 + microsocks -i 127.0.0.1 -p 1088 ssr-socksdns >/dev/null 2>&1 & + dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Netflix shunt:Socks5 Started!" >>/tmp/ssrplus.log + ;; + tun) + /usr/share/shadowsocksr/genred2config.sh "/var/etc/redsocks-ssr-netflix.conf" vpn $(uci_get_by_name $NETFLIX_SERVER iface "br-lan") 4321 + $bin -c /var/etc/redsocks-ssr-netflix.conf >/dev/null 2>&1 + microsocks -i 127.0.0.1 -p 1088 ssr-socksdns >/dev/null 2>&1 & + dns2socks 127.0.0.1:1088 8.8.8.8:53 127.0.0.1:5555 -q >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Netflix shunt:Network Tunnel REDIRECT Started!" >>/tmp/ssrplus.log + ;; + esac + fi return 0 } start_local() { local local_server=$(uci_get_by_type socks5_proxy server nil) - [ "$local_server" == "same" ] && local_server=$GLOBAL_SERVER [ "$local_server" == "nil" ] && return 1 - local local_type=$(uci_get_by_name $local_server type) - mkdir -p /var/run /var/etc - - if [ "$local_type" == "ssr" ]; then + [ "$local_server" == "same" ] && local_server=$GLOBAL_SERVER + local type=$(uci_get_by_name $local_server type) + local bin=$(find_bin $type) + [ ! -f "$bin" ] && echo "$(date "+%Y-%m-%d %H:%M:%S") Global_Socks5:Can't find $bin program, can't start!" >>/tmp/ssrplus.log && return 1 + case "$type" in + ss | ssr) + local name="Shadowsocks" + local bin=$(find_bin $type-local) + [ ! -f "$bin" ] && echo "$(date "+%Y-%m-%d %H:%M:%S") Global_Socks5:Can't find $bin program, can't start!" >>/tmp/ssrplus.log && return 1 + [ "$type" == "ssr" ] && name="ShadowsocksR" gen_config_file $local_server 3 $(uci_get_by_type socks5_proxy local_port 1080) - /usr/bin/ssr-local -c $CONFIG_SOCK5_FILE -u -f /var/run/ssr-local.pid >/dev/null 2>&1 - elif [ "$local_type" == "ss" ]; then - gen_config_file $local_server 3 $(uci_get_by_type socks5_proxy local_port 1080) - /usr/bin/ss-local -c $CONFIG_SOCK5_FILE -u -f /var/run/ssr-local.pid >/dev/null 2>&1 - elif [ "$local_type" == "v2ray" ]; then + $bin -c $CONFIG_SOCK5_FILE -u -f /var/run/ssr-local.pid >/dev/null 2>&1 + echo "$(date "+%Y-%m-%d %H:%M:%S") Global_Socks5:$name Started!" >>/tmp/ssrplus.log + ;; + v2ray) lua /usr/share/shadowsocksr/genv2config.lua $local_server tcp 0 $(uci_get_by_type socks5_proxy local_port 1080) >/var/etc/v2-ssr-local.json sed -i 's/\\//g' /var/etc/v2-ssr-local.json - /usr/bin/v2ray/v2ray -config /var/etc/v2-ssr-local.json >/dev/null 2>&1 & - elif [ "$local_type" == "trojan" ]; then + $bin -config /var/etc/v2-ssr-local.json >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Global_Socks5:$($bin -version | head -1) Started!" >>/tmp/ssrplus.log + ;; + trojan) lua /usr/share/shadowsocksr/gentrojanconfig.lua $local_server client $(uci_get_by_type socks5_proxy local_port 1080) >/var/etc/trojan-ssr-local.json sed -i 's/\\//g' /var/etc/trojan-ssr-local.json - /usr/sbin/trojan --config /var/etc/trojan-ssr-local.json >/dev/null 2>&1 & - else - microsocks -i :: -p $(uci_get_by_type socks5_proxy local_port 1080) ssr-local >/dev/null 2>&1 & - fi - + $bin --config /var/etc/trojan-ssr-local.json >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Global_Socks5:$($bin --version 2>&1 | head -1) Started!" >>/tmp/ssrplus.log + ;; + *) + [ -e /proc/sys/net/ipv6 ] && local listenip='-i ::' + microsocks $listenip -p $(uci_get_by_type socks5_proxy local_port 1080) ssr-local >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Global_Socks5:$type Started!" >>/tmp/ssrplus.log + ;; + esac local_enable=1 + return 0 +} + +start_server() { + SERVER_ENABLE=$(uci_get_by_type server_global enable_server 0) + [ "$SERVER_ENABLE" == "0" ] && return 0 + server_service() { + [ $(uci_get_by_name $1 enable 0) == "0" ] && return 1 + let server_count=server_count+1 + if [ "$server_count" == "1" ]; then + if ! (iptables-save -t filter | grep SSR-SERVER-RULE >/dev/null); then + iptables -N SSR-SERVER-RULE && \ + iptables -t filter -I INPUT -j SSR-SERVER-RULE + fi + fi + if [ "$(uci_get_by_name $1 type ssr)" == "ssr" ]; then + local bin=$(find_bin ssr-server) + [ ! -f "$bin" ] && echo "$(date "+%Y-%m-%d %H:%M:%S") Server:Can't find $bin program, can't start!" >>/tmp/ssrplus.log && return 1 + gen_service_file $1 /var/etc/${NAME}_$server_count.json + $(find_bin ssr-server) -c /var/etc/${NAME}_$server_count.json -u -f /var/run/ssr-server$server_count.pid >/dev/null 2>&1 + echo "$(date "+%Y-%m-%d %H:%M:%S") Server:ShadowsocksR Server$server_count Started!" >>/tmp/ssrplus.log + else + [ -e /proc/sys/net/ipv6 ] && local listenip='-i ::' + microsocks $listenip -p $(uci_get_by_name $1 server_port) -1 -u $(uci_get_by_name $1 username) -P $(uci_get_by_name $1 password) ssr-server$server_count >/dev/null 2>&1 & + echo "$(date "+%Y-%m-%d %H:%M:%S") Server:Socks5 Server$server_count Started!" >>/tmp/ssrplus.log + fi + iptables -t filter -A SSR-SERVER-RULE -p tcp --dport $(uci_get_by_name $1 server_port) -j ACCEPT + iptables -t filter -A SSR-SERVER-RULE -p udp --dport $(uci_get_by_name $1 server_port) -j ACCEPT + return 0 + } + mkdir -p /var/run /var/etc + config_load $NAME + config_foreach server_service server_config + gen_serv_include + return 0 +} + +start_switch() { + if [ "$(uci_get_by_type global enable_switch 0)" == "1" ]; then + if [ -z "$switch_server" ]; then + local switch_time=$(uci_get_by_type global switch_time)s + local switch_timeout=$(uci_get_by_type global switch_timeout) + service_start /usr/bin/ssr-switch start $switch_time $switch_timeout + switch_enable=1 + fi + fi +} + +start_monitor() { + if [ $(uci_get_by_type global monitor_enable 1) == "1" ]; then + let total_count=server_count+redir_tcp+redir_udp+tunnel_enable+kcp_enable_flag+local_enable+pdnsd_enable_flag+switch_enable + if [ $total_count -gt 0 ]; then + service_start /usr/bin/ssr-monitor $server_count $redir_tcp $redir_udp $tunnel_enable $kcp_enable_flag $local_enable $pdnsd_enable_flag $switch_enable + fi + fi +} + +check_server() { + ENABLE_SERVER=$(uci_get_by_type global global_server nil) + if [ "$ENABLE_SERVER" == "nil" ]; then + return 1 + else + local STYPE=$(uci_get_by_name $ENABLE_SERVER type nil) + if [ "$STYPE" == "nil" ]; then + local CFGID=$(uci_get_by_cfgid servers type nil) + if [ "$CFGID" == "nil" ]; then + uci_set_by_type global global_server 'nil' + else + uci_set_by_type global global_server $CFGID + fi + /etc/init.d/shadowsocksr restart + fi + fi +} + +start_rules() { + local server=$(get_host_ip $(uci_get_by_name $GLOBAL_SERVER server)) + if [ "$server" == "ERROR" ]; then + server=$(uci_get_by_name $GLOBAL_SERVER ip) + fi + local kcp_enable=$(uci_get_by_name $GLOBAL_SERVER kcp_enable 0) + if [ $kcp_enable == "1" ]; then + kcp_server=$server + kcp_flag=1 + fi + local local_port=$(uci_get_by_name $GLOBAL_SERVER local_port) + local lan_ac_ips=$(uci_get_by_type access_control lan_ac_ips) + local lan_ac_mode=$(uci_get_by_type access_control lan_ac_mode) + local router_proxy=$(uci_get_by_type access_control router_proxy) + if [ "$GLOBAL_SERVER" == "$UDP_RELAY_SERVER" -a "$kcp_flag" == "0" ]; then + ARG_UDP="-u" + elif [ -n "$UDP_RELAY_SERVER" ]; then + ARG_UDP="-U" + local udp_server=$(uci_get_by_name $UDP_RELAY_SERVER server) + local udp_local_port=$(uci_get_by_name $UDP_RELAY_SERVER local_port) + fi + if [ -n "$lan_ac_ips" ]; then + case "$lan_ac_mode" in + w | W | b | B) local ac_ips="$lan_ac_mode$lan_ac_ips" ;; + esac + fi + #deal gfw firewall rule + local gfwmode="" + case "$run_mode" in + gfw) gfwmode="-g" ;; + router) gfwmode="-r" ;; + oversea) gfwmode="-c" ;; + all) gfwmode="-z" ;; + esac + local dports=$(uci_get_by_type global dports 1) + if [ $dports == "1" ]; then + proxyport=" " + else + proxyport="-m multiport --dports 22,53,587,465,995,993,143,80,443,853" + fi + if [ "$NETFLIX_SERVER" != "nil" ]; then + if [ "$NETFLIX_SERVER" != "$GLOBAL_SERVER" ]; then + netflix="1" + else + netflix="2" + fi + else + netflix="0" + fi + get_arg_out() { + case "$(uci_get_by_type access_control router_proxy 1)" in + 1) echo "-o" ;; + 2) echo "-O" ;; + esac + } + netflix_ip=$(get_host_ip $(uci_get_by_name $NETFLIX_SERVER server)) + if [ "$netflix_ip" == "ERROR" ]; then + netflix_ip=$(uci_get_by_name $NETFLIX_SERVER ip) + fi + /usr/bin/ssr-rules \ + -s "$server" \ + -l "$local_port" \ + -S "$udp_server" \ + -L "$udp_local_port" \ + -a "$ac_ips" \ + -i "/etc/ssr/china_ssr.txt" \ + -b "$(uci_get_by_type access_control wan_bp_ips)" \ + -w "$(uci_get_by_type access_control wan_fw_ips)" \ + -B "$(uci_get_by_type access_control lan_bp_ips)" \ + -p "$(uci_get_by_type access_control lan_fp_ips)" \ + -G "$(uci_get_by_type access_control lan_gm_ips)" \ + -D "$proxyport" \ + -F "$netflix" \ + -N "$netflix_ip" \ + -M "$(uci_get_by_type global netflix_proxy 0)" \ + -I "/etc/ssr/netflixip.list" \ + $(get_arg_out) $gfwmode $ARG_UDP + return $? } rules() { @@ -610,6 +672,7 @@ rules() { redir_tcp=1 fi mkdir -p /var/run /var/etc + run_mode=$(uci_get_by_type global run_mode) UDP_RELAY_SERVER=$(uci_get_by_type global udp_relay_server) [ "$UDP_RELAY_SERVER" == "same" ] && UDP_RELAY_SERVER=$GLOBAL_SERVER [ -n "$UDP_RELAY_SERVER" ] && redir_udp=1 @@ -621,133 +684,81 @@ rules() { } start() { + [ -f "$LOCK_FILE" ] && exit 2 + touch "$LOCK_FILE" + echo "-----------start-----------" >>/tmp/ssrplus.log if [ -z "$switch_server" ]; then - GLOBAL_SERVER=$(uci_get_by_type global global_server) + GLOBAL_SERVER=$(uci_get_by_type global global_server nil) else GLOBAL_SERVER=$switch_server switch_enable=1 fi - NETFLIX_SERVER=$(uci_get_by_type global netflix_server nil) if [ "$NETFLIX_SERVER" == "same" ]; then NETFLIX_SERVER=$GLOBAL_SERVER fi - - if rules; then - start_redir - mkdir -p /tmp/dnsmasq.d && cp -a /etc/dnsmasq.ssr /tmp/ && cp -a /etc/dnsmasq.oversea /tmp/ - if ! [ "$run_mode" == "oversea" ]; then - cat <<-EOF >/tmp/dnsmasq.d/dnsmasq-ssr.conf - conf-dir=/tmp/dnsmasq.ssr - EOF - else - cat <<-EOF >/tmp/dnsmasq.d/dnsmasq-ssr.conf - conf-dir=/tmp/dnsmasq.oversea - EOF - fi - if [ $(uci_get_by_type global adblock 0) == "0" ]; then - rm -f /tmp/dnsmasq.ssr/ad.conf - fi - /usr/share/shadowsocksr/gfw2ipset.sh - - if [ "$NETFLIX_SERVER" != "nil" ]; then - if [ "$NETFLIX_SERVER" != "$GLOBAL_SERVER" ]; then - cat /etc/config/netflix.list | while read line || [ -n "$line" ]; do - sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf - done - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"netflix"'\n",$0)}' /etc/config/netflix.list >/tmp/dnsmasq.ssr/netflix_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5555"'\n",$0)}' /etc/config/netflix.list >>/tmp/dnsmasq.ssr/netflix_forward.conf - - ipset -N netflix hash:net 2>/dev/null - cat /etc/config/netflixip.list | while read nip || [ -n "$nip" ]; do - ipset add netflix $nip 2>/dev/null - done - else - cat /etc/config/netflix.list | while read line || [ -n "$line" ]; do - sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf - done - awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"netflix"'\n",$0)}' /etc/config/netflix.list >/tmp/dnsmasq.ssr/netflix_forward.conf - awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/config/netflix.list >>/tmp/dnsmasq.ssr/netflix_forward.conf - ipset -N netflix hash:net 2>/dev/null - cat /etc/config/netflixip.list | while read nip || [ -n "$nip" ]; do - ipset add netflix $nip 2>/dev/null - done - fi - else - rm -f /tmp/dnsmasq.ssr/netflix_forward.conf - fi - - /etc/init.d/dnsmasq restart >/dev/null 2>&1 + mkdir -p /tmp/dnsmasq.d /tmp/dnsmasq.ssr + cat <<-EOF >/tmp/dnsmasq.d/dnsmasq-ssr.conf + conf-dir=/tmp/dnsmasq.ssr + EOF + if [ "$(uci_get_by_type global adblock 0)" == "1" ]; then + cp -rf /etc/ssr/ad.conf /tmp/dnsmasq.ssr/ + awk '!/^$/&&!/^#/{printf("address=/%s/''\n",$0)}' /etc/ssr/deny.list >/tmp/dnsmasq.ssr/denylist.conf fi + if rules; then + if start_redir_tcp; then + start_redir_udp + start_shunt + start_switch + start_dns + add_cron + if [ "$run_mode" == "oversea" ]; then + cp -rf /etc/ssr/oversea_list.conf /tmp/dnsmasq.ssr/ + else + cp -rf /etc/ssr/gfw_list.conf /tmp/dnsmasq.ssr/ + cp -rf /etc/ssr/gfw_base.conf /tmp/dnsmasq.ssr/ + fi + /usr/share/shadowsocksr/gfw2ipset.sh + else + /usr/bin/ssr-rules -f + fi + fi + /etc/init.d/dnsmasq restart >/dev/null 2>&1 start_server start_local - if [ $(uci_get_by_type global monitor_enable 1) == "1" ]; then - let total_count=server_count+redir_tcp+redir_udp+tunnel_enable+kcp_enable_flag+local_enable+pdnsd_enable_flag+switch_enable - if [ $total_count -gt 0 ]; then - #param:server(count) redir_tcp(0:no,1:yes) redir_udp tunnel kcp local gfw - service_start /usr/bin/ssr-monitor $server_count $redir_tcp $redir_udp $tunnel_enable $kcp_enable_flag $local_enable $pdnsd_enable_flag $switch_enable - fi - fi - - ENABLE_SERVER=$(uci_get_by_type global global_server nil) - if [ "$ENABLE_SERVER" == "nil" ]; then - return 1 - else - STYPE=$(uci_get_by_name $ENABLE_SERVER type nil) - if [ "$STYPE" == "nil" ]; then - CFGID=$(uci_get_by_cfgid servers type nil) - if [ "$CFGID" == "nil" ]; then - uci set shadowsocksr.@global[0].global_server='nil' - else - uci set shadowsocksr.@global[0].global_server=$CFGID - fi - uci commit shadowsocksr - /etc/init.d/shadowsocksr restart - fi - fi + start_monitor + check_server + clean_log + echo "------------end------------" >>/tmp/ssrplus.log + rm -f $LOCK_FILE } boot() { + ulimit -n 65535 (/usr/share/shadowsocksr/chinaipset.sh && sleep 3 && start >/dev/null 2>&1) & } stop() { + unlock /usr/bin/ssr-rules -f - srulecount=$(iptables -L | grep SSR-SERVER-RULE | wc -l) + local srulecount=$(iptables -L | grep SSR-SERVER-RULE | wc -l) if [ $srulecount -gt 0 ]; then iptables -F SSR-SERVER-RULE iptables -t filter -D INPUT -j SSR-SERVER-RULE iptables -X SSR-SERVER-RULE 2>/dev/null fi if [ -z "$switch_server" ]; then - kill -9 $(busybox ps -w | grep ssr-switch | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - fi - if [ $(uci_get_by_type global monitor_enable 0) == "1" ]; then - kill -9 $(busybox ps -w | grep ssr-monitor | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - fi - killall -q -9 ssr-monitor - killall -q -9 ss-redir - killall -q -9 obfs-local - killall -q -9 v2ray-plugin - killall -q -9 ssr-redir - killall -q -9 v2ray - killall -q -9 trojan - killall -q -9 ipt2socks - kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - kill -9 $(busybox ps -w | grep ssr-local | grep -v grep | awk '{print $1}') >/dev/null 2>&1 - killall -q -9 ssr-local - killall -q -9 ss-local - killall -q -9 kcptun-client - killall -q -9 dns2socks - killall -q -9 microsocks - killall -q -9 redsocks2 - if [ -f /var/run/pdnsd.pid ]; then - kill $(cat /var/run/pdnsd.pid) >/dev/null 2>&1 - else - kill -9 $(busybox ps -w | grep pdnsd | grep -v grep | awk '{print $1}') >/dev/null 2>&1 + ps -w | grep -v "grep" | grep ssr-switch | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & + rm -f /var/lock/ssr-switch.lock + killall -q -9 kcptun-client fi + ps -w | grep -v "grep" | grep ssr-monitor | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & + ps -w | grep -v "grep" | grep "sleep $(uci_get_by_type global switch_time)s" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & + ps -w | grep -v "grep" | grep "sleep 30s" | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1 & + killall -q -9 ss-redir ss-local obfs-local ssr-redir ssr-local ssr-server v2ray v2ray-plugin trojan microsocks ipt2socks dns2socks redsocks2 pdnsd + rm -f /var/lock/ssr-chinaipset.lock /var/lock/ssr-monitor.lock if [ -f "/tmp/dnsmasq.d/dnsmasq-ssr.conf" ]; then - rm -f /tmp/dnsmasq.d/dnsmasq-ssr.conf /tmp/dnsmasq.ssr/* /tmp/dnsmasq.oversea/* + rm -rf /tmp/dnsmasq.d/dnsmasq-ssr.conf /tmp/dnsmasq.ssr /tmp/dnsmasq.oversea /etc/init.d/dnsmasq restart >/dev/null 2>&1 fi del_cron diff --git a/package/lean/luci-app-ssr-plus/root/etc/china_ssr.txt b/package/lean/luci-app-ssr-plus/root/etc/ssr/china_ssr.txt similarity index 99% rename from package/lean/luci-app-ssr-plus/root/etc/china_ssr.txt rename to package/lean/luci-app-ssr-plus/root/etc/ssr/china_ssr.txt index c152a07af2..712a2cfa7f 100644 --- a/package/lean/luci-app-ssr-plus/root/etc/china_ssr.txt +++ b/package/lean/luci-app-ssr-plus/root/etc/ssr/china_ssr.txt @@ -800,7 +800,6 @@ 43.243.144.0/22 43.243.148.0/22 43.243.156.0/22 -43.243.168.0/22 43.243.180.0/22 43.243.188.0/22 43.243.228.0/22 @@ -1030,7 +1029,8 @@ 45.65.28.0/22 45.112.132.0/22 45.112.188.0/22 -45.112.208.0/21 +45.112.208.0/22 +45.112.212.0/22 45.112.216.0/22 45.112.220.0/22 45.112.228.0/22 @@ -1471,6 +1471,9 @@ 45.253.232.0/22 45.253.236.0/22 45.253.240.0/22 +45.253.244.0/22 +45.253.248.0/22 +45.253.252.0/22 45.254.0.0/22 45.254.4.0/22 45.254.8.0/22 @@ -1782,6 +1785,7 @@ 61.29.128.0/18 61.29.192.0/19 61.29.224.0/20 +61.29.240.0/20 61.45.128.0/18 61.45.224.0/20 61.47.128.0/18 @@ -2491,7 +2495,6 @@ 103.38.224.0/22 103.38.228.0/22 103.38.232.0/22 -103.38.252.0/22 103.39.16.0/22 103.39.64.0/22 103.39.88.0/22 @@ -2815,7 +2818,6 @@ 103.56.16.0/22 103.56.20.0/22 103.56.32.0/22 -103.56.52.0/22 103.56.56.0/22 103.56.60.0/22 103.56.72.0/22 @@ -4004,6 +4006,56 @@ 103.149.210.0/23 103.149.214.0/23 103.149.220.0/23 +103.149.242.0/23 +103.149.244.0/23 +103.149.246.0/23 +103.149.248.0/23 +103.150.24.0/23 +103.150.66.0/23 +103.150.72.0/23 +103.150.122.0/23 +103.150.126.0/23 +103.150.128.0/23 +103.150.130.0/23 +103.150.146.0/23 +103.150.164.0/23 +103.150.172.0/23 +103.150.180.0/23 +103.150.200.0/23 +103.150.210.0/23 +103.150.214.0/23 +103.150.216.0/23 +103.150.244.0/23 +103.151.4.0/23 +103.151.44.0/23 +103.151.138.0/23 +103.151.142.0/23 +103.151.148.0/23 +103.151.150.0/23 +103.151.158.0/23 +103.151.178.0/23 +103.151.206.0/23 +103.151.216.0/23 +103.151.228.0/23 +103.152.14.0/23 +103.152.24.0/23 +103.152.28.0/23 +103.152.30.0/23 +103.152.56.0/23 +103.152.76.0/23 +103.152.80.0/23 +103.152.98.0/23 +103.152.112.0/23 +103.152.120.0/23 +103.152.122.0/23 +103.152.132.0/23 +103.152.152.0/23 +103.152.168.0/23 +103.152.170.0/23 +103.152.186.0/23 +103.152.190.0/23 +103.152.192.0/23 +103.152.200.0/23 103.192.0.0/22 103.192.4.0/22 103.192.8.0/22 @@ -4093,6 +4145,7 @@ 103.199.248.0/22 103.199.252.0/22 103.200.28.0/22 +103.200.32.0/22 103.200.52.0/22 103.200.64.0/22 103.200.68.0/22 @@ -5004,7 +5057,6 @@ 103.250.248.0/22 103.250.252.0/22 103.251.32.0/22 -103.251.36.0/22 103.251.84.0/22 103.251.96.0/22 103.251.124.0/22 @@ -5062,8 +5114,7 @@ 106.4.0.0/14 106.8.0.0/15 106.11.0.0/16 -106.12.0.0/15 -106.14.0.0/15 +106.12.0.0/14 106.16.0.0/12 106.32.0.0/12 106.48.0.0/15 @@ -5401,10 +5452,7 @@ 117.32.0.0/13 117.40.0.0/14 117.44.0.0/15 -117.48.0.0/17 -117.48.128.0/17 -117.49.0.0/16 -117.50.0.0/15 +117.48.0.0/14 117.53.48.0/20 117.53.176.0/20 117.57.0.0/16 @@ -5832,8 +5880,7 @@ 124.64.0.0/15 124.66.0.0/17 124.67.0.0/16 -124.68.0.0/15 -124.70.0.0/15 +124.68.0.0/14 124.72.0.0/16 124.73.0.0/16 124.74.0.0/15 @@ -5975,6 +6022,8 @@ 140.249.0.0/16 140.250.0.0/16 140.255.0.0/16 +142.70.0.0/16 +142.86.0.0/16 144.0.0.0/16 144.7.0.0/16 144.12.0.0/16 @@ -6001,6 +6050,7 @@ 146.196.116.0/22 146.196.124.0/22 148.70.0.0/16 +149.41.0.0/16 150.0.0.0/16 150.115.0.0/16 150.121.0.0/16 @@ -6037,12 +6087,12 @@ 150.242.192.0/22 150.242.212.0/22 150.242.224.0/22 -150.242.228.0/22 150.242.232.0/22 150.242.236.0/22 150.242.240.0/22 150.242.244.0/22 150.242.248.0/22 +150.248.0.0/16 150.255.0.0/16 152.104.128.0/17 152.136.0.0/16 @@ -6082,6 +6132,7 @@ 157.148.0.0/16 157.156.0.0/16 157.255.0.0/16 +158.79.0.0/16 159.75.0.0/16 159.226.0.0/16 160.19.208.0/22 @@ -6104,6 +6155,7 @@ 160.202.248.0/22 160.202.252.0/22 160.238.64.0/22 +161.120.0.0/16 161.189.0.0/16 161.207.0.0/16 162.14.0.0/16 diff --git a/package/lean/luci-app-ssr-plus/root/etc/ssr/deny.list b/package/lean/luci-app-ssr-plus/root/etc/ssr/deny.list new file mode 100644 index 0000000000..dc4344e7d7 --- /dev/null +++ b/package/lean/luci-app-ssr-plus/root/etc/ssr/deny.list @@ -0,0 +1,14 @@ +gvod.aiseejapp.atianqi.com +stat.pandora.xiaomi.com +upgrade.mishop.pandora.xiaomi.com +logonext.tv.kuyun.com +config.kuyun.com +mishop.pandora.xiaomi.com +dvb.pandora.xiaomi.com +api.ad.xiaomi.com +de.pandora.xiaomi.com +data.mistat.xiaomi.com +jellyfish.pandora.xiaomi.com +gallery.pandora.xiaomi.com +o2o.api.xiaomi.com +bss.pandora.xiaomi.com \ No newline at end of file diff --git a/package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/gfw_base.conf b/package/lean/luci-app-ssr-plus/root/etc/ssr/gfw_base.conf similarity index 100% rename from package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/gfw_base.conf rename to package/lean/luci-app-ssr-plus/root/etc/ssr/gfw_base.conf diff --git a/package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/gfw_list.conf b/package/lean/luci-app-ssr-plus/root/etc/ssr/gfw_list.conf similarity index 97% rename from package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/gfw_list.conf rename to package/lean/luci-app-ssr-plus/root/etc/ssr/gfw_list.conf index cfeb42fc82..d9d7e3c310 100644 --- a/package/lean/luci-app-ssr-plus/root/etc/dnsmasq.ssr/gfw_list.conf +++ b/package/lean/luci-app-ssr-plus/root/etc/ssr/gfw_list.conf @@ -1,5 +1,3 @@ -server=/.030buy.com/127.0.0.1#5335 -ipset=/.030buy.com/gfwlist server=/.0rz.tw/127.0.0.1#5335 ipset=/.0rz.tw/gfwlist server=/.10.tt/127.0.0.1#5335 @@ -76,6 +74,8 @@ server=/.2008xianzhang.info/127.0.0.1#5335 ipset=/.2008xianzhang.info/gfwlist server=/.2017.hk/127.0.0.1#5335 ipset=/.2017.hk/gfwlist +server=/.2049bbs.xyz/127.0.0.1#5335 +ipset=/.2049bbs.xyz/gfwlist server=/.21join.com/127.0.0.1#5335 ipset=/.21join.com/gfwlist server=/.21pron.com/127.0.0.1#5335 @@ -210,14 +210,10 @@ server=/.8news.com.tw/127.0.0.1#5335 ipset=/.8news.com.tw/gfwlist server=/.8z1.net/127.0.0.1#5335 ipset=/.8z1.net/gfwlist -server=/.9001700.com/127.0.0.1#5335 -ipset=/.9001700.com/gfwlist server=/.91porn.com/127.0.0.1#5335 ipset=/.91porn.com/gfwlist server=/.91vps.club/127.0.0.1#5335 ipset=/.91vps.club/gfwlist -server=/.92ccav.com/127.0.0.1#5335 -ipset=/.92ccav.com/gfwlist server=/.991.com/127.0.0.1#5335 ipset=/.991.com/gfwlist server=/.99btgc01.com/127.0.0.1#5335 @@ -236,6 +232,8 @@ server=/.a248.e.akamai.net/127.0.0.1#5335 ipset=/.a248.e.akamai.net/gfwlist server=/.a5.com.ru/127.0.0.1#5335 ipset=/.a5.com.ru/gfwlist +server=/.a771.dscq.akamai.net/127.0.0.1#5335 +ipset=/.a771.dscq.akamai.net/gfwlist server=/.aamacau.com/127.0.0.1#5335 ipset=/.aamacau.com/gfwlist server=/.abc.com/127.0.0.1#5335 @@ -248,8 +246,6 @@ server=/.abc.xyz/127.0.0.1#5335 ipset=/.abc.xyz/gfwlist server=/.abchinese.com/127.0.0.1#5335 ipset=/.abchinese.com/gfwlist -server=/.abclite.net/127.0.0.1#5335 -ipset=/.abclite.net/gfwlist server=/.abebooks.com/127.0.0.1#5335 ipset=/.abebooks.com/gfwlist server=/.abematv.akamaized.net/127.0.0.1#5335 @@ -260,20 +256,12 @@ server=/.aboluowang.com/127.0.0.1#5335 ipset=/.aboluowang.com/gfwlist server=/.about.google/127.0.0.1#5335 ipset=/.about.google/gfwlist -server=/.aboutgfw.com/127.0.0.1#5335 -ipset=/.aboutgfw.com/gfwlist -server=/.abs.edu/127.0.0.1#5335 -ipset=/.abs.edu/gfwlist server=/.ac.jiruan.net/127.0.0.1#5335 ipset=/.ac.jiruan.net/gfwlist -server=/.accim.org/127.0.0.1#5335 -ipset=/.accim.org/gfwlist server=/.aceros-de-hispania.com/127.0.0.1#5335 ipset=/.aceros-de-hispania.com/gfwlist server=/.acevpn.com/127.0.0.1#5335 ipset=/.acevpn.com/gfwlist -server=/.acg18.me/127.0.0.1#5335 -ipset=/.acg18.me/gfwlist server=/.acgkj.com/127.0.0.1#5335 ipset=/.acgkj.com/gfwlist server=/.acmedia365.com/127.0.0.1#5335 @@ -300,8 +288,6 @@ server=/.admob.com/127.0.0.1#5335 ipset=/.admob.com/gfwlist server=/.adpl.org.hk/127.0.0.1#5335 ipset=/.adpl.org.hk/gfwlist -server=/.ads-twitter.com/127.0.0.1#5335 -ipset=/.ads-twitter.com/gfwlist server=/.adsense.com/127.0.0.1#5335 ipset=/.adsense.com/gfwlist server=/.adult-sex-games.com/127.0.0.1#5335 @@ -320,8 +306,6 @@ server=/.aex.com/127.0.0.1#5335 ipset=/.aex.com/gfwlist server=/.af.mil/127.0.0.1#5335 ipset=/.af.mil/gfwlist -server=/.agnesb.fr/127.0.0.1#5335 -ipset=/.agnesb.fr/gfwlist server=/.agoogleaday.com/127.0.0.1#5335 ipset=/.agoogleaday.com/gfwlist server=/.agro.hk/127.0.0.1#5335 @@ -352,8 +336,6 @@ server=/.aiweiweiblog.com/127.0.0.1#5335 ipset=/.aiweiweiblog.com/gfwlist server=/.akiba-online.com/127.0.0.1#5335 ipset=/.akiba-online.com/gfwlist -server=/.akiba-web.com/127.0.0.1#5335 -ipset=/.akiba-web.com/gfwlist server=/.akow.org/127.0.0.1#5335 ipset=/.akow.org/gfwlist server=/.al-islam.com/127.0.0.1#5335 @@ -414,8 +396,6 @@ server=/.alphaporno.com/127.0.0.1#5335 ipset=/.alphaporno.com/gfwlist server=/.alternate-tools.com/127.0.0.1#5335 ipset=/.alternate-tools.com/gfwlist -server=/.altrec.com/127.0.0.1#5335 -ipset=/.altrec.com/gfwlist server=/.alvinalexander.com/127.0.0.1#5335 ipset=/.alvinalexander.com/gfwlist server=/.alwaysdata.com/127.0.0.1#5335 @@ -428,8 +408,8 @@ server=/.am730.com.hk/127.0.0.1#5335 ipset=/.am730.com.hk/gfwlist server=/.amazon.co.jp/127.0.0.1#5335 ipset=/.amazon.co.jp/gfwlist -server=/.ameblo.jp/127.0.0.1#5335 -ipset=/.ameblo.jp/gfwlist +server=/.ameba.jp/127.0.0.1#5335 +ipset=/.ameba.jp/gfwlist server=/.americangreencard.com/127.0.0.1#5335 ipset=/.americangreencard.com/gfwlist server=/.americanunfinished.com/127.0.0.1#5335 @@ -450,6 +430,8 @@ server=/.amnyemachen.org/127.0.0.1#5335 ipset=/.amnyemachen.org/gfwlist server=/.amoiist.com/127.0.0.1#5335 ipset=/.amoiist.com/gfwlist +server=/.ampproject.org/127.0.0.1#5335 +ipset=/.ampproject.org/gfwlist server=/.amtb-taipei.org/127.0.0.1#5335 ipset=/.amtb-taipei.org/gfwlist server=/.anchorfree.com/127.0.0.1#5335 @@ -470,8 +452,6 @@ server=/.andygod.com/127.0.0.1#5335 ipset=/.andygod.com/gfwlist server=/.angela-merkel.de/127.0.0.1#5335 ipset=/.angela-merkel.de/gfwlist -server=/.angola.org/127.0.0.1#5335 -ipset=/.angola.org/gfwlist server=/.angularjs.org/127.0.0.1#5335 ipset=/.angularjs.org/gfwlist server=/.animecrazy.net/127.0.0.1#5335 @@ -518,10 +498,6 @@ server=/.aolchannels.aol.com/127.0.0.1#5335 ipset=/.aolchannels.aol.com/gfwlist server=/.aomiwang.com/127.0.0.1#5335 ipset=/.aomiwang.com/gfwlist -server=/.apartmentratings.com/127.0.0.1#5335 -ipset=/.apartmentratings.com/gfwlist -server=/.apartments.com/127.0.0.1#5335 -ipset=/.apartments.com/gfwlist server=/.apetube.com/127.0.0.1#5335 ipset=/.apetube.com/gfwlist server=/.api-secure.recaptcha.net/127.0.0.1#5335 @@ -598,8 +574,6 @@ server=/.arctosia.com/127.0.0.1#5335 ipset=/.arctosia.com/gfwlist server=/.areca-backup.org/127.0.0.1#5335 ipset=/.areca-backup.org/gfwlist -server=/.arena.taipei/127.0.0.1#5335 -ipset=/.arena.taipei/gfwlist server=/.arethusa.su/127.0.0.1#5335 ipset=/.arethusa.su/gfwlist server=/.arlingtoncemetery.mil/127.0.0.1#5335 @@ -644,16 +618,12 @@ server=/.assembla.com/127.0.0.1#5335 ipset=/.assembla.com/gfwlist server=/.assets.bwbx.io/127.0.0.1#5335 ipset=/.assets.bwbx.io/gfwlist -server=/.assimp.org/127.0.0.1#5335 -ipset=/.assimp.org/gfwlist server=/.astrill.com/127.0.0.1#5335 ipset=/.astrill.com/gfwlist server=/.atc.org.au/127.0.0.1#5335 ipset=/.atc.org.au/gfwlist server=/.atchinese.com/127.0.0.1#5335 ipset=/.atchinese.com/gfwlist -server=/.atdmt.com/127.0.0.1#5335 -ipset=/.atdmt.com/gfwlist server=/.atgfw.org/127.0.0.1#5335 ipset=/.atgfw.org/gfwlist server=/.athenaeizou.com/127.0.0.1#5335 @@ -716,8 +686,6 @@ server=/.azerbaycan.tv/127.0.0.1#5335 ipset=/.azerbaycan.tv/gfwlist server=/.azerimix.com/127.0.0.1#5335 ipset=/.azerimix.com/gfwlist -server=/.azubu.tv/127.0.0.1#5335 -ipset=/.azubu.tv/gfwlist server=/.b0ne.com/127.0.0.1#5335 ipset=/.b0ne.com/gfwlist server=/.babynet.com.hk/127.0.0.1#5335 @@ -732,8 +700,6 @@ server=/.badjojo.com/127.0.0.1#5335 ipset=/.badjojo.com/gfwlist server=/.badoo.com/127.0.0.1#5335 ipset=/.badoo.com/gfwlist -server=/.baidu.jp/127.0.0.1#5335 -ipset=/.baidu.jp/gfwlist server=/.baijie.org/127.0.0.1#5335 ipset=/.baijie.org/gfwlist server=/.bailandaily.com/127.0.0.1#5335 @@ -746,6 +712,8 @@ server=/.banana-vpn.com/127.0.0.1#5335 ipset=/.banana-vpn.com/gfwlist server=/.band.us/127.0.0.1#5335 ipset=/.band.us/gfwlist +server=/.bandpage.com/127.0.0.1#5335 +ipset=/.bandpage.com/gfwlist server=/.bandwagonhost.com/127.0.0.1#5335 ipset=/.bandwagonhost.com/gfwlist server=/.bangbrosnetwork.com/127.0.0.1#5335 @@ -756,14 +724,10 @@ server=/.bangdream.space/127.0.0.1#5335 ipset=/.bangdream.space/gfwlist server=/.bangyoulater.com/127.0.0.1#5335 ipset=/.bangyoulater.com/gfwlist -server=/.bankmobilevibe.com/127.0.0.1#5335 -ipset=/.bankmobilevibe.com/gfwlist server=/.bannedbook.org/127.0.0.1#5335 ipset=/.bannedbook.org/gfwlist server=/.bannednews.org/127.0.0.1#5335 ipset=/.bannednews.org/gfwlist -server=/.banorte.com/127.0.0.1#5335 -ipset=/.banorte.com/gfwlist server=/.baramangaonline.com/127.0.0.1#5335 ipset=/.baramangaonline.com/gfwlist server=/.barenakedislam.com/127.0.0.1#5335 @@ -774,8 +738,6 @@ server=/.barton.de/127.0.0.1#5335 ipset=/.barton.de/gfwlist server=/.bartvpn.com/127.0.0.1#5335 ipset=/.bartvpn.com/gfwlist -server=/.bash-hackers.org/127.0.0.1#5335 -ipset=/.bash-hackers.org/gfwlist server=/.bastillepost.com/127.0.0.1#5335 ipset=/.bastillepost.com/gfwlist server=/.bayvoice.net/127.0.0.1#5335 @@ -786,8 +748,6 @@ server=/.bbc.co.uk/127.0.0.1#5335 ipset=/.bbc.co.uk/gfwlist server=/.bbc.com/127.0.0.1#5335 ipset=/.bbc.com/gfwlist -server=/.bbc.in/127.0.0.1#5335 -ipset=/.bbc.in/gfwlist server=/.bbcchinese.com/127.0.0.1#5335 ipset=/.bbcchinese.com/gfwlist server=/.bbchat.tv/127.0.0.1#5335 @@ -920,8 +880,6 @@ server=/.bfsh.hk/127.0.0.1#5335 ipset=/.bfsh.hk/gfwlist server=/.bgvpn.com/127.0.0.1#5335 ipset=/.bgvpn.com/gfwlist -server=/.bianlei.com/127.0.0.1#5335 -ipset=/.bianlei.com/gfwlist server=/.biantailajiao.com/127.0.0.1#5335 ipset=/.biantailajiao.com/gfwlist server=/.biantailajiao.in/127.0.0.1#5335 @@ -936,6 +894,8 @@ server=/.big.one/127.0.0.1#5335 ipset=/.big.one/gfwlist server=/.bigfools.com/127.0.0.1#5335 ipset=/.bigfools.com/gfwlist +server=/.biggo.com.tw/127.0.0.1#5335 +ipset=/.biggo.com.tw/gfwlist server=/.bigjapanesesex.com/127.0.0.1#5335 ipset=/.bigjapanesesex.com/gfwlist server=/.bigmoney.biz/127.0.0.1#5335 @@ -1122,8 +1082,6 @@ server=/.bolin.netfirms.com/127.0.0.1#5335 ipset=/.bolin.netfirms.com/gfwlist server=/.bonbonme.com/127.0.0.1#5335 ipset=/.bonbonme.com/gfwlist -server=/.bonbonsex.com/127.0.0.1#5335 -ipset=/.bonbonsex.com/gfwlist server=/.bonfoundation.org/127.0.0.1#5335 ipset=/.bonfoundation.org/gfwlist server=/.bongacams.com/127.0.0.1#5335 @@ -1352,8 +1310,6 @@ server=/.castbox.fm/127.0.0.1#5335 ipset=/.castbox.fm/gfwlist server=/.catch22.net/127.0.0.1#5335 ipset=/.catch22.net/gfwlist -server=/.catchgod.com/127.0.0.1#5335 -ipset=/.catchgod.com/gfwlist server=/.catfightpayperview.xxx/127.0.0.1#5335 ipset=/.catfightpayperview.xxx/gfwlist server=/.catholic.org.hk/127.0.0.1#5335 @@ -1522,8 +1478,6 @@ server=/.china-review.com.ua/127.0.0.1#5335 ipset=/.china-review.com.ua/gfwlist server=/.china-week.com/127.0.0.1#5335 ipset=/.china-week.com/gfwlist -server=/.china.hket.com/127.0.0.1#5335 -ipset=/.china.hket.com/gfwlist server=/.china101.com/127.0.0.1#5335 ipset=/.china101.com/gfwlist server=/.china18.org/127.0.0.1#5335 @@ -1602,8 +1556,6 @@ server=/.chinasoul.org/127.0.0.1#5335 ipset=/.chinasoul.org/gfwlist server=/.chinasucks.net/127.0.0.1#5335 ipset=/.chinasucks.net/gfwlist -server=/.chinatimes.com/127.0.0.1#5335 -ipset=/.chinatimes.com/gfwlist server=/.chinatopsex.com/127.0.0.1#5335 ipset=/.chinatopsex.com/gfwlist server=/.chinatown.com.au/127.0.0.1#5335 @@ -1656,8 +1608,6 @@ server=/.chithu.org/127.0.0.1#5335 ipset=/.chithu.org/gfwlist server=/.chn.chosun.com/127.0.0.1#5335 ipset=/.chn.chosun.com/gfwlist -server=/.chobit.cc/127.0.0.1#5335 -ipset=/.chobit.cc/gfwlist server=/.chrdnet.com/127.0.0.1#5335 ipset=/.chrdnet.com/gfwlist server=/.christianfreedom.org/127.0.0.1#5335 @@ -1754,10 +1704,10 @@ server=/.clinica-tibet.ru/127.0.0.1#5335 ipset=/.clinica-tibet.ru/gfwlist server=/.clipfish.de/127.0.0.1#5335 ipset=/.clipfish.de/gfwlist +server=/.clips4sale.com/127.0.0.1#5335 +ipset=/.clips4sale.com/gfwlist server=/.cloakpoint.com/127.0.0.1#5335 ipset=/.cloakpoint.com/gfwlist -server=/.cloud.feedly.com/127.0.0.1#5335 -ipset=/.cloud.feedly.com/gfwlist server=/.cloud.mail.ru/127.0.0.1#5335 ipset=/.cloud.mail.ru/gfwlist server=/.club1069.com/127.0.0.1#5335 @@ -1790,8 +1740,6 @@ server=/.cn.freeones.com/127.0.0.1#5335 ipset=/.cn.freeones.com/gfwlist server=/.cn.ibtimes.com/127.0.0.1#5335 ipset=/.cn.ibtimes.com/gfwlist -server=/.cn.nytstyle.com/127.0.0.1#5335 -ipset=/.cn.nytstyle.com/gfwlist server=/.cn.sandscotaicentral.com/127.0.0.1#5335 ipset=/.cn.sandscotaicentral.com/gfwlist server=/.cn.shafaqna.com/127.0.0.1#5335 @@ -1948,8 +1896,6 @@ server=/.cristyli.com/127.0.0.1#5335 ipset=/.cristyli.com/gfwlist server=/.crocotube.com/127.0.0.1#5335 ipset=/.crocotube.com/gfwlist -server=/.crossfire.co.kr/127.0.0.1#5335 -ipset=/.crossfire.co.kr/gfwlist server=/.crossthewall.net/127.0.0.1#5335 ipset=/.crossthewall.net/gfwlist server=/.crossvpn.net/127.0.0.1#5335 @@ -1978,6 +1924,8 @@ server=/.ctitv.com.tw/127.0.0.1#5335 ipset=/.ctitv.com.tw/gfwlist server=/.cts.com.tw/127.0.0.1#5335 ipset=/.cts.com.tw/gfwlist +server=/.ctwant.com/127.0.0.1#5335 +ipset=/.ctwant.com/gfwlist server=/.cuihua.org/127.0.0.1#5335 ipset=/.cuihua.org/gfwlist server=/.cuiweiping.net/127.0.0.1#5335 @@ -2116,8 +2064,6 @@ server=/.darktech.org/127.0.0.1#5335 ipset=/.darktech.org/gfwlist server=/.darktoy.net/127.0.0.1#5335 ipset=/.darktoy.net/gfwlist -server=/.darpa.mil/127.0.0.1#5335 -ipset=/.darpa.mil/gfwlist server=/.dastrassi.org/127.0.0.1#5335 ipset=/.dastrassi.org/gfwlist server=/.data-vocabulary.org/127.0.0.1#5335 @@ -2130,8 +2076,6 @@ server=/.daum.net/127.0.0.1#5335 ipset=/.daum.net/gfwlist server=/.david-kilgour.com/127.0.0.1#5335 ipset=/.david-kilgour.com/gfwlist -server=/.dawangidc.com/127.0.0.1#5335 -ipset=/.dawangidc.com/gfwlist server=/.daxa.cn/127.0.0.1#5335 ipset=/.daxa.cn/gfwlist server=/.db.tt/127.0.0.1#5335 @@ -2166,6 +2110,8 @@ server=/.deck.ly/127.0.0.1#5335 ipset=/.deck.ly/gfwlist server=/.decodet.co/127.0.0.1#5335 ipset=/.decodet.co/gfwlist +server=/.deepdiscount.com/127.0.0.1#5335 +ipset=/.deepdiscount.com/gfwlist server=/.deepmind.com/127.0.0.1#5335 ipset=/.deepmind.com/gfwlist server=/.deezer.com/127.0.0.1#5335 @@ -2228,8 +2174,6 @@ server=/.diigo.com/127.0.0.1#5335 ipset=/.diigo.com/gfwlist server=/.dilber.se/127.0.0.1#5335 ipset=/.dilber.se/gfwlist -server=/.dingchin.com.tw/127.0.0.1#5335 -ipset=/.dingchin.com.tw/gfwlist server=/.dipity.com/127.0.0.1#5335 ipset=/.dipity.com/gfwlist server=/.directcreative.com/127.0.0.1#5335 @@ -2270,14 +2214,10 @@ server=/.dlsite.com/127.0.0.1#5335 ipset=/.dlsite.com/gfwlist server=/.dlyoutube.com/127.0.0.1#5335 ipset=/.dlyoutube.com/gfwlist -server=/.dm530.net/127.0.0.1#5335 -ipset=/.dm530.net/gfwlist server=/.dmcdn.net/127.0.0.1#5335 ipset=/.dmcdn.net/gfwlist server=/.dmhy.org/127.0.0.1#5335 ipset=/.dmhy.org/gfwlist -server=/.dmm.co.jp/127.0.0.1#5335 -ipset=/.dmm.co.jp/gfwlist server=/.dns-dns.com/127.0.0.1#5335 ipset=/.dns-dns.com/gfwlist server=/.dns-stuff.com/127.0.0.1#5335 @@ -2302,8 +2242,6 @@ server=/.dnsrd.com/127.0.0.1#5335 ipset=/.dnsrd.com/gfwlist server=/.dnssec.net/127.0.0.1#5335 ipset=/.dnssec.net/gfwlist -server=/.dnvod.tv/127.0.0.1#5335 -ipset=/.dnvod.tv/gfwlist server=/.doctorvoice.org/127.0.0.1#5335 ipset=/.doctorvoice.org/gfwlist server=/.documentingreality.com/127.0.0.1#5335 @@ -2338,6 +2276,8 @@ server=/.dontmovetochina.com/127.0.0.1#5335 ipset=/.dontmovetochina.com/gfwlist server=/.dorjeshugden.com/127.0.0.1#5335 ipset=/.dorjeshugden.com/gfwlist +server=/.dotgov.gov/127.0.0.1#5335 +ipset=/.dotgov.gov/gfwlist server=/.dotplane.com/127.0.0.1#5335 ipset=/.dotplane.com/gfwlist server=/.dotsub.com/127.0.0.1#5335 @@ -2438,6 +2378,8 @@ server=/.dupola.net/127.0.0.1#5335 ipset=/.dupola.net/gfwlist server=/.dushi.ca/127.0.0.1#5335 ipset=/.dushi.ca/gfwlist +server=/.duyaoss.com/127.0.0.1#5335 +ipset=/.duyaoss.com/gfwlist server=/.dvdpac.com/127.0.0.1#5335 ipset=/.dvdpac.com/gfwlist server=/.dvorak.org/127.0.0.1#5335 @@ -2554,8 +2496,6 @@ server=/.edubridge.com/127.0.0.1#5335 ipset=/.edubridge.com/gfwlist server=/.edupro.org/127.0.0.1#5335 ipset=/.edupro.org/gfwlist -server=/.eesti.ee/127.0.0.1#5335 -ipset=/.eesti.ee/gfwlist server=/.eevpn.com/127.0.0.1#5335 ipset=/.eevpn.com/gfwlist server=/.efcc.org.hk/127.0.0.1#5335 @@ -2702,8 +2642,6 @@ server=/.eslite.com/127.0.0.1#5335 ipset=/.eslite.com/gfwlist server=/.esmtp.biz/127.0.0.1#5335 ipset=/.esmtp.biz/gfwlist -server=/.esurance.com/127.0.0.1#5335 -ipset=/.esurance.com/gfwlist server=/.etaa.org.au/127.0.0.1#5335 ipset=/.etaa.org.au/gfwlist server=/.etadult.com/127.0.0.1#5335 @@ -2762,6 +2700,8 @@ server=/.exrates.me/127.0.0.1#5335 ipset=/.exrates.me/gfwlist server=/.extmatrix.com/127.0.0.1#5335 ipset=/.extmatrix.com/gfwlist +server=/.extrabux.com/127.0.0.1#5335 +ipset=/.extrabux.com/gfwlist server=/.extremetube.com/127.0.0.1#5335 ipset=/.extremetube.com/gfwlist server=/.exx.com/127.0.0.1#5335 @@ -2910,8 +2850,6 @@ server=/.farwestchina.com/127.0.0.1#5335 ipset=/.farwestchina.com/gfwlist server=/.fast.wistia.com/127.0.0.1#5335 ipset=/.fast.wistia.com/gfwlist -server=/.fastpic.ru/127.0.0.1#5335 -ipset=/.fastpic.ru/gfwlist server=/.fastssh.com/127.0.0.1#5335 ipset=/.fastssh.com/gfwlist server=/.faststone.org/127.0.0.1#5335 @@ -2952,6 +2890,8 @@ server=/.fdc89.jp/127.0.0.1#5335 ipset=/.fdc89.jp/gfwlist server=/.feedburner.com/127.0.0.1#5335 ipset=/.feedburner.com/gfwlist +server=/.feedly.com/127.0.0.1#5335 +ipset=/.feedly.com/gfwlist server=/.feeds.fileforum.com/127.0.0.1#5335 ipset=/.feeds.fileforum.com/gfwlist server=/.feedx.net/127.0.0.1#5335 @@ -2996,16 +2936,12 @@ server=/.fileflyer.com/127.0.0.1#5335 ipset=/.fileflyer.com/gfwlist server=/.files2me.com/127.0.0.1#5335 ipset=/.files2me.com/gfwlist -server=/.filesor.com/127.0.0.1#5335 -ipset=/.filesor.com/gfwlist server=/.fillthesquare.org/127.0.0.1#5335 ipset=/.fillthesquare.org/gfwlist server=/.filmingfortibet.org/127.0.0.1#5335 ipset=/.filmingfortibet.org/gfwlist server=/.filthdump.com/127.0.0.1#5335 ipset=/.filthdump.com/gfwlist -server=/.financetwitter.com/127.0.0.1#5335 -ipset=/.financetwitter.com/gfwlist server=/.finchvpn.com/127.0.0.1#5335 ipset=/.finchvpn.com/gfwlist server=/.findmespot.com/127.0.0.1#5335 @@ -3062,10 +2998,6 @@ server=/.flyvpn.com/127.0.0.1#5335 ipset=/.flyvpn.com/gfwlist server=/.flyzy2005.com/127.0.0.1#5335 ipset=/.flyzy2005.com/gfwlist -server=/.fnac.be/127.0.0.1#5335 -ipset=/.fnac.be/gfwlist -server=/.fnac.com/127.0.0.1#5335 -ipset=/.fnac.com/gfwlist server=/.fochk.org/127.0.0.1#5335 ipset=/.fochk.org/gfwlist server=/.focustaiwan.tw/127.0.0.1#5335 @@ -3208,6 +3140,8 @@ server=/.freeopenvpn.com/127.0.0.1#5335 ipset=/.freeopenvpn.com/gfwlist server=/.freeoz.org/127.0.0.1#5335 ipset=/.freeoz.org/gfwlist +server=/.freeproxylists.net/127.0.0.1#5335 +ipset=/.freeproxylists.net/gfwlist server=/.freessh.us/127.0.0.1#5335 ipset=/.freessh.us/gfwlist server=/.freetcp.com/127.0.0.1#5335 @@ -3318,8 +3252,6 @@ server=/.fw.cm/127.0.0.1#5335 ipset=/.fw.cm/gfwlist server=/.fxcm-chinese.com/127.0.0.1#5335 ipset=/.fxcm-chinese.com/gfwlist -server=/.fxnetworks.com/127.0.0.1#5335 -ipset=/.fxnetworks.com/gfwlist server=/.fzh999.com/127.0.0.1#5335 ipset=/.fzh999.com/gfwlist server=/.fzh999.net/127.0.0.1#5335 @@ -3332,6 +3264,8 @@ server=/.g-queen.com/127.0.0.1#5335 ipset=/.g-queen.com/gfwlist server=/.g.co/127.0.0.1#5335 ipset=/.g.co/gfwlist +server=/.g.kfd.me/127.0.0.1#5335 +ipset=/.g.kfd.me/gfwlist server=/.g0v.social/127.0.0.1#5335 ipset=/.g0v.social/gfwlist server=/.g6hentai.com/127.0.0.1#5335 @@ -3470,10 +3404,6 @@ server=/.getsync.com/127.0.0.1#5335 ipset=/.getsync.com/gfwlist server=/.gettrials.com/127.0.0.1#5335 ipset=/.gettrials.com/gfwlist -server=/.gettyimages.com/127.0.0.1#5335 -ipset=/.gettyimages.com/gfwlist -server=/.getuploader.com/127.0.0.1#5335 -ipset=/.getuploader.com/gfwlist server=/.gfbv.de/127.0.0.1#5335 ipset=/.gfbv.de/gfwlist server=/.gfgold.com.hk/127.0.0.1#5335 @@ -3512,8 +3442,6 @@ server=/.gjczz.com/127.0.0.1#5335 ipset=/.gjczz.com/gfwlist server=/.glass8.eu/127.0.0.1#5335 ipset=/.glass8.eu/gfwlist -server=/.global.bing.com/127.0.0.1#5335 -ipset=/.global.bing.com/gfwlist server=/.globaljihad.net/127.0.0.1#5335 ipset=/.globaljihad.net/gfwlist server=/.globalmediaoutreach.com/127.0.0.1#5335 @@ -3536,8 +3464,6 @@ server=/.gloryhole.com/127.0.0.1#5335 ipset=/.gloryhole.com/gfwlist server=/.glorystar.me/127.0.0.1#5335 ipset=/.glorystar.me/gfwlist -server=/.glype.com/127.0.0.1#5335 -ipset=/.glype.com/gfwlist server=/.gmail.com/127.0.0.1#5335 ipset=/.gmail.com/gfwlist server=/.gmbd.cn/127.0.0.1#5335 @@ -3552,6 +3478,8 @@ server=/.gmozomg.izihost.org/127.0.0.1#5335 ipset=/.gmozomg.izihost.org/gfwlist server=/.gnci.org.hk/127.0.0.1#5335 ipset=/.gnci.org.hk/gfwlist +server=/.gnews.org/127.0.0.1#5335 +ipset=/.gnews.org/gfwlist server=/.go-pki.com/127.0.0.1#5335 ipset=/.go-pki.com/gfwlist server=/.go.nesnode.com/127.0.0.1#5335 @@ -3736,8 +3664,6 @@ server=/.google.vu/127.0.0.1#5335 ipset=/.google.vu/gfwlist server=/.google.ws/127.0.0.1#5335 ipset=/.google.ws/gfwlist -server=/.googleapis.cn/127.0.0.1#5335 -ipset=/.googleapis.cn/gfwlist server=/.googleapis.com/127.0.0.1#5335 ipset=/.googleapis.com/gfwlist server=/.googleapps.com/127.0.0.1#5335 @@ -4106,8 +4032,6 @@ server=/.hitbtc.com/127.0.0.1#5335 ipset=/.hitbtc.com/gfwlist server=/.hitomi.la/127.0.0.1#5335 ipset=/.hitomi.la/gfwlist -server=/.hiwifi.com/127.0.0.1#5335 -ipset=/.hiwifi.com/gfwlist server=/.hizb-ut-tahrir.info/127.0.0.1#5335 ipset=/.hizb-ut-tahrir.info/gfwlist server=/.hizb-ut-tahrir.org/127.0.0.1#5335 @@ -4170,6 +4094,8 @@ server=/.hkdf.org/127.0.0.1#5335 ipset=/.hkdf.org/gfwlist server=/.hkej.com/127.0.0.1#5335 ipset=/.hkej.com/gfwlist +server=/.hket.com/127.0.0.1#5335 +ipset=/.hket.com/gfwlist server=/.hkfaa.com/127.0.0.1#5335 ipset=/.hkfaa.com/gfwlist server=/.hkfreezone.com/127.0.0.1#5335 @@ -4214,10 +4140,6 @@ server=/.hkzone.org/127.0.0.1#5335 ipset=/.hkzone.org/gfwlist server=/.hmonghot.com/127.0.0.1#5335 ipset=/.hmonghot.com/gfwlist -server=/.hmvdigital.ca/127.0.0.1#5335 -ipset=/.hmvdigital.ca/gfwlist -server=/.hmvdigital.com/127.0.0.1#5335 -ipset=/.hmvdigital.com/gfwlist server=/.hnjhj.com/127.0.0.1#5335 ipset=/.hnjhj.com/gfwlist server=/.hnntube.com/127.0.0.1#5335 @@ -4234,8 +4156,6 @@ server=/.holyspiritspeaks.org/127.0.0.1#5335 ipset=/.holyspiritspeaks.org/gfwlist server=/.home.sina.com/127.0.0.1#5335 ipset=/.home.sina.com/gfwlist -server=/.homedepot.com/127.0.0.1#5335 -ipset=/.homedepot.com/gfwlist server=/.homeperversion.com/127.0.0.1#5335 ipset=/.homeperversion.com/gfwlist server=/.homeservershow.com/127.0.0.1#5335 @@ -4248,8 +4168,6 @@ server=/.hongzhi.li/127.0.0.1#5335 ipset=/.hongzhi.li/gfwlist server=/.hootsuite.com/127.0.0.1#5335 ipset=/.hootsuite.com/gfwlist -server=/.hoovers.com/127.0.0.1#5335 -ipset=/.hoovers.com/gfwlist server=/.hopedialogue.org/127.0.0.1#5335 ipset=/.hopedialogue.org/gfwlist server=/.hopto.org/127.0.0.1#5335 @@ -4522,8 +4440,6 @@ server=/.illusionfactory.com/127.0.0.1#5335 ipset=/.illusionfactory.com/gfwlist server=/.ilove80.be/127.0.0.1#5335 ipset=/.ilove80.be/gfwlist -server=/.ilovelongtoes.com/127.0.0.1#5335 -ipset=/.ilovelongtoes.com/gfwlist server=/.im.tv/127.0.0.1#5335 ipset=/.im.tv/gfwlist server=/.im88.tw/127.0.0.1#5335 @@ -4536,8 +4452,6 @@ server=/.imageflea.com/127.0.0.1#5335 ipset=/.imageflea.com/gfwlist server=/.images-gaytube.com/127.0.0.1#5335 ipset=/.images-gaytube.com/gfwlist -server=/.images.comico.tw/127.0.0.1#5335 -ipset=/.images.comico.tw/gfwlist server=/.imageshack.us/127.0.0.1#5335 ipset=/.imageshack.us/gfwlist server=/.imagevenue.com/127.0.0.1#5335 @@ -4664,8 +4578,6 @@ server=/.isaacmao.com/127.0.0.1#5335 ipset=/.isaacmao.com/gfwlist server=/.isasecret.com/127.0.0.1#5335 ipset=/.isasecret.com/gfwlist -server=/.isc.sans.edu/127.0.0.1#5335 -ipset=/.isc.sans.edu/gfwlist server=/.isgreat.org/127.0.0.1#5335 ipset=/.isgreat.org/gfwlist server=/.islahhaber.net/127.0.0.1#5335 @@ -4748,6 +4660,8 @@ server=/.izlesem.org/127.0.0.1#5335 ipset=/.izlesem.org/gfwlist server=/.j.mp/127.0.0.1#5335 ipset=/.j.mp/gfwlist +server=/.jable.tv/127.0.0.1#5335 +ipset=/.jable.tv/gfwlist server=/.jamaat.org/127.0.0.1#5335 ipset=/.jamaat.org/gfwlist server=/.jamyangnorbu.com/127.0.0.1#5335 @@ -4770,18 +4684,18 @@ server=/.jav68.tv/127.0.0.1#5335 ipset=/.jav68.tv/gfwlist server=/.javakiba.org/127.0.0.1#5335 ipset=/.javakiba.org/gfwlist +server=/.javbus.co/127.0.0.1#5335 +ipset=/.javbus.co/gfwlist server=/.javbus.com/127.0.0.1#5335 ipset=/.javbus.com/gfwlist +server=/.javdb.com/127.0.0.1#5335 +ipset=/.javdb.com/gfwlist server=/.javfor.me/127.0.0.1#5335 ipset=/.javfor.me/gfwlist server=/.javhd.com/127.0.0.1#5335 ipset=/.javhd.com/gfwlist server=/.javhip.com/127.0.0.1#5335 ipset=/.javhip.com/gfwlist -server=/.javhub.net/127.0.0.1#5335 -ipset=/.javhub.net/gfwlist -server=/.javhuge.com/127.0.0.1#5335 -ipset=/.javhuge.com/gfwlist server=/.javlibrary.com/127.0.0.1#5335 ipset=/.javlibrary.com/gfwlist server=/.javmobile.net/127.0.0.1#5335 @@ -4804,8 +4718,6 @@ server=/.jbtalks.com/127.0.0.1#5335 ipset=/.jbtalks.com/gfwlist server=/.jbtalks.my/127.0.0.1#5335 ipset=/.jbtalks.my/gfwlist -server=/.jcpenney.com/127.0.0.1#5335 -ipset=/.jcpenney.com/gfwlist server=/.jdwsy.com/127.0.0.1#5335 ipset=/.jdwsy.com/gfwlist server=/.jeanyim.com/127.0.0.1#5335 @@ -4838,8 +4750,6 @@ server=/.jihadology.net/127.0.0.1#5335 ipset=/.jihadology.net/gfwlist server=/.jiji.com/127.0.0.1#5335 ipset=/.jiji.com/gfwlist -server=/.jims.net/127.0.0.1#5335 -ipset=/.jims.net/gfwlist server=/.jinbushe.org/127.0.0.1#5335 ipset=/.jinbushe.org/gfwlist server=/.jingpin.org/127.0.0.1#5335 @@ -4918,6 +4828,10 @@ server=/.justfreevpn.com/127.0.0.1#5335 ipset=/.justfreevpn.com/gfwlist server=/.justicefortenzin.org/127.0.0.1#5335 ipset=/.justicefortenzin.org/gfwlist +server=/.justmysocks.net/127.0.0.1#5335 +ipset=/.justmysocks.net/gfwlist +server=/.justmysocks1.net/127.0.0.1#5335 +ipset=/.justmysocks1.net/gfwlist server=/.justpaste.it/127.0.0.1#5335 ipset=/.justpaste.it/gfwlist server=/.justtristan.com/127.0.0.1#5335 @@ -4974,8 +4888,6 @@ server=/.kawaiikawaii.jp/127.0.0.1#5335 ipset=/.kawaiikawaii.jp/gfwlist server=/.kawase.com/127.0.0.1#5335 ipset=/.kawase.com/gfwlist -server=/.kb.monitorware.com/127.0.0.1#5335 -ipset=/.kb.monitorware.com/gfwlist server=/.kba-tx.org/127.0.0.1#5335 ipset=/.kba-tx.org/gfwlist server=/.kcoolonline.com/127.0.0.1#5335 @@ -4998,12 +4910,8 @@ server=/.kepard.com/127.0.0.1#5335 ipset=/.kepard.com/gfwlist server=/.kex.com/127.0.0.1#5335 ipset=/.kex.com/gfwlist -server=/.keycdn.com/127.0.0.1#5335 -ipset=/.keycdn.com/gfwlist server=/.khabdha.org/127.0.0.1#5335 ipset=/.khabdha.org/gfwlist -server=/.khatrimaza.org/127.0.0.1#5335 -ipset=/.khatrimaza.org/gfwlist server=/.khmusic.com.tw/127.0.0.1#5335 ipset=/.khmusic.com.tw/gfwlist server=/.kichiku-doujinko.com/127.0.0.1#5335 @@ -5034,14 +4942,14 @@ server=/.kir.jp/127.0.0.1#5335 ipset=/.kir.jp/gfwlist server=/.kissbbao.cn/127.0.0.1#5335 ipset=/.kissbbao.cn/gfwlist +server=/.kissjav.com/127.0.0.1#5335 +ipset=/.kissjav.com/gfwlist server=/.kiwi.kz/127.0.0.1#5335 ipset=/.kiwi.kz/gfwlist server=/.kk-whys.co.jp/127.0.0.1#5335 ipset=/.kk-whys.co.jp/gfwlist server=/.kkbox.com/127.0.0.1#5335 ipset=/.kkbox.com/gfwlist -server=/.kknews.cc/127.0.0.1#5335 -ipset=/.kknews.cc/gfwlist server=/.kmuh.org.tw/127.0.0.1#5335 ipset=/.kmuh.org.tw/gfwlist server=/.kobo.com/127.0.0.1#5335 @@ -5108,6 +5016,8 @@ server=/.ladbrokes.com/127.0.0.1#5335 ipset=/.ladbrokes.com/gfwlist server=/.lagranepoca.com/127.0.0.1#5335 ipset=/.lagranepoca.com/gfwlist +server=/.lala.im/127.0.0.1#5335 +ipset=/.lala.im/gfwlist server=/.lalulalu.com/127.0.0.1#5335 ipset=/.lalulalu.com/gfwlist server=/.lama.com.tw/127.0.0.1#5335 @@ -5166,8 +5076,6 @@ server=/.leirentv.ca/127.0.0.1#5335 ipset=/.leirentv.ca/gfwlist server=/.leisurecafe.ca/127.0.0.1#5335 ipset=/.leisurecafe.ca/gfwlist -server=/.leisurepro.com/127.0.0.1#5335 -ipset=/.leisurepro.com/gfwlist server=/.lematin.ch/127.0.0.1#5335 ipset=/.lematin.ch/gfwlist server=/.lemonde.fr/127.0.0.1#5335 @@ -5208,8 +5116,6 @@ server=/.liberal.org.hk/127.0.0.1#5335 ipset=/.liberal.org.hk/gfwlist server=/.libertytimes.com.tw/127.0.0.1#5335 ipset=/.libertytimes.com.tw/gfwlist -server=/.lifemiles.com/127.0.0.1#5335 -ipset=/.lifemiles.com/gfwlist server=/.lighten.org.tw/127.0.0.1#5335 ipset=/.lighten.org.tw/gfwlist server=/.lighti.me/127.0.0.1#5335 @@ -5316,8 +5222,6 @@ server=/.longmusic.com/127.0.0.1#5335 ipset=/.longmusic.com/gfwlist server=/.longtermly.net/127.0.0.1#5335 ipset=/.longtermly.net/gfwlist -server=/.longtoes.com/127.0.0.1#5335 -ipset=/.longtoes.com/gfwlist server=/.lookpic.com/127.0.0.1#5335 ipset=/.lookpic.com/gfwlist server=/.looktoronto.com/127.0.0.1#5335 @@ -5376,8 +5280,6 @@ server=/.m.plixi.com/127.0.0.1#5335 ipset=/.m.plixi.com/gfwlist server=/.m.slandr.net/127.0.0.1#5335 ipset=/.m.slandr.net/gfwlist -server=/.macgamestore.com/127.0.0.1#5335 -ipset=/.macgamestore.com/gfwlist server=/.macrovpn.com/127.0.0.1#5335 ipset=/.macrovpn.com/gfwlist server=/.macts.com.tw/127.0.0.1#5335 @@ -5420,10 +5322,6 @@ server=/.mamingzhe.com/127.0.0.1#5335 ipset=/.mamingzhe.com/gfwlist server=/.manchukuo.net/127.0.0.1#5335 ipset=/.manchukuo.net/gfwlist -server=/.mangafox.com/127.0.0.1#5335 -ipset=/.mangafox.com/gfwlist -server=/.mangafox.me/127.0.0.1#5335 -ipset=/.mangafox.me/gfwlist server=/.maniash.com/127.0.0.1#5335 ipset=/.maniash.com/gfwlist server=/.manicur4ik.ru/127.0.0.1#5335 @@ -5536,6 +5434,8 @@ server=/.meme.yahoo.com/127.0.0.1#5335 ipset=/.meme.yahoo.com/gfwlist server=/.memehk.com/127.0.0.1#5335 ipset=/.memehk.com/gfwlist +server=/.memes.tw/127.0.0.1#5335 +ipset=/.memes.tw/gfwlist server=/.memorybbs.com/127.0.0.1#5335 ipset=/.memorybbs.com/gfwlist server=/.memri.org/127.0.0.1#5335 @@ -5574,8 +5474,6 @@ server=/.meyou.jp/127.0.0.1#5335 ipset=/.meyou.jp/gfwlist server=/.meyul.com/127.0.0.1#5335 ipset=/.meyul.com/gfwlist -server=/.mfxmedia.com/127.0.0.1#5335 -ipset=/.mfxmedia.com/gfwlist server=/.mgoon.com/127.0.0.1#5335 ipset=/.mgoon.com/gfwlist server=/.mgstage.com/127.0.0.1#5335 @@ -5746,8 +5644,6 @@ server=/.moodyz.com/127.0.0.1#5335 ipset=/.moodyz.com/gfwlist server=/.moonbbs.com/127.0.0.1#5335 ipset=/.moonbbs.com/gfwlist -server=/.moonbingo.com/127.0.0.1#5335 -ipset=/.moonbingo.com/gfwlist server=/.morningsun.org/127.0.0.1#5335 ipset=/.morningsun.org/gfwlist server=/.moroneta.com/127.0.0.1#5335 @@ -5824,8 +5720,6 @@ server=/.muzi.com/127.0.0.1#5335 ipset=/.muzi.com/gfwlist server=/.muzi.net/127.0.0.1#5335 ipset=/.muzi.net/gfwlist -server=/.muzu.tv/127.0.0.1#5335 -ipset=/.muzu.tv/gfwlist server=/.mvdis.gov.tw/127.0.0.1#5335 ipset=/.mvdis.gov.tw/gfwlist server=/.mvg.jp/127.0.0.1#5335 @@ -5868,6 +5762,8 @@ server=/.mycnnews.com/127.0.0.1#5335 ipset=/.mycnnews.com/gfwlist server=/.mydad.info/127.0.0.1#5335 ipset=/.mydad.info/gfwlist +server=/.mydati.com/127.0.0.1#5335 +ipset=/.mydati.com/gfwlist server=/.myddns.com/127.0.0.1#5335 ipset=/.myddns.com/gfwlist server=/.myeasytv.com/127.0.0.1#5335 @@ -5890,6 +5786,8 @@ server=/.myftp.name/127.0.0.1#5335 ipset=/.myftp.name/gfwlist server=/.myiphide.com/127.0.0.1#5335 ipset=/.myiphide.com/gfwlist +server=/.myiphider.com/127.0.0.1#5335 +ipset=/.myiphider.com/gfwlist server=/.mykomica.org/127.0.0.1#5335 ipset=/.mykomica.org/gfwlist server=/.mylftv.com/127.0.0.1#5335 @@ -5986,6 +5884,8 @@ server=/.nccwatch.org.tw/127.0.0.1#5335 ipset=/.nccwatch.org.tw/gfwlist server=/.nch.com.tw/127.0.0.1#5335 ipset=/.nch.com.tw/gfwlist +server=/.nchrd.org/127.0.0.1#5335 +ipset=/.nchrd.org/gfwlist server=/.ncn.org/127.0.0.1#5335 ipset=/.ncn.org/gfwlist server=/.nde.de/127.0.0.1#5335 @@ -5996,8 +5896,6 @@ server=/.ned.org/127.0.0.1#5335 ipset=/.ned.org/gfwlist server=/.nekoslovakia.net/127.0.0.1#5335 ipset=/.nekoslovakia.net/gfwlist -server=/.neo-miracle.com/127.0.0.1#5335 -ipset=/.neo-miracle.com/gfwlist server=/.nepusoku.com/127.0.0.1#5335 ipset=/.nepusoku.com/gfwlist server=/.net-fits.pro/127.0.0.1#5335 @@ -6128,8 +6026,6 @@ server=/.nic.cz.cc/127.0.0.1#5335 ipset=/.nic.cz.cc/gfwlist server=/.nic.google/127.0.0.1#5335 ipset=/.nic.google/gfwlist -server=/.nic.gov/127.0.0.1#5335 -ipset=/.nic.gov/gfwlist server=/.nicovideo.jp/127.0.0.1#5335 ipset=/.nicovideo.jp/gfwlist server=/.nighost.org/127.0.0.1#5335 @@ -6176,16 +6072,14 @@ server=/.norbulingka.org/127.0.0.1#5335 ipset=/.norbulingka.org/gfwlist server=/.nordstrom.com/127.0.0.1#5335 ipset=/.nordstrom.com/gfwlist -server=/.nordstromimage.com/127.0.0.1#5335 -ipset=/.nordstromimage.com/gfwlist +server=/.nordstrommedia.com/127.0.0.1#5335 +ipset=/.nordstrommedia.com/gfwlist server=/.nordstromrack.com/127.0.0.1#5335 ipset=/.nordstromrack.com/gfwlist server=/.nordvpn.com/127.0.0.1#5335 ipset=/.nordvpn.com/gfwlist server=/.notify.dropboxapi.com/127.0.0.1#5335 ipset=/.notify.dropboxapi.com/gfwlist -server=/.nottinghampost.com/127.0.0.1#5335 -ipset=/.nottinghampost.com/gfwlist server=/.novelasia.com/127.0.0.1#5335 ipset=/.novelasia.com/gfwlist server=/.now.com/127.0.0.1#5335 @@ -6206,8 +6100,6 @@ server=/.npnt.me/127.0.0.1#5335 ipset=/.npnt.me/gfwlist server=/.nps.gov/127.0.0.1#5335 ipset=/.nps.gov/gfwlist -server=/.npsboost.com/127.0.0.1#5335 -ipset=/.npsboost.com/gfwlist server=/.nradio.me/127.0.0.1#5335 ipset=/.nradio.me/gfwlist server=/.nrk.no/127.0.0.1#5335 @@ -6246,8 +6138,6 @@ server=/.ntdtv.co.kr/127.0.0.1#5335 ipset=/.ntdtv.co.kr/gfwlist server=/.ntdtv.com/127.0.0.1#5335 ipset=/.ntdtv.com/gfwlist -server=/.ntdtv.cz/127.0.0.1#5335 -ipset=/.ntdtv.cz/gfwlist server=/.ntdtv.org/127.0.0.1#5335 ipset=/.ntdtv.org/gfwlist server=/.ntdtv.ru/127.0.0.1#5335 @@ -6260,14 +6150,14 @@ server=/.ntsna.gov.tw/127.0.0.1#5335 ipset=/.ntsna.gov.tw/gfwlist server=/.nubiles.net/127.0.0.1#5335 ipset=/.nubiles.net/gfwlist +server=/.nudezz.com/127.0.0.1#5335 +ipset=/.nudezz.com/gfwlist server=/.nuexpo.com/127.0.0.1#5335 ipset=/.nuexpo.com/gfwlist server=/.nukistream.com/127.0.0.1#5335 ipset=/.nukistream.com/gfwlist server=/.nurgo-software.com/127.0.0.1#5335 ipset=/.nurgo-software.com/gfwlist -server=/.nusatrip.com/127.0.0.1#5335 -ipset=/.nusatrip.com/gfwlist server=/.nutaku.net/127.0.0.1#5335 ipset=/.nutaku.net/gfwlist server=/.nuuvem.com/127.0.0.1#5335 @@ -6382,8 +6272,6 @@ server=/.on.cc/127.0.0.1#5335 ipset=/.on.cc/gfwlist server=/.on2.com/127.0.0.1#5335 ipset=/.on2.com/gfwlist -server=/.onapp.com/127.0.0.1#5335 -ipset=/.onapp.com/gfwlist server=/.onedrive.live.com/127.0.0.1#5335 ipset=/.onedrive.live.com/gfwlist server=/.onedumb.com/127.0.0.1#5335 @@ -6416,8 +6304,6 @@ server=/.onmypc.us/127.0.0.1#5335 ipset=/.onmypc.us/gfwlist server=/.onthehunt.com/127.0.0.1#5335 ipset=/.onthehunt.com/gfwlist -server=/.ontrac.com/127.0.0.1#5335 -ipset=/.ontrac.com/gfwlist server=/.oopsforum.com/127.0.0.1#5335 ipset=/.oopsforum.com/gfwlist server=/.open.com.hk/127.0.0.1#5335 @@ -6440,8 +6326,6 @@ server=/.openvpn.org/127.0.0.1#5335 ipset=/.openvpn.org/gfwlist server=/.openwebster.com/127.0.0.1#5335 ipset=/.openwebster.com/gfwlist -server=/.openwrt.org.cn/127.0.0.1#5335 -ipset=/.openwrt.org.cn/gfwlist server=/.opml.radiotime.com/127.0.0.1#5335 ipset=/.opml.radiotime.com/gfwlist server=/.opus-gaming.com/127.0.0.1#5335 @@ -6552,8 +6436,6 @@ server=/.paradisehill.cc/127.0.0.1#5335 ipset=/.paradisehill.cc/gfwlist server=/.paradisepoker.com/127.0.0.1#5335 ipset=/.paradisepoker.com/gfwlist -server=/.parkansky.com/127.0.0.1#5335 -ipset=/.parkansky.com/gfwlist server=/.partycasino.com/127.0.0.1#5335 ipset=/.partycasino.com/gfwlist server=/.partypoker.com/127.0.0.1#5335 @@ -6606,6 +6488,8 @@ server=/.pearlher.org/127.0.0.1#5335 ipset=/.pearlher.org/gfwlist server=/.peeasian.com/127.0.0.1#5335 ipset=/.peeasian.com/gfwlist +server=/.peing.net/127.0.0.1#5335 +ipset=/.peing.net/gfwlist server=/.pekingduck.org/127.0.0.1#5335 ipset=/.pekingduck.org/gfwlist server=/.pemulihan.or.id/127.0.0.1#5335 @@ -6812,6 +6696,8 @@ server=/.pornhub.com/127.0.0.1#5335 ipset=/.pornhub.com/gfwlist server=/.pornhubdeutsch.net/127.0.0.1#5335 ipset=/.pornhubdeutsch.net/gfwlist +server=/.pornhubpremium.com/127.0.0.1#5335 +ipset=/.pornhubpremium.com/gfwlist server=/.pornmm.net/127.0.0.1#5335 ipset=/.pornmm.net/gfwlist server=/.pornoxo.com/127.0.0.1#5335 @@ -6906,6 +6792,8 @@ server=/.proxomitron.info/127.0.0.1#5335 ipset=/.proxomitron.info/gfwlist server=/.proxpn.com/127.0.0.1#5335 ipset=/.proxpn.com/gfwlist +server=/.proxy.org/127.0.0.1#5335 +ipset=/.proxy.org/gfwlist server=/.proxy1.xyz/127.0.0.1#5335 ipset=/.proxy1.xyz/gfwlist server=/.proxyanonimo.es/127.0.0.1#5335 @@ -6948,6 +6836,8 @@ server=/.pttvan.org/127.0.0.1#5335 ipset=/.pttvan.org/gfwlist server=/.pubu.com.tw/127.0.0.1#5335 ipset=/.pubu.com.tw/gfwlist +server=/.puffin.com/127.0.0.1#5335 +ipset=/.puffin.com/gfwlist server=/.puffinbrowser.com/127.0.0.1#5335 ipset=/.puffinbrowser.com/gfwlist server=/.puffstore.com/127.0.0.1#5335 @@ -6956,8 +6846,6 @@ server=/.pullfolio.com/127.0.0.1#5335 ipset=/.pullfolio.com/gfwlist server=/.pulse.yahoo.com/127.0.0.1#5335 ipset=/.pulse.yahoo.com/gfwlist -server=/.pure18.com/127.0.0.1#5335 -ipset=/.pure18.com/gfwlist server=/.pureconcepts.net/127.0.0.1#5335 ipset=/.pureconcepts.net/gfwlist server=/.pureinsight.org/127.0.0.1#5335 @@ -6984,8 +6872,6 @@ server=/.pwned.com/127.0.0.1#5335 ipset=/.pwned.com/gfwlist server=/.python.com/127.0.0.1#5335 ipset=/.python.com/gfwlist -server=/.pytorch.org/127.0.0.1#5335 -ipset=/.pytorch.org/gfwlist server=/.qanote.com/127.0.0.1#5335 ipset=/.qanote.com/gfwlist server=/.qgirl.com.tw/127.0.0.1#5335 @@ -6996,6 +6882,8 @@ server=/.qi-gong.me/127.0.0.1#5335 ipset=/.qi-gong.me/gfwlist server=/.qiandao.today/127.0.0.1#5335 ipset=/.qiandao.today/gfwlist +server=/.qiangwaikan.com/127.0.0.1#5335 +ipset=/.qiangwaikan.com/gfwlist server=/.qiangyou.org/127.0.0.1#5335 ipset=/.qiangyou.org/gfwlist server=/.qidian.ca/127.0.0.1#5335 @@ -7012,8 +6900,6 @@ server=/.qoos.com/127.0.0.1#5335 ipset=/.qoos.com/gfwlist server=/.qpoe.com/127.0.0.1#5335 ipset=/.qpoe.com/gfwlist -server=/.qq.co.za/127.0.0.1#5335 -ipset=/.qq.co.za/gfwlist server=/.qstatus.com/127.0.0.1#5335 ipset=/.qstatus.com/gfwlist server=/.qtrac.eu/127.0.0.1#5335 @@ -7046,8 +6932,6 @@ server=/.qxbbs.org/127.0.0.1#5335 ipset=/.qxbbs.org/gfwlist server=/.qz.com/127.0.0.1#5335 ipset=/.qz.com/gfwlist -server=/.r18.com/127.0.0.1#5335 -ipset=/.r18.com/gfwlist server=/.ra.gg/127.0.0.1#5335 ipset=/.ra.gg/gfwlist server=/.radicalparty.org/127.0.0.1#5335 @@ -7070,8 +6954,8 @@ server=/.raidtalk.com.tw/127.0.0.1#5335 ipset=/.raidtalk.com.tw/gfwlist server=/.raizoji.or.jp/127.0.0.1#5335 ipset=/.raizoji.or.jp/gfwlist -server=/.ramcity.com.au/127.0.0.1#5335 -ipset=/.ramcity.com.au/gfwlist +server=/.rakuten.co.jp/127.0.0.1#5335 +ipset=/.rakuten.co.jp/gfwlist server=/.rangwang.biz/127.0.0.1#5335 ipset=/.rangwang.biz/gfwlist server=/.rangzen.com/127.0.0.1#5335 @@ -7108,12 +6992,6 @@ server=/.rcinet.ca/127.0.0.1#5335 ipset=/.rcinet.ca/gfwlist server=/.rconversation.blogs.com/127.0.0.1#5335 ipset=/.rconversation.blogs.com/gfwlist -server=/.rd.com/127.0.0.1#5335 -ipset=/.rd.com/gfwlist -server=/.rdio.com/127.0.0.1#5335 -ipset=/.rdio.com/gfwlist -server=/.read01.com/127.0.0.1#5335 -ipset=/.read01.com/gfwlist server=/.read100.com/127.0.0.1#5335 ipset=/.read100.com/gfwlist server=/.readingtimes.com.tw/127.0.0.1#5335 @@ -7126,8 +7004,6 @@ server=/.realcourage.org/127.0.0.1#5335 ipset=/.realcourage.org/gfwlist server=/.realforum.zkiz.com/127.0.0.1#5335 ipset=/.realforum.zkiz.com/gfwlist -server=/.realitykings.com/127.0.0.1#5335 -ipset=/.realitykings.com/gfwlist server=/.realraptalk.com/127.0.0.1#5335 ipset=/.realraptalk.com/gfwlist server=/.realsexpass.com/127.0.0.1#5335 @@ -7298,8 +7174,6 @@ server=/.s-cute.com/127.0.0.1#5335 ipset=/.s-cute.com/gfwlist server=/.s-dragon.org/127.0.0.1#5335 ipset=/.s-dragon.org/gfwlist -server=/.s1.nudezz.com/127.0.0.1#5335 -ipset=/.s1.nudezz.com/gfwlist server=/.s1heng.com/127.0.0.1#5335 ipset=/.s1heng.com/gfwlist server=/.s1s1s1.com/127.0.0.1#5335 @@ -7472,8 +7346,6 @@ server=/.sexinsex.net/127.0.0.1#5335 ipset=/.sexinsex.net/gfwlist server=/.sextvx.com/127.0.0.1#5335 ipset=/.sextvx.com/gfwlist -server=/.sexxxy.biz/127.0.0.1#5335 -ipset=/.sexxxy.biz/gfwlist server=/.sfileydy.com/127.0.0.1#5335 ipset=/.sfileydy.com/gfwlist server=/.sfshibao.com/127.0.0.1#5335 @@ -7514,8 +7386,6 @@ server=/.shapeservices.com/127.0.0.1#5335 ipset=/.shapeservices.com/gfwlist server=/.share.america.gov/127.0.0.1#5335 ipset=/.share.america.gov/gfwlist -server=/.share.dmhy.org/127.0.0.1#5335 -ipset=/.share.dmhy.org/gfwlist server=/.share.youthwant.com.tw/127.0.0.1#5335 ipset=/.share.youthwant.com.tw/gfwlist server=/.sharebee.com/127.0.0.1#5335 @@ -7552,6 +7422,8 @@ server=/.shicheng.org/127.0.0.1#5335 ipset=/.shicheng.org/gfwlist server=/.shiksha.com/127.0.0.1#5335 ipset=/.shiksha.com/gfwlist +server=/.shiksha.ws/127.0.0.1#5335 +ipset=/.shiksha.ws/gfwlist server=/.shinychan.com/127.0.0.1#5335 ipset=/.shinychan.com/gfwlist server=/.shipcamouflage.com/127.0.0.1#5335 @@ -7620,8 +7492,6 @@ server=/.sino-monthly.com/127.0.0.1#5335 ipset=/.sino-monthly.com/gfwlist server=/.sinoants.com/127.0.0.1#5335 ipset=/.sinoants.com/gfwlist -server=/.sinocast.com/127.0.0.1#5335 -ipset=/.sinocast.com/gfwlist server=/.sinocism.com/127.0.0.1#5335 ipset=/.sinocism.com/gfwlist server=/.sinomontreal.ca/127.0.0.1#5335 @@ -7670,8 +7540,6 @@ server=/.skyvegas.com/127.0.0.1#5335 ipset=/.skyvegas.com/gfwlist server=/.skyxvpn.com/127.0.0.1#5335 ipset=/.skyxvpn.com/gfwlist -server=/.slacker.com/127.0.0.1#5335 -ipset=/.slacker.com/gfwlist server=/.slaytizle.com/127.0.0.1#5335 ipset=/.slaytizle.com/gfwlist server=/.sleazydream.com/127.0.0.1#5335 @@ -7812,8 +7680,6 @@ server=/.southnews.com.tw/127.0.0.1#5335 ipset=/.southnews.com.tw/gfwlist server=/.sowers.org.hk/127.0.0.1#5335 ipset=/.sowers.org.hk/gfwlist -server=/.soylentnews.org/127.0.0.1#5335 -ipset=/.soylentnews.org/gfwlist server=/.spaces.hightail.com/127.0.0.1#5335 ipset=/.spaces.hightail.com/gfwlist server=/.spankbang.com/127.0.0.1#5335 @@ -7848,12 +7714,8 @@ server=/.spotflux.com/127.0.0.1#5335 ipset=/.spotflux.com/gfwlist server=/.spotify.com/127.0.0.1#5335 ipset=/.spotify.com/gfwlist -server=/.spreadshirt.es/127.0.0.1#5335 -ipset=/.spreadshirt.es/gfwlist server=/.spring4u.info/127.0.0.1#5335 ipset=/.spring4u.info/gfwlist -server=/.springboardplatform.com/127.0.0.1#5335 -ipset=/.springboardplatform.com/gfwlist server=/.sproutcore.com/127.0.0.1#5335 ipset=/.sproutcore.com/gfwlist server=/.sproxy.info/127.0.0.1#5335 @@ -7876,8 +7738,6 @@ server=/.ssglobal.me/127.0.0.1#5335 ipset=/.ssglobal.me/gfwlist server=/.ssh91.com/127.0.0.1#5335 ipset=/.ssh91.com/gfwlist -server=/.ssl.webpack.de/127.0.0.1#5335 -ipset=/.ssl.webpack.de/gfwlist server=/.ssl443.org/127.0.0.1#5335 ipset=/.ssl443.org/gfwlist server=/.sspanel.net/127.0.0.1#5335 @@ -7910,8 +7770,6 @@ server=/.stat.gov.tw/127.0.0.1#5335 ipset=/.stat.gov.tw/gfwlist server=/.static-economist.com/127.0.0.1#5335 ipset=/.static-economist.com/gfwlist -server=/.static.comico.tw/127.0.0.1#5335 -ipset=/.static.comico.tw/gfwlist server=/.static.shemalez.com/127.0.0.1#5335 ipset=/.static.shemalez.com/gfwlist server=/.static01.nyt.com/127.0.0.1#5335 @@ -7920,6 +7778,8 @@ server=/.staticflickr.com/127.0.0.1#5335 ipset=/.staticflickr.com/gfwlist server=/.statueofdemocracy.org/127.0.0.1#5335 ipset=/.statueofdemocracy.org/gfwlist +server=/.stboy.net/127.0.0.1#5335 +ipset=/.stboy.net/gfwlist server=/.stc.com.sa/127.0.0.1#5335 ipset=/.stc.com.sa/gfwlist server=/.steamcommunity.com/127.0.0.1#5335 @@ -8020,8 +7880,6 @@ server=/.supchina.com/127.0.0.1#5335 ipset=/.supchina.com/gfwlist server=/.superfreevpn.com/127.0.0.1#5335 ipset=/.superfreevpn.com/gfwlist -server=/.superokayama.com/127.0.0.1#5335 -ipset=/.superokayama.com/gfwlist server=/.superpages.com/127.0.0.1#5335 ipset=/.superpages.com/gfwlist server=/.supervpn.net/127.0.0.1#5335 @@ -8044,8 +7902,6 @@ server=/.suyangg.com/127.0.0.1#5335 ipset=/.suyangg.com/gfwlist server=/.svsfx.com/127.0.0.1#5335 ipset=/.svsfx.com/gfwlist -server=/.swagbucks.com/127.0.0.1#5335 -ipset=/.swagbucks.com/gfwlist server=/.swissinfo.ch/127.0.0.1#5335 ipset=/.swissinfo.ch/gfwlist server=/.swissvpn.net/127.0.0.1#5335 @@ -8164,8 +8020,6 @@ server=/.taoism.net/127.0.0.1#5335 ipset=/.taoism.net/gfwlist server=/.taolun.info/127.0.0.1#5335 ipset=/.taolun.info/gfwlist -server=/.tapanwap.com/127.0.0.1#5335 -ipset=/.tapanwap.com/gfwlist server=/.tapatalk.com/127.0.0.1#5335 ipset=/.tapatalk.com/gfwlist server=/.tascn.com.au/127.0.0.1#5335 @@ -9038,8 +8892,6 @@ server=/.twitterrific.com/127.0.0.1#5335 ipset=/.twitterrific.com/gfwlist server=/.twittertim.es/127.0.0.1#5335 ipset=/.twittertim.es/gfwlist -server=/.twitthat.com/127.0.0.1#5335 -ipset=/.twitthat.com/gfwlist server=/.twitturk.com/127.0.0.1#5335 ipset=/.twitturk.com/gfwlist server=/.twitturly.com/127.0.0.1#5335 @@ -9250,14 +9102,14 @@ server=/.uyghurcongress.org/127.0.0.1#5335 ipset=/.uyghurcongress.org/gfwlist server=/.uyghurensemble.co.uk/127.0.0.1#5335 ipset=/.uyghurensemble.co.uk/gfwlist -server=/.uyghurpen.org/127.0.0.1#5335 -ipset=/.uyghurpen.org/gfwlist server=/.uyghurpress.com/127.0.0.1#5335 ipset=/.uyghurpress.com/gfwlist server=/.uyghurstudies.org/127.0.0.1#5335 ipset=/.uyghurstudies.org/gfwlist server=/.uygur.org/127.0.0.1#5335 ipset=/.uygur.org/gfwlist +server=/.v2mm.tech/127.0.0.1#5335 +ipset=/.v2mm.tech/gfwlist server=/.v2ray.com/127.0.0.1#5335 ipset=/.v2ray.com/gfwlist server=/.van001.com/127.0.0.1#5335 @@ -9408,8 +9260,6 @@ server=/.vocn.tv/127.0.0.1#5335 ipset=/.vocn.tv/gfwlist server=/.vod-abematv.akamaized.net/127.0.0.1#5335 ipset=/.vod-abematv.akamaized.net/gfwlist -server=/.vod.wwe.com/127.0.0.1#5335 -ipset=/.vod.wwe.com/gfwlist server=/.vot.org/127.0.0.1#5335 ipset=/.vot.org/gfwlist server=/.vovo2000.com/127.0.0.1#5335 @@ -9502,8 +9352,6 @@ server=/.vpnworldwide.com/127.0.0.1#5335 ipset=/.vpnworldwide.com/gfwlist server=/.vporn.com/127.0.0.1#5335 ipset=/.vporn.com/gfwlist -server=/.vpser.net/127.0.0.1#5335 -ipset=/.vpser.net/gfwlist server=/.vraiesagesse.net/127.0.0.1#5335 ipset=/.vraiesagesse.net/gfwlist server=/.vrmtr.com/127.0.0.1#5335 @@ -9646,6 +9494,8 @@ server=/.wengewang.org/127.0.0.1#5335 ipset=/.wengewang.org/gfwlist server=/.wenhui.ch/127.0.0.1#5335 ipset=/.wenhui.ch/gfwlist +server=/.wenweipo.com/127.0.0.1#5335 +ipset=/.wenweipo.com/gfwlist server=/.wenxuecity.com/127.0.0.1#5335 ipset=/.wenxuecity.com/gfwlist server=/.wenyunchao.com/127.0.0.1#5335 @@ -9672,8 +9522,6 @@ server=/.wezhiyong.org/127.0.0.1#5335 ipset=/.wezhiyong.org/gfwlist server=/.wezone.net/127.0.0.1#5335 ipset=/.wezone.net/gfwlist -server=/.wforum.com/127.0.0.1#5335 -ipset=/.wforum.com/gfwlist server=/.wha.la/127.0.0.1#5335 ipset=/.wha.la/gfwlist server=/.whatblocked.com/127.0.0.1#5335 @@ -9690,8 +9538,6 @@ server=/.wheelockslatin.com/127.0.0.1#5335 ipset=/.wheelockslatin.com/gfwlist server=/.whereiswerner.com/127.0.0.1#5335 ipset=/.whereiswerner.com/gfwlist -server=/.wheretowatch.com/127.0.0.1#5335 -ipset=/.wheretowatch.com/gfwlist server=/.whichav.com/127.0.0.1#5335 ipset=/.whichav.com/gfwlist server=/.whippedass.com/127.0.0.1#5335 @@ -9718,6 +9564,8 @@ server=/.wiki.gamerp.jp/127.0.0.1#5335 ipset=/.wiki.gamerp.jp/gfwlist server=/.wiki.jqueryui.com/127.0.0.1#5335 ipset=/.wiki.jqueryui.com/gfwlist +server=/.wiki.kfd.me/127.0.0.1#5335 +ipset=/.wiki.kfd.me/gfwlist server=/.wiki.moegirl.org/127.0.0.1#5335 ipset=/.wiki.moegirl.org/gfwlist server=/.wiki.oauth.net/127.0.0.1#5335 @@ -9744,6 +9592,8 @@ server=/.wikimapia.org/127.0.0.1#5335 ipset=/.wikimapia.org/gfwlist server=/.wikipedia.org/127.0.0.1#5335 ipset=/.wikipedia.org/gfwlist +server=/.wikiwand.com/127.0.0.1#5335 +ipset=/.wikiwand.com/gfwlist server=/.wikiwiki.jp/127.0.0.1#5335 ipset=/.wikiwiki.jp/gfwlist server=/.wildammo.com/127.0.0.1#5335 @@ -9756,8 +9606,6 @@ server=/.windowsphoneme.com/127.0.0.1#5335 ipset=/.windowsphoneme.com/gfwlist server=/.windscribe.com/127.0.0.1#5335 ipset=/.windscribe.com/gfwlist -server=/.wingamestore.com/127.0.0.1#5335 -ipset=/.wingamestore.com/gfwlist server=/.wingy.site/127.0.0.1#5335 ipset=/.wingy.site/gfwlist server=/.winning11.com/127.0.0.1#5335 @@ -9798,12 +9646,12 @@ server=/.wnacg.org/127.0.0.1#5335 ipset=/.wnacg.org/gfwlist server=/.wo.tc/127.0.0.1#5335 ipset=/.wo.tc/gfwlist +server=/.wo3t.wordpress.com/127.0.0.1#5335 +ipset=/.wo3t.wordpress.com/gfwlist server=/.wo3ttt.wordpress.com/127.0.0.1#5335 ipset=/.wo3ttt.wordpress.com/gfwlist server=/.woeser.com/127.0.0.1#5335 ipset=/.woeser.com/gfwlist -server=/.wokar.org/127.0.0.1#5335 -ipset=/.wokar.org/gfwlist server=/.wolfax.com/127.0.0.1#5335 ipset=/.wolfax.com/gfwlist server=/.woolyss.com/127.0.0.1#5335 @@ -9812,8 +9660,6 @@ server=/.woopie.jp/127.0.0.1#5335 ipset=/.woopie.jp/gfwlist server=/.woopie.tv/127.0.0.1#5335 ipset=/.woopie.tv/gfwlist -server=/.wordpress.com/127.0.0.1#5335 -ipset=/.wordpress.com/gfwlist server=/.workatruna.com/127.0.0.1#5335 ipset=/.workatruna.com/gfwlist server=/.workerdemo.org.hk/127.0.0.1#5335 @@ -9846,8 +9692,6 @@ server=/.woyaolian.org/127.0.0.1#5335 ipset=/.woyaolian.org/gfwlist server=/.wozy.in/127.0.0.1#5335 ipset=/.wozy.in/gfwlist -server=/.wp.com/127.0.0.1#5335 -ipset=/.wp.com/gfwlist server=/.wpoforum.com/127.0.0.1#5335 ipset=/.wpoforum.com/gfwlist server=/.wqyd.org/127.0.0.1#5335 @@ -9870,8 +9714,6 @@ server=/.wtbn.org/127.0.0.1#5335 ipset=/.wtbn.org/gfwlist server=/.wtfpeople.com/127.0.0.1#5335 ipset=/.wtfpeople.com/gfwlist -server=/.wuerkaixi.com/127.0.0.1#5335 -ipset=/.wuerkaixi.com/gfwlist server=/.wufafangwen.com/127.0.0.1#5335 ipset=/.wufafangwen.com/gfwlist server=/.wufi.org.tw/127.0.0.1#5335 @@ -9890,8 +9732,6 @@ server=/.wuyanblog.com/127.0.0.1#5335 ipset=/.wuyanblog.com/gfwlist server=/.wwitv.com/127.0.0.1#5335 ipset=/.wwitv.com/gfwlist -server=/.www.abclite.net/127.0.0.1#5335 -ipset=/.www.abclite.net/gfwlist server=/.www.ajsands.com/127.0.0.1#5335 ipset=/.www.ajsands.com/gfwlist server=/.www.americorps.gov/127.0.0.1#5335 @@ -9934,10 +9774,6 @@ server=/.www.powerpointninja.com/127.0.0.1#5335 ipset=/.www.powerpointninja.com/gfwlist server=/.www.s4miniarchive.com/127.0.0.1#5335 ipset=/.www.s4miniarchive.com/gfwlist -server=/.www.shadowsocks.com/127.0.0.1#5335 -ipset=/.www.shadowsocks.com/gfwlist -server=/.www.shwchurch.org/127.0.0.1#5335 -ipset=/.www.shwchurch.org/gfwlist server=/.www.taup.org.tw/127.0.0.1#5335 ipset=/.www.taup.org.tw/gfwlist server=/.www.wan-press.org/127.0.0.1#5335 @@ -9948,8 +9784,6 @@ server=/.www.websnapr.com/127.0.0.1#5335 ipset=/.www.websnapr.com/gfwlist server=/.www1.biz/127.0.0.1#5335 ipset=/.www1.biz/gfwlist -server=/.wwwhost.biz/127.0.0.1#5335 -ipset=/.wwwhost.biz/gfwlist server=/.x-art.com/127.0.0.1#5335 ipset=/.x-art.com/gfwlist server=/.x-berry.com/127.0.0.1#5335 @@ -10052,6 +9886,8 @@ server=/.xmovies.com/127.0.0.1#5335 ipset=/.xmovies.com/gfwlist server=/.xn--4gq171p.com/127.0.0.1#5335 ipset=/.xn--4gq171p.com/gfwlist +server=/.xn--90wwvt03e.com/127.0.0.1#5335 +ipset=/.xn--90wwvt03e.com/gfwlist server=/.xn--czq75pvv1aj5c.org/127.0.0.1#5335 ipset=/.xn--czq75pvv1aj5c.org/gfwlist server=/.xn--i2ru8q2qg.com/127.0.0.1#5335 @@ -10244,8 +10080,6 @@ server=/.youtubegaming.com/127.0.0.1#5335 ipset=/.youtubegaming.com/gfwlist server=/.youversion.com/127.0.0.1#5335 ipset=/.youversion.com/gfwlist -server=/.youwin.com/127.0.0.1#5335 -ipset=/.youwin.com/gfwlist server=/.youxu.info/127.0.0.1#5335 ipset=/.youxu.info/gfwlist server=/.yt.be/127.0.0.1#5335 @@ -10254,8 +10088,6 @@ server=/.ytht.net/127.0.0.1#5335 ipset=/.ytht.net/gfwlist server=/.ytimg.com/127.0.0.1#5335 ipset=/.ytimg.com/gfwlist -server=/.ytn.co.kr/127.0.0.1#5335 -ipset=/.ytn.co.kr/gfwlist server=/.yuanming.net/127.0.0.1#5335 ipset=/.yuanming.net/gfwlist server=/.yuanzhengtang.org/127.0.0.1#5335 @@ -10352,16 +10184,10 @@ server=/.zhongguorenquan.org/127.0.0.1#5335 ipset=/.zhongguorenquan.org/gfwlist server=/.zhongguotese.net/127.0.0.1#5335 ipset=/.zhongguotese.net/gfwlist -server=/.zhongmeng.org/127.0.0.1#5335 -ipset=/.zhongmeng.org/gfwlist server=/.zhoushuguang.com/127.0.0.1#5335 ipset=/.zhoushuguang.com/gfwlist server=/.zhreader.com/127.0.0.1#5335 ipset=/.zhreader.com/gfwlist -server=/.zhuangbi.me/127.0.0.1#5335 -ipset=/.zhuangbi.me/gfwlist -server=/.zhuanxing.cn/127.0.0.1#5335 -ipset=/.zhuanxing.cn/gfwlist server=/.zhuatieba.com/127.0.0.1#5335 ipset=/.zhuatieba.com/gfwlist server=/.zhuichaguoji.org/127.0.0.1#5335 @@ -10384,8 +10210,6 @@ server=/.zodgame.us/127.0.0.1#5335 ipset=/.zodgame.us/gfwlist server=/.zomobo.net/127.0.0.1#5335 ipset=/.zomobo.net/gfwlist -server=/.zonaeuropa.com/127.0.0.1#5335 -ipset=/.zonaeuropa.com/gfwlist server=/.zonghexinwen.com/127.0.0.1#5335 ipset=/.zonghexinwen.com/gfwlist server=/.zonghexinwen.net/127.0.0.1#5335 @@ -10398,10 +10222,10 @@ server=/.zoozle.net/127.0.0.1#5335 ipset=/.zoozle.net/gfwlist server=/.zorrovpn.com/127.0.0.1#5335 ipset=/.zorrovpn.com/gfwlist -server=/.zozotown.com/127.0.0.1#5335 -ipset=/.zozotown.com/gfwlist server=/.zpn.im/127.0.0.1#5335 ipset=/.zpn.im/gfwlist +server=/.zsdxzk.com/127.0.0.1#5335 +ipset=/.zsdxzk.com/gfwlist server=/.zspeeder.me/127.0.0.1#5335 ipset=/.zspeeder.me/gfwlist server=/.zsrhao.com/127.0.0.1#5335 diff --git a/package/lean/luci-app-ssr-plus/root/etc/config/netflix.list b/package/lean/luci-app-ssr-plus/root/etc/ssr/netflix.list similarity index 100% rename from package/lean/luci-app-ssr-plus/root/etc/config/netflix.list rename to package/lean/luci-app-ssr-plus/root/etc/ssr/netflix.list diff --git a/package/lean/luci-app-ssr-plus/root/etc/config/netflixip.list b/package/lean/luci-app-ssr-plus/root/etc/ssr/netflixip.list similarity index 100% rename from package/lean/luci-app-ssr-plus/root/etc/config/netflixip.list rename to package/lean/luci-app-ssr-plus/root/etc/ssr/netflixip.list diff --git a/package/lean/luci-app-ssr-plus/root/etc/dnsmasq.oversea/oversea_list.conf b/package/lean/luci-app-ssr-plus/root/etc/ssr/oversea_list.conf similarity index 100% rename from package/lean/luci-app-ssr-plus/root/etc/dnsmasq.oversea/oversea_list.conf rename to package/lean/luci-app-ssr-plus/root/etc/ssr/oversea_list.conf diff --git a/package/lean/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus b/package/lean/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus index bd8d02a512..35aca05fa2 100755 --- a/package/lean/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus +++ b/package/lean/luci-app-ssr-plus/root/etc/uci-defaults/luci-ssr-plus @@ -1,26 +1,30 @@ #!/bin/sh - uci -q batch <<-EOF >/dev/null - delete ucitrack.@shadowsocksr[-1] - add ucitrack shadowsocksr - set ucitrack.@shadowsocksr[-1].init=shadowsocksr - commit ucitrack - delete firewall.shadowsocksr - set firewall.shadowsocksr=include - set firewall.shadowsocksr.type=script - set firewall.shadowsocksr.path=/var/etc/shadowsocksr.include - set firewall.shadowsocksr.reload=1 - commit firewall +delete ucitrack.@shadowsocksr[-1] +add ucitrack shadowsocksr +set ucitrack.@shadowsocksr[-1].init=shadowsocksr +commit ucitrack +delete firewall.shadowsocksr +set firewall.shadowsocksr=include +set firewall.shadowsocksr.type=script +set firewall.shadowsocksr.path=/var/etc/shadowsocksr.include +set firewall.shadowsocksr.reload=1 +commit firewall EOF - -touch /etc/china_ssr.txt -touch /etc/config/white.list -touch /etc/config/black.list -touch /etc/config/netflix.list -touch /etc/config/netflixip.list -touch /etc/dnsmasq.ssr/ad.conf -touch /etc/dnsmasq.ssr/gfw_list.conf - -rm -rf /tmp/luci-modulecache/* -rm -f /tmp/luci-indexcache +chmod 0755 /etc/init.d/shadowsocksr /usr/bin/ssr-* /usr/share/shadowsocksr/*.sh +chmod 0644 /etc/ssr/* \ +/usr/share/shadowsocksr/*.lua \ +/usr/share/rpcd/acl.d/luci-app-ssr-plus.json \ +/usr/lib/lua/luci/model/cbi/shadowsocksr/*.lua \ +/usr/lib/lua/luci/view/shadowsocksr/*.htm +chmod 0600 /etc/config/shadowsocksr +touch /etc/ssr/china_ssr.txt +touch /etc/ssr/white.list +touch /etc/ssr/black.list +touch /etc/ssr/netflix.list +touch /etc/ssr/netflixip.list +touch /etc/ssr/ad.conf +touch /etc/ssr/gfw_list.conf +touch /etc/ssr/deny.list +rm -rf /tmp/luci-modulecache /tmp/luci-indexcache exit 0 diff --git a/package/lean/luci-app-ssr-plus/root/lib/upgrade/keep.d/luci-app-ssr-plus b/package/lean/luci-app-ssr-plus/root/lib/upgrade/keep.d/luci-app-ssr-plus index 582ed895b4..742fbafc03 100644 --- a/package/lean/luci-app-ssr-plus/root/lib/upgrade/keep.d/luci-app-ssr-plus +++ b/package/lean/luci-app-ssr-plus/root/lib/upgrade/keep.d/luci-app-ssr-plus @@ -1,8 +1,9 @@ -/etc/ssr_ip -/etc/china_ssr.txt /etc/config/shadowsocksr -/etc/config/white.list -/etc/config/black.list -/etc/config/netflix.list -/etc/dnsmasq.ssr/ad.conf -/etc/dnsmasq.ssr/gfw_list.conf +/etc/ssr/china_ssr.txt +/etc/ssr/white.list +/etc/ssr/black.list +/etc/ssr/netflix.list +/etc/ssr/netflixip.list +/etc/ssr/gfw_list.conf +/etc/ssr/ad.conf +/etc/ssr/deny.list diff --git a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-ad b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-ad index 2c7ffef057..1523ce6d3d 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-ad +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-ad @@ -1,9 +1,9 @@ #!/bin/sh -e if [ -f /tmp/adnew.conf ]; then - if (grep -wq "address=" /tmp/adnew.conf) ; then - cp /tmp/adnew.conf /tmp/ad.conf - else - cat /tmp/adnew.conf | grep ^\|\|[^\*]*\^$ | sed -e 's:||:address\=\/:' -e 's:\^:/0\.0\.0\.0:' > /tmp/ad.conf - fi + if (grep -wq "address=" /tmp/adnew.conf); then + cp /tmp/adnew.conf /tmp/ssr-update.$1 + else + cat /tmp/adnew.conf | grep ^\|\|[^\*]*\^$ | sed -e 's:||:address\=\/:' -e 's:\^:/0\.0\.0\.0:' >/tmp/ssr-update.$1 + fi fi rm -f /tmp/adnew.conf diff --git a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-gfw b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-gfw index 07ee49c458..7a8b33202c 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-gfw +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-gfw @@ -1,25 +1,23 @@ #!/bin/sh -e - generate_china_banned() { - cat $1 | base64 -d >/tmp/gfwlist.txt - rm -f $1 - sed -i '/^@@|/d' /tmp/gfwlist.txt - cat /tmp/gfwlist.txt | sort -u | - sed 's#!.\+##; s#|##g; s#@##g; s#http:\/\/##; s#https:\/\/##;' | - sed '/\*/d; /apple\.com/d; /sina\.cn/d; /sina\.com\.cn/d; /baidu\.com/d; /byr\.cn/d; /jlike\.com/d; /weibo\.com/d; /zhongsou\.com/d; /youdao\.com/d; /sogou\.com/d; /so\.com/d; /soso\.com/d; /aliyun\.com/d; /taobao\.com/d; /jd\.com/d; /qq\.com/d' | - sed '/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/d' | - grep '^[0-9a-zA-Z\.-]\+$' | grep '\.' | sed 's#^\.\+##' | sort -u | - awk 'BEGIN { prev = "________"; } { - cur = $0; - if (index(cur, prev) == 1 && substr(cur, 1 + length(prev) ,1) == ".") { - } else { - print cur; - prev = cur; - } - }' | sort -u +cat $1 | base64 -d >/tmp/gfwlist.txt +rm -f $1 +sed -i '/^@@|/d' /tmp/gfwlist.txt +cat /tmp/gfwlist.txt | sort -u | +sed 's#!.\+##; s#|##g; s#@##g; s#http:\/\/##; s#https:\/\/##;' | +sed '/\*/d; /apple\.com/d; /sina\.cn/d; /sina\.com\.cn/d; /baidu\.com/d; /byr\.cn/d; /jlike\.com/d; /weibo\.com/d; /zhongsou\.com/d; /youdao\.com/d; /sogou\.com/d; /so\.com/d; /soso\.com/d; /aliyun\.com/d; /taobao\.com/d; /jd\.com/d; /qq\.com/d' | +sed '/^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+$/d' | +grep '^[0-9a-zA-Z\.-]\+$' | grep '\.' | sed 's#^\.\+##' | sort -u | +awk 'BEGIN { prev = "________"; } { +cur = $0; +if (index(cur, prev) == 1 && substr(cur, 1 + length(prev) ,1) == ".") { +} else { +print cur; +prev = cur; } - -generate_china_banned /tmp/gfw.b64 >/tmp/gfw.txt +}' | sort -u +} +generate_china_banned /tmp/ssr-update.$1 >/tmp/gfw.txt rm -f /tmp/gfwlist.txt -sed '/.*/s/.*/server=\/\.&\/127.0.0.1#5335\nipset=\/\.&\/gfwlist/' /tmp/gfw.txt >/tmp/gfwnew.txt +sed '/.*/s/.*/server=\/\.&\/127.0.0.1#5335\nipset=\/\.&\/gfwlist/' /tmp/gfw.txt >/tmp/ssr-update.$1 rm -f /tmp/gfw.txt diff --git a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-monitor b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-monitor index 889f1d119a..77645c48a3 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-monitor +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-monitor @@ -6,7 +6,9 @@ # This is free software, licensed under the GNU General Public License v3. # See /LICENSE for more information. # - +LOCK_FILE="/var/lock/ssr-monitor.lock" +[ -f "$LOCK_FILE" ] && exit 2 +touch "$LOCK_FILE" NAME=shadowsocksr uci_get_by_name() { @@ -19,6 +21,23 @@ uci_get_by_type() { echo ${ret:=$3} } +get_host_ip() { + local host=$1 + local isip="" + local ip=$host + isip=$(echo $host | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}") + if [ -z "$isip" ]; then + if [ "$host" != "${host#*:[0-9a-fA-F]}" ]; then + ip=$host + else + local ip=$(resolveip -4 -t 3 $host | awk 'NR==1{print}') + # local hostip=$(ping $host -W 1 -s 1 -c 1 | grep PING | cut -d'(' -f 2 | cut -d')' -f1) + [ -z "$ip" ] && ip=$(wget -q -O- http://119.29.29.29/d?dn=$1 | awk -F ';' '{print $1}') + fi + fi + echo ${ip:="ERROR"} +} + server_process_count=$1 redir_tcp_process=$2 redir_udp_process=$3 @@ -29,30 +48,24 @@ pdnsd_process=$7 if [ -z "$pdnsd_process" ]; then pdnsd_process=0 fi - i=0 - GLOBAL_SERVER=$(uci_get_by_type global global_server) -server=$(uci_get_by_name $GLOBAL_SERVER server) +server=$(get_host_ip $(uci_get_by_name $GLOBAL_SERVER server)) +[ "$server" == "ERROR" ] && hostip=$(uci_get_by_name $GLOBAL_SERVER ip) lkcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) [ "$password" != "" ] && password="--key "${password} -if echo "$server" | grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" >/dev/null; then - server=${server} -else - server=$(cat /etc/ssr_ip) -fi - while [ "1" == "1" ]; do #死循环 - sleep 30 + sleep 30s #redir tcp if [ "$redir_tcp_process" -gt 0 ]; then icount=$(busybox ps -w | grep ssr-retcp | grep -v grep | wc -l) if [ "$icount" == 0 ]; then logger -t "$NAME" "ssr redir tcp error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") ssr redir tcp error.restart!" >>/tmp/ssrplus.log /etc/init.d/shadowsocksr restart exit 0 fi @@ -62,6 +75,7 @@ while [ "1" == "1" ]; do #死循环 icount=$(busybox ps -w | grep ssr-reudp | grep -v grep | wc -l) if [ "$icount" == 0 ]; then logger -t "$NAME" "ssr redir udp error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") ssr redir udp error.restart!" >>/tmp/ssrplus.log /etc/init.d/shadowsocksr restart exit 0 fi @@ -71,6 +85,7 @@ while [ "1" == "1" ]; do #死循环 icount=$(busybox ps -w | grep ssr-tunnel | grep -v grep | wc -l) if [ "$icount" == 0 ]; then logger -t "$NAME" "ssr tunnel error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") ssr tunnel error.restart!" >>/tmp/ssrplus.log /etc/init.d/shadowsocksr restart exit 0 fi @@ -80,8 +95,10 @@ while [ "1" == "1" ]; do #死循环 icount=$(busybox ps -w | grep ssr-server | grep -v grep | wc -l) if [ "$icount" -lt "$server_process_count" ]; then #如果进程挂掉就重启它 logger -t "$NAME" "ssr server error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") ssr server error.restart!" >>/tmp/ssrplus.log kill -9 $(busybox ps -w | grep ssr-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1 /etc/init.d/shadowsocksr restart + exit 0 fi fi #kcptun @@ -89,6 +106,7 @@ while [ "1" == "1" ]; do #死循环 icount=$(busybox ps -w | grep kcptun-client | grep -v grep | wc -l) if [ "$icount" -lt "$kcp_process" ]; then #如果进程挂掉就重启它 logger -t "$NAME" "ssr kcptun error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") ssr kcptun error.restart!" >>/tmp/ssrplus.log killall -q -9 kcptun-client (/usr/bin/kcptun-client -r $server:$kcp_port -l :$server_port $password $kcp_param &) fi @@ -98,8 +116,10 @@ while [ "1" == "1" ]; do #死循环 icount=$(busybox ps -w | grep ssr-local | grep -v grep | wc -l) if [ "$icount" -lt "$local_process" ]; then #如果进程挂掉就重启它 logger -t "$NAME" "global socks server error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") global socks server error.restart!" >>/tmp/ssrplus.log kill -9 $(busybox ps -w | grep ssr-local | grep -v grep | awk '{print $1}') >/dev/null 2>&1 /etc/init.d/shadowsocksr restart + exit 0 fi fi #pdnsd @@ -107,26 +127,28 @@ while [ "1" == "1" ]; do #死循环 icount=$(busybox ps -w | grep pdnsd | grep -v grep | wc -l) if [ "$icount" -lt "$pdnsd_process" ]; then #如果进程挂掉就重启它 logger -t "$NAME" "pdnsd tunnel error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") pdnsd tunnel error.restart!" >>/tmp/ssrplus.log if [ -f /var/run/pdnsd.pid ]; then kill $(cat /var/run/pdnsd.pid) >/dev/null 2>&1 else kill -9 $(ps | grep pdnsd | grep -v grep | awk '{print $1}') >/dev/null 2>&1 fi - (/usr/sbin/pdnsd -c /var/etc/pdnsd.conf -d &) + (/usr/sbin/pdnsd -c /var/etc/pdnsd.conf >/dev/null 2>&1 &) fi fi #dns2socks if [ "$pdnsd_process" -eq 2 ]; then icount=$(busybox ps -w | grep -e ssr-dns -e dns2socks | grep -v grep | wc -l) if [ "$icount" -lt 2 ]; then #如果进程挂掉就重启它 - logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!" + logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!" + echo "$(date "+%Y-%m-%d %H:%M:%S") dns2socks $dnsstr tunnel error.restart!" >>/tmp/ssrplus.log dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53) dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}') dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}') killall -q -9 dns2socks kill -9 $(busybox ps -w | grep ssr-dns | grep -v grep | awk '{print $1}') >/dev/null 2>&1 microsocks -i 127.0.0.1 -p 10802 ssr-dns >/dev/null 2>&1 & - dns2socks 127.0.0.1:10802 $dnsserver:$dnsport 127.0.0.1:5335 -q >/dev/null 2>&1 & + dns2socks 127.0.0.1:10802 $dnsserver:$dnsport 127.0.0.1:5335 -q >/dev/null 2>&1 & fi fi done diff --git a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-rules b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-rules index 0279d926a7..9dcf96803e 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-rules +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-rules @@ -6,13 +6,11 @@ # This is free software, licensed under the GNU General Public License v3. # See /LICENSE for more information. # - TAG="_SS_SPEC_RULE_" # comment tag IPT="iptables -t nat" # alias of iptables FWI=$(uci get firewall.shadowsocksr.path 2>/dev/null) # firewall include file - usage() { - cat <<-EOF +cat <<-EOF Usage: ssr-rules [options] Valid options are: @@ -33,6 +31,7 @@ Valid options are: -F netflix mode -N netflix server IP -M netflix proxy mode + -I a file content is bypassed netflix ip list -e extra options for iptables -o apply the rules to the OUTPUT chain -O apply the global rules to the OUTPUT chain @@ -43,8 +42,8 @@ Valid options are: -g gfw list mode -r return china mode -h show this help message and exit - EOF - exit $1 +EOF +exit $1 } loger() { @@ -82,7 +81,8 @@ flush_r() { ipset_r() { ipset -N gmlan hash:net 2>/dev/null for ip in $LAN_GM_IP; do ipset -! add gmlan $ip; done - if [ "$RUNMODE" == "router" ]; then + case "$RUNMODE" in + router) ipset -! -R <<-EOF || return 1 create ss_spec_wan_ac hash:net $(gen_iplist | sed -e "s/^/add ss_spec_wan_ac /") @@ -92,25 +92,29 @@ ipset_r() { $IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN $IPT -A SS_SPEC_WAN_AC -m set --match-set ss_spec_wan_ac dst -j RETURN $IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW - elif [ "$RUNMODE" == "gfw" ]; then + ;; + gfw) ipset -N gfwlist hash:net 2>/dev/null $IPT -N SS_SPEC_WAN_AC $IPT -A SS_SPEC_WAN_AC -m set --match-set gfwlist dst -j SS_SPEC_WAN_FW $IPT -A SS_SPEC_WAN_AC -m set --match-set gmlan src -m set ! --match-set china dst -j SS_SPEC_WAN_FW $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j RETURN $IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN - elif [ "$RUNMODE" == "oversea" ]; then + ;; + oversea) ipset -N oversea hash:net 2>/dev/null $IPT -N SS_SPEC_WAN_AC ipset -N gmlan hash:net 2>/dev/null for ip in $LAN_GM_IP; do ipset -! add gmlan $ip; done $IPT -A SS_SPEC_WAN_AC -m set --match-set china dst -j SS_SPEC_WAN_FW $IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN - elif [ "$RUNMODE" == "all" ]; then + ;; + all) $IPT -N SS_SPEC_WAN_AC $IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW $IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN - fi + ;; + esac ipset -N fplan hash:net 2>/dev/null for ip in $LAN_FP_IP; do ipset -! add fplan $ip; done $IPT -I SS_SPEC_WAN_AC -m set --match-set fplan src -j SS_SPEC_WAN_FW @@ -121,25 +125,30 @@ ipset_r() { ipset -N blacklist hash:net 2>/dev/null $IPT -I SS_SPEC_WAN_AC -m set --match-set blacklist dst -j SS_SPEC_WAN_FW $IPT -I SS_SPEC_WAN_AC -m set --match-set whitelist dst -j RETURN + if [ $(ipset list music -name -quiet | grep music) ]; then + $IPT -I SS_SPEC_WAN_AC -m set --match-set music dst -j RETURN 2>/dev/null + fi for ip in $WAN_BP_IP; do ipset -! add whitelist $ip; done for ip in $WAN_FW_IP; do ipset -! add blacklist $ip; done - - if [ "$NETFLIX" == "1" ]; then + if [ "$NETFLIX" != "0" ]; then + ipset -N netflix hash:net 2>/dev/null + for ip in $(cat ${NETFLIX_LIST:=/dev/null} 2>/dev/null); do ipset -! add netflix $ip; done + fi + case "$NETFLIX" in + 1) $IPT -I SS_SPEC_WAN_AC -p tcp -m set --match-set netflix dst -j REDIRECT --to-ports 4321 if [ "$NETFLIX_PROXY" == "1" ]; then $IPT -I SS_SPEC_WAN_AC -p tcp -d $NETFLIX_IP -j REDIRECT --to-ports $local_port else ipset -! add whitelist $NETFLIX_IP fi - elif [ "$NETFLIX" == "2" ]; then - $IPT -I SS_SPEC_WAN_AC -p tcp -m set --match-set netflix dst -j REDIRECT --to-ports $local_port - fi - + ;; + 2) $IPT -I SS_SPEC_WAN_AC -p tcp -m set --match-set netflix dst -j REDIRECT --to-ports $local_port ;; + esac return $? } fw_rule() { - ipset -N netflix hash:net 2>/dev/null $IPT -N SS_SPEC_WAN_FW $IPT -A SS_SPEC_WAN_FW -d 0.0.0.0/8 -j RETURN $IPT -A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN @@ -216,23 +225,26 @@ tp_rule() { $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set bplan src -j RETURN $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set fplan src \ -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - if [ "$RUNMODE" == "router" ]; then + case "$RUNMODE" in + router) $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set ! --match-set china dst \ -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set ! --match-set ss_spec_wan_ac dst \ -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - elif [ "$RUNMODE" == "gfw" ]; then + ;; + gfw) $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set china dst -j RETURN $ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set ! --match-set china dst \ -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 $ipt -A SS_SPEC_TPROXY -p udp -m set $PROXY_PORTS --match-set gfwlist dst \ -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - elif [ "$RUNMODE" == "oversea" ]; then + ;; + oversea) $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set china dst \ -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - elif [ "$RUNMODE" == "all" ]; then - $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 - fi + ;; + all) $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 ;; + esac $ipt -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p udp $EXT_ARGS $MATCH_SET \ -m comment --comment "$TAG" -j SS_SPEC_TPROXY return $? @@ -309,7 +321,7 @@ gen_include() { return 0 } -while getopts ":s:l:S:L:i:e:a:B:b:w:p:G:D:F:N:M:oOuUfgrczh" arg; do +while getopts ":s:l:S:L:i:e:a:B:b:w:p:G:D:F:N:M:I:oOuUfgrczh" arg; do case "$arg" in s) server=$OPTARG @@ -359,6 +371,9 @@ while getopts ":s:l:S:L:i:e:a:B:b:w:p:G:D:F:N:M:oOuUfgrczh" arg; do M) NETFLIX_PROXY=$OPTARG ;; + I) + NETFLIX_LIST=$OPTARG + ;; o) OUTPUT=1 ;; @@ -390,9 +405,11 @@ while getopts ":s:l:S:L:i:e:a:B:b:w:p:G:D:F:N:M:oOuUfgrczh" arg; do h) usage 0 ;; esac done + if [ -z "$server" -o -z "$local_port" ]; then usage 2 fi + if [ "$TPROXY" == 1 ]; then SERVER=$server LOCAL_PORT=$local_port @@ -400,7 +417,7 @@ elif [ "$TPROXY" == 2 ]; then : ${SERVER:?"You must assign an ip for the udp relay server."} : ${LOCAL_PORT:?"You must assign a port for the udp relay server."} fi + flush_r && fw_rule && ipset_r && ac_rule && tp_rule && gen_include [ "$?" == 0 ] || loger 3 "Start failed!" exit $? - diff --git a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch index 98d91dc962..28a1ecef29 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch +++ b/package/lean/luci-app-ssr-plus/root/usr/bin/ssr-switch @@ -1,4 +1,4 @@ -#!/bin/sh /etc/rc.common +#!/bin/sh /etc/rc.common # # Copyright (C) 2017 openwrt-ssr # Copyright (C) 2017 yushi studio @@ -7,6 +7,9 @@ # See /LICENSE for more information. # +LOCK_FILE="/var/lock/ssr-switch.lock" +[ -f "$LOCK_FILE" ] && exit 2 +touch "$LOCK_FILE" cycle_time=60 switch_time=3 normal_flag=0 @@ -32,6 +35,23 @@ uci_get_by_type() { DEFAULT_SERVER=$(uci_get_by_type global global_server) CURRENT_SERVER=$DEFAULT_SERVER +#解析ip +get_host_ip() { + local host=$1 + local isip="" + local ip=$host + isip=$(echo $host | grep -E "([0-9]{1,3}[\.]){3}[0-9]{1,3}") + if [ -z "$isip" ]; then + if [ "$host" != "${host#*:[0-9a-fA-F]}" ]; then + ip=$host + else + local ip=$(resolveip -4 -t 3 $host | awk 'NR==1{print}') + [ -z "$ip" ] && ip=$(wget -q -O- http://119.29.29.29/d?dn=$1 | awk -F ';' '{print $1}') + fi + fi + echo ${ip:="ERROR"} +} + #判断代理是否正常 check_proxy() { local result=0 @@ -57,18 +77,19 @@ check_proxy() { } test_proxy() { - local servername=$(uci_get_by_name $1 server) + local servername=$(get_host_ip $(uci_get_by_name $1 server)) local serverport=$(uci_get_by_name $1 server_port) - ret=$(ping -c 3 $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }') - [ -z "$ret" ] && return 1 - [ "$ret" -gt "50" ] && return 1 ipset add ss_spec_wan_ac $servername 2>/dev/null - ret=$? + ret1=$? + ret=$(tcpping -c 3 -p $serverport $servername | grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }' | awk -F "." '{ print $1 }') + #echo "$(date "+%Y-%m-%d %H:%M:%S") test_proxy> name: $servername, ret1: $ret1, ret: $ret" >> /tmp/ssrplus.log + if [ -z "$ret" ] || [ "$ret" -gt "50" ]; then + [ "$ret1" == "0" ] && ipset del ss_spec_wan_ac $servername 2>/dev/null + return 1 + fi /usr/bin/ssr-check $servername $serverport $switch_time local ret2=$? - if [ "$ret" == "0" ]; then - ipset del ss_spec_wan_ac $servername 2>/dev/null - fi + [ "$ret1" == "0" ] && ipset del ss_spec_wan_ac $servername 2>/dev/null if [ "$ret2" == "0" ]; then return 0 else @@ -79,18 +100,16 @@ test_proxy() { search_proxy() { let server_count=server_count+1 [ "$normal_flag" == "1" -a "$server_count" -le "$server_locate" ] && return 0 - [ "$(uci_get_by_name $1 switch_enable)" != "1" ] && return 1 + [ "$(uci_get_by_name $1 switch_enable 0)" != "1" ] && return 1 [ $ENABLE_SERVER != nil ] && return 0 [ "$1" == "$CURRENT_SERVER" ] && return 0 - local servername=$(uci_get_by_name $1 server) + local servername=$(get_host_ip $(uci_get_by_name $1 server)) local serverport=$(uci_get_by_name $1 server_port) ipset add ss_spec_wan_ac $servername 2>/dev/null ret=$? /usr/bin/ssr-check $servername $serverport $switch_time local ret2=$? - if [ "$ret" == "0" ]; then - ipset del ss_spec_wan_ac $servername 2>/dev/null - fi + [ "$ret" == "0" ] && ipset del ss_spec_wan_ac $servername 2>/dev/null if [ "$ret2" == "0" ]; then server_locate=$server_count ENABLE_SERVER=$1 @@ -98,8 +117,8 @@ search_proxy() { else return 1 fi - } + #选择可用的代理 select_proxy() { config_load $NAME @@ -118,7 +137,6 @@ switch_proxy() { start() { #不支持kcptun启用时的切换 [ $(uci_get_by_name $DEFAULT_SERVER kcp_enable) = "1" ] && return 1 - while [ "1" == "1" ]; do #死循环 sleep $cycle_time LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") @@ -133,7 +151,7 @@ start() { #缺省服务器正常,切换回来 CURRENT_SERVER=$DEFAULT_SERVER switch_proxy $CURRENT_SERVER - echo "$(date "+%Y-%m-%d %H:%M:%S") switch to default ["$(uci_get_by_name $CURRENT_SERVER server)"] proxy!" >>/tmp/ssrplus.log + echo "$(date "+%Y-%m-%d %H:%M:%S") switch to default "$(uci_get_by_name $CURRENT_SERVER alias)" proxy!" >>/tmp/ssrplus.log else echo "$(date "+%Y-%m-%d %H:%M:%S") Main server is NOT avilable.Continue using current server." >>/tmp/ssrplus.log fi @@ -154,7 +172,7 @@ start() { CURRENT_SERVER=$ENABLE_SERVER switch_proxy $CURRENT_SERVER normal_flag=1 - echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR server switch OK" >>/tmp/ssrplus.log + echo "$(date "+%Y-%m-%d %H:%M:%S") Switch to "$(uci_get_by_name $CURRENT_SERVER alias)" proxy!" >>/tmp/ssrplus.log else switch_proxy $CURRENT_SERVER normal_flag=1 @@ -162,7 +180,7 @@ start() { fi else normal_flag=0 - echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR No Problem." >>/tmp/ssrplus.log + # echo "$(date "+%Y-%m-%d %H:%M:%S") ShadowsocksR No Problem." >>/tmp/ssrplus.log fi done } diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh index 044d524d94..ff3dd2cf16 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/chinaipset.sh @@ -1,5 +1,9 @@ -echo "create china hash:net family inet hashsize 1024 maxelem 65536" > /tmp/china.ipset -awk '!/^$/&&!/^#/{printf("add china %s'" "'\n",$0)}' /etc/china_ssr.txt >> /tmp/china.ipset +#!/bin/sh +LOCK_FILE="/var/lock/ssr-chinaipset.lock" +[ -f "$LOCK_FILE" ] && exit 2 +touch "$LOCK_FILE" +echo "create china hash:net family inet hashsize 1024 maxelem 65536" >/tmp/china.ipset +awk '!/^$/&&!/^#/{printf("add china %s'" "'\n",$0)}' /etc/ssr/china_ssr.txt >>/tmp/china.ipset ipset -! flush china -ipset -! restore < /tmp/china.ipset 2>/dev/null -rm -f /tmp/china.ipset +ipset -! restore /dev/null +rm -f /tmp/china.ipset $LOCK_FILE diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/genv2config.lua b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/genv2config.lua index 2554ebd17b..69d7c74835 100644 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/genv2config.lua +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/genv2config.lua @@ -4,99 +4,107 @@ local server_section = arg[1] local proto = arg[2] local local_port = arg[3] or "0" local socks_port = arg[4] or "0" - local server = ucursor:get_all("shadowsocksr", server_section) - local v2ray = { log = { - -- error = "/var/ssrplus.log", - loglevel = "warning" +-- error = "/var/ssrplus.log", +loglevel = "warning" }, - -- 传入连接 - inbound = (local_port ~= "0") and { - port = local_port, - protocol = "dokodemo-door", - settings = { - network = proto, - followRedirect = true - }, - sniffing = { - enabled = true, - destOverride = { "http", "tls" } - } - } or nil, - -- 开启 socks 代理 - inboundDetour = (proto == "tcp" and socks_port ~= "0") and { - { - protocol = "socks", - port = socks_port, - settings = { - auth = "noauth", - udp = true - } - } - } or nil, - -- 传出连接 - outbound = { - protocol = "vmess", +-- 传入连接 +inbound = (local_port ~= "0") and { + port = local_port, + protocol = "dokodemo-door", + settings = { + network = proto, + followRedirect = true + }, + sniffing = { + enabled = true, + destOverride = { "http", "tls" } + } +} or nil, +-- 开启 socks 代理 +inboundDetour = (proto == "tcp" and socks_port ~= "0") and { + { + protocol = "socks", + port = socks_port, settings = { - vnext = { - { - address = server.server, - port = tonumber(server.server_port), - users = { - { - id = server.vmess_id, - alterId = tonumber(server.alter_id), - security = server.security - } + auth = "noauth", + udp = true + } + } +} or nil, +-- 传出连接 +outbound = { + protocol = "vmess", + settings = { + vnext = { + { + address = server.server, + port = tonumber(server.server_port), + users = { + { + id = server.vmess_id, + alterId = tonumber(server.alter_id), + security = server.security } } } - }, - -- 底层传输配置 - streamSettings = { - network = server.transport, - security = (server.tls == '1') and "tls" or "none", - tlsSettings = {allowInsecure = (server.insecure ~= "0") and true or false,serverName=server.tls_host,}, - kcpSettings = (server.transport == "kcp") and { - mtu = tonumber(server.mtu), - tti = tonumber(server.tti), - uplinkCapacity = tonumber(server.uplink_capacity), - downlinkCapacity = tonumber(server.downlink_capacity), - congestion = (server.congestion == "1") and true or false, - readBufferSize = tonumber(server.read_buffer_size), - writeBufferSize = tonumber(server.write_buffer_size), - header = { - type = server.kcp_guise - } - } or nil, - wsSettings = (server.transport == "ws") and (server.ws_path ~= nil or server.ws_host ~= nil) and { - path = server.ws_path, - headers = (server.ws_host ~= nil) and { - Host = server.ws_host - } or nil, - } or nil, - httpSettings = (server.transport == "h2") and { - path = server.h2_path, - host = server.h2_host, - } or nil, - quicSettings = (server.transport == "quic") and { - security = server.quic_security, - key = server.quic_key, - header = { - type = server.quic_guise - } - } or nil - }, - mux = { - enabled = (server.mux == "1") and true or false, - concurrency = tonumber(server.concurrency) } }, - - -- 额外传出连接 - outboundDetour = { + -- 底层传输配置 + streamSettings = { + network = server.transport, + security = (server.tls == '1') and "tls" or "none", + tlsSettings = {allowInsecure = (server.insecure ~= "0") and true or false,serverName=server.tls_host,}, + tcpSettings = (server.transport == "tcp") and { + header = { + type = server.tcp_guise, + request = { + path = server.http_path or {"/"}, + headers = { + Host = server.http_host or {} + } + } or {} + } + } or nil, + kcpSettings = (server.transport == "kcp") and { + mtu = tonumber(server.mtu), + tti = tonumber(server.tti), + uplinkCapacity = tonumber(server.uplink_capacity), + downlinkCapacity = tonumber(server.downlink_capacity), + congestion = (server.congestion == "1") and true or false, + readBufferSize = tonumber(server.read_buffer_size), + writeBufferSize = tonumber(server.write_buffer_size), + header = { + type = server.kcp_guise + } + } or nil, + wsSettings = (server.transport == "ws") and (server.ws_path ~= nil or server.ws_host ~= nil) and { + path = server.ws_path, + headers = (server.ws_host ~= nil) and { + Host = server.ws_host + } or nil, + } or nil, + httpSettings = (server.transport == "h2") and { + path = server.h2_path, + host = server.h2_host, + } or nil, + quicSettings = (server.transport == "quic") and { + security = server.quic_security, + key = server.quic_key, + header = { + type = server.quic_guise + } + } or nil + }, + mux = { + enabled = (server.mux == "1") and true or false, + concurrency = tonumber(server.concurrency) + } +}, +-- 额外传出连接 +outboundDetour = { { protocol = "freedom", tag = "direct", @@ -104,4 +112,4 @@ log = { } } } -print(json.stringify(v2ray, 1)) +print(json.stringify(v2ray, 1)) \ No newline at end of file diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh index c5decd28ce..e187c6c1a1 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/gfw2ipset.sh @@ -1,5 +1,30 @@ #!/bin/sh -mkdir -p /tmp/dnsmasq.ssr -awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/config/black.list > /tmp/dnsmasq.ssr/blacklist_forward.conf -awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/config/black.list >> /tmp/dnsmasq.ssr/blacklist_forward.conf -awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"whitelist"'\n",$0)}' /etc/config/white.list > /tmp/dnsmasq.ssr/whitelist_forward.conf +NAME=shadowsocksr +uci_get_by_type() { + local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null) + echo ${ret:=$3} +} +GLOBAL_SERVER=$(uci_get_by_type global global_server) +NETFLIX_SERVER=$(uci_get_by_type global netflix_server nil) +[ "$NETFLIX_SERVER" == "same" ] && NETFLIX_SERVER=$GLOBAL_SERVER +if [ "$NETFLIX_SERVER" != "nil" ]; then + netflix() { + if [ -f "tmp/dnsmasq.ssr/gfw_list.conf" ]; then + for line in $(cat /etc/ssr/netflix.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf; done + fi + awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"netflix"'\n",$0)}' /etc/ssr/netflix.list >/tmp/dnsmasq.ssr/netflix_forward.conf + awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#$1"'\n",$0)}' /etc/ssr/netflix.list >>/tmp/dnsmasq.ssr/netflix_forward.conf + } + if [ "$NETFLIX_SERVER" != "$GLOBAL_SERVER" ]; then + netflix 5555 + else + netflix 5335 + fi +else + rm -f /tmp/dnsmasq.ssr/netflix_forward.conf +fi +if [ "$1" == "" ]; then + awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/ssr/black.list >/tmp/dnsmasq.ssr/blacklist_forward.conf + awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/ssr/black.list >>/tmp/dnsmasq.ssr/blacklist_forward.conf + awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"whitelist"'\n",$0)}' /etc/ssr/white.list >/tmp/dnsmasq.ssr/whitelist_forward.conf +fi diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh index 5db73ff880..818726a98b 100755 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/ssrplusupdate.sh @@ -1,6 +1,6 @@ #!/bin/sh - /usr/bin/lua /usr/share/shadowsocksr/update.lua +sleep 2s +/usr/share/shadowsocksr/chinaipset.sh +sleep 2s /usr/bin/lua /usr/share/shadowsocksr/subscribe.lua -sleep 10 -/etc/init.d/shadowsocksr restart \ No newline at end of file diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua index 7b05ce5cfc..d78e494dfe 100644 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/subscribe.lua @@ -3,34 +3,32 @@ -- This file is part of the luci-app-ssr-plus subscribe.lua -- @author William Chan ------------------------------------------------ -require 'nixio' -require 'luci.util' -require 'luci.jsonc' -require 'luci.sys' -require 'uci' +require "luci.model.uci" +require "nixio" +require "luci.util" +require "luci.sys" +require "luci.jsonc" -- these global functions are accessed all the time by the event handler -- so caching them is worth the effort -local luci = luci local tinsert = table.insert local ssub, slen, schar, sbyte, sformat, sgsub = string.sub, string.len, string.char, string.byte, string.format, string.gsub local jsonParse, jsonStringify = luci.jsonc.parse, luci.jsonc.stringify local b64decode = nixio.bin.b64decode local cache = {} -local nodeResult = setmetatable({}, { __index = cache }) -- update result +local nodeResult = setmetatable({}, { __index = cache }) -- update result local name = 'shadowsocksr' local uciType = 'servers' local ucic = luci.model.uci.cursor() local proxy = ucic:get_first(name, 'server_subscribe', 'proxy', '0') local switch = ucic:get_first(name, 'server_subscribe', 'switch', '1') local subscribe_url = ucic:get_first(name, 'server_subscribe', 'subscribe_url', {}) -local filter_words = ucic:get_first(name, 'server_subscribe', 'filter_words', 'QQ群') - +local filter_words = ucic:get_first(name, 'server_subscribe', 'filter_words', '过期时间/剩余流量') local log = function(...) print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " ")) end -- 分割字符串 local function split(full, sep) - full = full:gsub("%z", "") -- 这里不是很清楚 有时候结尾带个\0 + full = full:gsub("%z", "") -- 这里不是很清楚 有时候结尾带个\0 local off, result = 1, {} while true do local nStart, nEnd = full:find(sep, off) @@ -74,7 +72,7 @@ local function trim(text) end -- md5 local function md5(content) - local stdout = luci.sys.exec('echo \"' .. urlEncode(content) .. '\" | md5sum | cut -d \" \" -f1') + local stdout = luci.sys.exec('echo \"' .. urlEncode(content) .. '\" | md5sum | cut -d \" \" -f1') -- assert(nixio.errno() == 0) return trim(stdout) end @@ -119,7 +117,7 @@ local function processData(szType, content) result.protocol_param = base64Decode(params.protoparam) local group = base64Decode(params.group) if group then - result.alias = "[" .. group .. "] " + result.alias = "[" .. group .. "] " end result.alias = result.alias .. base64Decode(params.remarks) elseif szType == 'vmess' then @@ -131,7 +129,6 @@ local function processData(szType, content) result.alter_id = info.aid result.vmess_id = info.id result.alias = info.ps - result.insecure = 1 -- result.mux = 1 -- result.concurrency = 8 if info.net == 'ws' then @@ -143,6 +140,9 @@ local function processData(szType, content) result.h2_path = info.path end if info.net == 'tcp' then + if info.type and info.type ~= "http" then + info.type = "none" + end result.tcp_guise = info.type result.http_host = info.host result.http_path = info.path @@ -167,6 +167,7 @@ local function processData(szType, content) if info.tls == "tls" or info.tls == "1" then result.tls = "1" result.tls_host = info.host + result.insecure = 1 else result.tls = "0" end @@ -244,12 +245,10 @@ local function processData(szType, content) local t = split(v, '=') params[t[1]] = t[2] end - if params.peer then -- 未指定peer(sni)默认使用remote addr result.tls_host = params.peer end - if params.allowInsecure == "1" then result.insecure = "1" else @@ -261,7 +260,11 @@ local function processData(szType, content) result.password = password end if not result.alias then - result.alias = result.server .. ':' .. result.server_port + if result.server and result.server_port then + result.alias = result.server .. ':' .. result.server_port + else + result.alias = "NULL" + end end -- alias 不参与 hashkey 计算 local alias = result.alias @@ -280,15 +283,15 @@ local function wget(url) end local function check_filer(result) - do - local filter_word = split(filter_words, "/") - for i, v in pairs(filter_word) do - if result.alias:find(v) then - log('订阅节点关键字过滤:“' .. v ..'” ,该节点被丢弃') - return true - end - end - end + do + local filter_word = split(filter_words, "/") + for i, v in pairs(filter_word) do + if result.alias:find(v) then + log('订阅节点关键字过滤:“' .. v ..'” ,该节点被丢弃') + return true + end + end + end end local execute = function() @@ -313,10 +316,10 @@ local execute = function() nodes = base64Decode(raw:sub(nEnd + 1, #raw)) nodes = jsonParse(nodes) local extra = { - airport = nodes.airport, - port = nodes.port, - encryption = nodes.encryption, - password = nodes.password + airport = nodes.airport, + port = nodes.port, + encryption = nodes.encryption, + password = nodes.password } local servers = {} -- SS里面包着 干脆直接这样 @@ -326,7 +329,7 @@ local execute = function() nodes = servers else -- ssd 外的格式 - nodes = split(base64Decode(raw):gsub(" ", "\n"), "\n") + nodes = split(base64Decode(raw):gsub(" ", "_"), "\n") end for _, v in ipairs(nodes) do if v then @@ -337,8 +340,12 @@ local execute = function() local node = trim(v) local dat = split(node, "://") if dat and dat[1] and dat[2] then + local dat3 = "" + if dat[3] then + dat3 = "://" .. dat[3] + end if dat[1] == 'ss' or dat[1] == 'trojan' then - result = processData(dat[1], dat[2]) + result = processData(dat[1], dat[2] .. dat3) else result = processData(dat[1], base64Decode(dat[2])) end @@ -349,10 +356,12 @@ local execute = function() -- log(result) if result then if - not result.server or - check_filer(result) or - result.server:match("[^0-9a-zA-Z%-%.%s]") -- 中文做地址的 也没有人拿中文域名搞,就算中文域也有Puny Code SB 机场 - then + not result.server or + not result.server_port or + result.alias == "NULL" or + check_filer(result) or + result.server:match("[^0-9a-zA-Z%-%.%s]") -- 中文做地址的 也没有人拿中文域名搞,就算中文域也有Puny Code SB 机场 + then log('丢弃无效节点: ' .. result.type ..' 节点, ' .. result.alias) else log('成功解析: ' .. result.type ..' 节点, ' .. result.alias) @@ -373,6 +382,10 @@ local execute = function() do if next(nodeResult) == nil then log("更新失败,没有可用的节点信息") + if proxy == '0' then + luci.sys.init.start(name) + log('订阅失败, 恢复服务') + end return end local add, del = 0, 0 @@ -385,7 +398,7 @@ local execute = function() local dat = nodeResult[old.grouphashkey][old.hashkey] ucic:tset(name, old['.name'], dat) -- 标记一下 - setmetatable(nodeResult[old.grouphashkey][old.hashkey], { __index = { _ignore = true } }) + setmetatable(nodeResult[old.grouphashkey][old.hashkey], { __index = { _ignore = true } }) end else if not old.alias then @@ -393,7 +406,6 @@ local execute = function() end log('忽略手动添加的节点: ' .. old.alias) end - end) for k, v in ipairs(nodeResult) do for kk, vv in ipairs(v) do @@ -408,22 +420,24 @@ local execute = function() ucic:commit(name) -- 如果原有服务器节点已经不见了就尝试换为第一个节点 local globalServer = ucic:get_first(name, 'global', 'global_server', '') - local firstServer = ucic:get_first(name, uciType) - if firstServer then - if not ucic:get(name, globalServer) then - luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") - ucic:commit(name) - ucic:set(name, ucic:get_first(name, 'global'), 'global_server', ucic:get_first(name, uciType)) - ucic:commit(name) - log('当前主服务器节点已被删除,正在自动更换为第一个节点。') - luci.sys.call("/etc/init.d/" .. name .. " start > /dev/null 2>&1 &") + if globalServer ~= "nil" then + local firstServer = ucic:get_first(name, uciType) + if firstServer then + if not ucic:get(name, globalServer) then + luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") + ucic:commit(name) + ucic:set(name, ucic:get_first(name, 'global'), 'global_server', ucic:get_first(name, uciType)) + ucic:commit(name) + log('当前主服务器节点已被删除,正在自动更换为第一个节点。') + luci.sys.call("/etc/init.d/" .. name .. " start > /dev/null 2>&1 &") + else + log('维持当前主服务器节点。') + luci.sys.call("/etc/init.d/" .. name .." restart > /dev/null 2>&1 &") + end else - log('维持当前主服务器节点。') - luci.sys.call("/etc/init.d/" .. name .." restart > /dev/null 2>&1 &") + log('没有服务器节点了,停止服务') + luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") end - else - log('没有服务器节点了,停止服务') - luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") end log('新增节点数量: ' ..add, '删除节点数量: ' .. del) log('订阅更新成功') diff --git a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua index 17341bd84c..a654d6913c 100644 --- a/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua +++ b/package/lean/luci-app-ssr-plus/root/usr/share/shadowsocksr/update.lua @@ -3,123 +3,49 @@ -- This file is part of the luci-app-ssr-plus update.lua -- By Mattraks ------------------------------------------------ -require 'nixio' -require 'luci.util' -require 'luci.jsonc' -require 'luci.sys' +require "luci.sys" +require "luci.model.uci" local icount = 0 local uci = luci.model.uci.cursor() - local log = function(...) print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " ")) end -log('正在更新【GFW列表】数据库') -refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'gfwlist_url', 'https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt') .. " > /tmp/gfw.b64" -sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") -if sret == 0 then - luci.sys.call("/usr/bin/ssr-gfw") - icount = luci.sys.exec("cat /tmp/gfwnew.txt | wc -l") - if tonumber(icount) > 1000 then - if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then - oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf") - luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf") - log('更新成功! 新的总纪录数:' .. tostring(tonumber(icount)/2)) - else - log('你已经是最新数据,无需更新!') - end - else - log('更新失败!') - end - luci.sys.exec("rm -f /tmp/gfwnew.txt") -else - log('更新失败!') -end - -log('正在更新【国内IP段】数据库') -refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'chnroute_url','https://ispip.clang.cn/all_cn.txt') .. " > /tmp/china_ssr.txt" -sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") -icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l") -if sret == 0 then - icount = luci.sys.exec("cat /tmp/china_ssr.txt | wc -l") - if tonumber(icount) > 1000 then - if nixio.fs.access("/etc/china_ssr.txt") then - oldcount = luci.sys.exec("cat /etc/china_ssr.txt | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/china_ssr.txt /etc/china_ssr.txt") - log('更新成功! 新的总纪录数:' .. tostring(tonumber(icount))) - else - log('你已经是最新数据,无需更新!') - end - else - log('更新失败!') - end - luci.sys.exec("rm -f /tmp/china_ssr.txt") -else - log('更新失败!') -end - -if uci:get_first('shadowsocksr', 'global', 'adblock','0') == "1" then - log('正在更新【广告屏蔽】数据库') - refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'adblock_url','https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt') .. " > /tmp/adnew.conf" +local function update(url, file, type, file2) + local Num = 1 + refresh_cmd = "wget-ssl --no-check-certificate -t 3 -T 10 -O- " .. url .. " > /tmp/ssr-update." .. type sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") if sret == 0 then - luci.sys.call("/usr/bin/ssr-ad") - icount = luci.sys.exec("cat /tmp/ad.conf | wc -l") - if tonumber(icount) > 100 then - if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then - oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf") - luci.sys.exec("cp -f /tmp/ad.conf /tmp/dnsmasq.ssr/ad.conf") - log('更新成功! 新的总纪录数:' .. tostring(tonumber(icount))) - else - log('你已经是最新数据,无需更新!') - end - else - log('更新失败!') + if type == "gfw_data" then + luci.sys.call("/usr/bin/ssr-gfw " .. type) + Num = 2 + end + if type == "ad_data" then + luci.sys.call("/usr/bin/ssr-ad " .. type) + end + local new_md5 = luci.sys.exec("echo -n $([ -f '/tmp/ssr-update." .. type .. "' ] && md5sum /tmp/ssr-update." .. type .. " | awk '{print $1}')") + local old_md5 = luci.sys.exec("echo -n $([ -f '" .. file .. "' ] && md5sum " .. file .. " | awk '{print $1}')") + if new_md5 == old_md5 then + log("你已经是最新数据,无需更新!") + else + icount = luci.sys.exec("cat /tmp/ssr-update." .. type .. " | wc -l") + luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file) + if file2 then luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file2) end + log("更新成功! 新的总纪录数:" .. tostring(tonumber(icount)/Num)) end - luci.sys.exec("rm -f /tmp/ad.conf") else - log('更新失败!') + log("更新失败!") end + luci.sys.exec("rm -f /tmp/ssr-update." .. type) end ---[[ -log('正在更新【Netflix IP段】数据库') -refresh_cmd = "wget-ssl --no-check-certificate -O- " .. uci:get_first('shadowsocksr', 'global', 'nfip_url','https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt') .. " > /tmp/netflixip.list" -sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") -if sret == 0 then - luci.sys.call("/usr/bin/ssr-gfw") - icount = luci.sys.exec("cat /tmp/netflixip.list | wc -l") - if tonumber(icount) > 5 then - if nixio.fs.access("/etc/config/netflixip.list") then - oldcount = luci.sys.exec("cat /etc/config/netflixip.list | wc -l") - else - oldcount = "0" - end - if tonumber(icount) ~= tonumber(oldcount) then - luci.sys.exec("cp -f /tmp/netflixip.list /etc/config/netflixip.list") - log('更新成功! 新的总纪录数:' .. tostring(tonumber(icount))) - else - log('你已经是最新数据,无需更新!') - end - else - log('更新失败!') - end - luci.sys.exec("rm -f /tmp/netflixip.list") -else - log('更新失败!') +log("正在更新【GFW列表】数据库") +update(uci:get_first("shadowsocksr", "global", "gfwlist_url", "https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt"), "/etc/ssr/gfw_list.conf", "gfw_data", "/tmp/dnsmasq.ssr/gfw_list.conf") +log("正在更新【国内IP段】数据库") +update(uci:get_first("shadowsocksr", "global", "chnroute_url","https://ispip.clang.cn/all_cn.txt"), "/etc/ssr/china_ssr.txt", "cnip") +if uci:get_first("shadowsocksr", "global", "adblock","0") == "1" then + log("正在更新【广告屏蔽】数据库") + update(uci:get_first("shadowsocksr", "global", "adblock_url","https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt"), "/etc/ssr/ad.conf", "ad_data", "/tmp/dnsmasq.ssr/ad.conf") end ---]] +-- log("正在更新【Netflix IP段】数据库") +-- update(uci:get_first("shadowsocksr", "global", "nfip_url","https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt"), "/etc/ssr/netflixip.list", "nfip_data")