luci-app-ssr-plus:Code optimization and Fix Bug (#4253)

* luci-app-ssr-plus:Code optimization and Fix Bug

* luci-app-ssr-plus:Adjust reference data location
This commit is contained in:
Mattraks 2020-04-11 21:53:11 +08:00 committed by GitHub
parent ce326f078b
commit a10390cc21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
36 changed files with 1350 additions and 1581 deletions

View File

@ -1,8 +1,8 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-ssr-plus PKG_NAME:=luci-app-ssr-plus
PKG_VERSION:=175 PKG_VERSION:=176
PKG_RELEASE:=5 PKG_RELEASE:=1
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
@ -38,10 +38,10 @@ define Package/$(PKG_NAME)
SECTION:=luci SECTION:=luci
CATEGORY:=LuCI CATEGORY:=LuCI
SUBMENU:=3. Applications SUBMENU:=3. Applications
TITLE:=SS/SSR/V2Ray/Trojan LuCI interface TITLE:=SS/SSR/V2Ray/Trojan/Socks5/Tun LuCI interface
PKGARCH:=all PKGARCH:=all
DEPENDS:=+shadowsocksr-libev-alt +ipset +ip-full +iptables-mod-tproxy +dnsmasq-full +coreutils +coreutils-base64 +pdnsd-alt +wget +lua +libuci-lua \ 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_plugin:v2ray-plugin \
+PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \ +PACKAGE_$(PKG_NAME)_INCLUDE_V2ray:v2ray \
+PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \ +PACKAGE_$(PKG_NAME)_INCLUDE_Trojan:trojan \
@ -58,23 +58,17 @@ define Build/Compile
endef endef
define Package/$(PKG_NAME)/conffiles define Package/$(PKG_NAME)/conffiles
/etc/ssr_ip
/etc/china_ssr.txt
/etc/config/shadowsocksr /etc/config/shadowsocksr
/etc/config/white.list /etc/ssr/netflix.list
/etc/config/black.list /etc/ssr/netflixip.list
/etc/config/netflix.list
/etc/dnsmasq.ssr/ad.conf
/etc/dnsmasq.ssr/gfw_list.conf
endef endef
define Package/$(PKG_NAME)/install define Package/$(PKG_NAME)/install
$(INSTALL_DIR) $(1)/etc $(INSTALL_DIR) $(1)/etc/ssr
$(INSTALL_DATA) ./root/etc/china_ssr.txt $(1)/etc/china_ssr.txt $(INSTALL_DATA) ./root/etc/ssr/* $(1)/etc/ssr/
$(INSTALL_DIR) $(1)/etc/config $(INSTALL_DIR) $(1)/etc/config
$(INSTALL_CONF) ./root/etc/config/shadowsocksr $(1)/etc/config/shadowsocksr $(INSTALL_CONF) ./root/etc/config/shadowsocksr $(1)/etc/config/shadowsocksr
$(INSTALL_DATA) ./root/etc/config/*.list $(1)/etc/config/
$(INSTALL_DIR) $(1)/etc/dnsmasq.oversea $(INSTALL_DIR) $(1)/etc/dnsmasq.oversea
$(INSTALL_DATA) ./root/etc/dnsmasq.oversea/* $(1)/etc/dnsmasq.oversea/ $(INSTALL_DATA) ./root/etc/dnsmasq.oversea/* $(1)/etc/dnsmasq.oversea/
@ -110,8 +104,8 @@ endef
define Package/$(PKG_NAME)/postrm define Package/$(PKG_NAME)/postrm
#!/bin/sh #!/bin/sh
rm -rf /etc/china_ssr.txt /etc/dnsmasq.ssr /etc/dnsmasq.oversea /etc/config/shadowsocksr /etc/config/black.list \ rm -rf /etc/ssl/private /etc/dnsmasq.ssr /etc/dnsmasq.oversea /etc/ssr /etc/config/shadowsocksr /etc/china_ssr.txt /etc/config/black.list /etc/config/white.list \
/etc/config/gfw.list /etc/config/white.list /etc/config/netflix.list /etc/config/netflixip.list 2>/dev/null /etc/config/netflix.list /etc/config/netflixip.list
endef endef
$(eval $(call BuildPackage,$(PKG_NAME))) $(eval $(call BuildPackage,$(PKG_NAME)))

View File

@ -1,6 +1,5 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com> -- Copyright (C) 2017 yushi studio <ywb94@qq.com>
-- Licensed to the public under the GNU General Public License v3. -- Licensed to the public under the GNU General Public License v3.
module("luci.controller.shadowsocksr", package.seeall) module("luci.controller.shadowsocksr", package.seeall)
function index() function index()
@ -74,105 +73,50 @@ function refresh_data()
local set = luci.http.formvalue("set") local set = luci.http.formvalue("set")
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local icount = 0 local icount = 0
if set == "gfw_data" then local retstring = 0
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 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") sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
if sret == 0 then if sret == 0 then
luci.sys.call("/usr/bin/ssr-gfw") if type == "gfw_data" then
icount = luci.sys.exec("cat /tmp/gfwnew.txt | wc -l") luci.sys.call("/usr/bin/ssr-gfw " .. type)
if tonumber(icount) > 1000 then Num = 2
if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then end
oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l") if type == "ad_data" then
else luci.sys.call("/usr/bin/ssr-ad " .. type)
oldcount = "0" end
end local new_md5 = luci.sys.exec("echo -n $([ -f '/tmp/ssr-update." .. type .. "' ] && md5sum /tmp/ssr-update." .. type .. " | awk '{print $1}')")
if tonumber(icount) ~= tonumber(oldcount) then local old_md5 = luci.sys.exec("echo -n $([ -f '" .. file .. "' ] && md5sum " .. file .. " | awk '{print $1}')")
luci.sys.exec("cp -f /tmp/gfwnew.txt /etc/dnsmasq.ssr/gfw_list.conf") if new_md5 == old_md5 then
luci.sys.exec("cp -f /tmp/gfwnew.txt /tmp/dnsmasq.ssr/gfw_list.conf") retstring = "0"
luci.sys.call("/etc/init.d/dnsmasq restart") else
retstring = tostring(tonumber(icount)/2) icount = luci.sys.exec("cat /tmp/ssr-update." .. type .. " | wc -l")
else luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file)
retstring = "0" if file2 then luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file2) end
end retstring = tostring(tonumber(icount)/Num)
else if type == "gfw_data" or type == "ad_data" then
retstring = "-1" luci.sys.exec("/usr/share/shadowsocksr/gfw2ipset.sh gfw_data")
else
luci.sys.exec("/etc/init.d/shadowsocksr restart &")
end
end end
luci.sys.exec("rm -f /tmp/gfwnew.txt")
else else
retstring = "-1" retstring = "-1"
end 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/dnsmasq.ssr/gfw_list.conf", set, "/tmp/dnsmasq.ssr/gfw_list.conf")
end end
if set == "ip_data" then 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" update(uci:get_first("shadowsocksr", "global", "chnroute_url","https://ispip.clang.cn/all_cn.txt"), "/etc/ssr/china_ssr.txt", set)
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")
end end
if set == "ad_data" then 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" update(uci:get_first("shadowsocksr", "global", "adblock_url","https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt"), "/etc/dnsmasq.ssr/ad.conf", set, "/tmp/dnsmasq.ssr/ad.conf")
sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") end
if sret == 0 then if set == "nfip_data" then
luci.sys.call("/usr/bin/ssr-ad") update(uci:get_first("shadowsocksr", "global", "nfip_url","https://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt"), "/etc/ssr/netflixip.list", set)
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
end end
luci.http.prepare_content("application/json") luci.http.prepare_content("application/json")
luci.http.write_json({ret = retstring,retcount = icount}) luci.http.write_json({ret = retstring,retcount = icount})

View File

@ -1,3 +1,4 @@
require "luci.model.uci"
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local server_table = {} local server_table = {}

View File

@ -1,108 +1,105 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com> github.com/ywb94 -- Copyright (C) 2017 yushi studio <ywb94@qq.com> github.com/ywb94
-- Licensed to the public under the GNU General Public License v3. -- Licensed to the public under the GNU General Public License v3.
require "luci.model.uci"
require "nixio.fs"
require "luci.sys"
require "luci.http"
local m, s, o,kcp_enable local m, s, o,kcp_enable
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local fs = require "nixio.fs"
local sys = require "luci.sys"
local sid = arg[1] local sid = arg[1]
local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid") local uuid = luci.sys.exec("cat /proc/sys/kernel/random/uuid")
local http = require "luci.http"
local function isKcptun(file) local function isKcptun(file)
if not fs.access(file, "rwx", "rx", "rx") then if not nixio.fs.access(file, "rwx", "rx", "rx") then
fs.chmod(file, 755) nixio.fs.chmod(file, 755)
end end
local str = uci.sys.exec(file .. " -v | awk '{printf $1}'")
local str = sys.exec(file .. " -v | awk '{printf $1}'")
return (str:lower() == "kcptun") return (str:lower() == "kcptun")
end end
local server_table = {} local server_table = {}
local encrypt_methods = { local encrypt_methods = {
"none", "none",
"table", "table",
"rc4", "rc4",
"rc4-md5-6", "rc4-md5-6",
"rc4-md5", "rc4-md5",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"cast5-cfb", "cast5-cfb",
"des-cfb", "des-cfb",
"idea-cfb", "idea-cfb",
"rc2-cfb", "rc2-cfb",
"seed-cfb", "seed-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local encrypt_methods_ss = { local encrypt_methods_ss = {
-- aead -- aead
"aes-128-gcm", "aes-128-gcm",
"aes-192-gcm", "aes-192-gcm",
"aes-256-gcm", "aes-256-gcm",
"chacha20-ietf-poly1305", "chacha20-ietf-poly1305",
"xchacha20-ietf-poly1305", "xchacha20-ietf-poly1305",
-- stream -- stream
"table", "table",
"rc4", "rc4",
"rc4-md5", "rc4-md5",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local protocol = { local protocol = {
"origin", "origin",
"verify_deflate", "verify_deflate",
"auth_sha1_v4", "auth_sha1_v4",
"auth_aes128_sha1", "auth_aes128_sha1",
"auth_aes128_md5", "auth_aes128_md5",
"auth_chain_a", "auth_chain_a",
"auth_chain_b", "auth_chain_b",
"auth_chain_c", "auth_chain_c",
"auth_chain_d", "auth_chain_d",
"auth_chain_e", "auth_chain_e",
"auth_chain_f", "auth_chain_f",
} }
obfs = { obfs = {
"plain", "plain",
"http_simple", "http_simple",
"http_post", "http_post",
"random_head", "random_head",
"tls1.2_ticket_auth", "tls1.2_ticket_auth",
} }
local securitys = { local securitys = {
"auto", "auto",
"none", "none",
"aes-128-gcm", "aes-128-gcm",
"chacha20-poly1305" "chacha20-poly1305"
} }
m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) m = Map(shadowsocksr, translate("Edit ShadowSocksR Server"))
m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers") m.redirect = luci.dispatcher.build_url("admin/services/shadowsocksr/servers")
if m.uci:get(shadowsocksr, sid) ~= "servers" then if m.uci:get(shadowsocksr, sid) ~= "servers" then
@ -113,35 +110,35 @@ end
-- [[ Servers Setting ]]-- -- [[ Servers Setting ]]--
s = m:section(NamedSection, sid, "servers") s = m:section(NamedSection, sid, "servers")
s.anonymous = true s.anonymous = true
s.addremove = false s.addremove = false
o = s:option(DummyValue,"ssr_url","SS/SSR/V2RAY/TROJAN URL") o = s:option(DummyValue,"ssr_url","SS/SSR/V2RAY/TROJAN URL")
o.rawhtml = true o.rawhtml = true
o.template = "shadowsocksr/ssrurl" o.template = "shadowsocksr/ssrurl"
o.value =sid o.value =sid
o = s:option(ListValue, "type", translate("Server Node Type")) o = s:option(ListValue, "type", translate("Server Node Type"))
o:value("ssr", translate("ShadowsocksR")) o:value("ssr", translate("ShadowsocksR"))
if nixio.fs.access("/usr/bin/ss-redir") then if nixio.fs.access("/usr/bin/ss-redir") then
o:value("ss", translate("Shadowsocks New Version")) o:value("ss", translate("Shadowsocks New Version"))
end end
if nixio.fs.access("/usr/bin/v2ray/v2ray") or nixio.fs.access("/usr/bin/v2ray") then if nixio.fs.access("/usr/bin/v2ray/v2ray") or nixio.fs.access("/usr/bin/v2ray") then
o:value("v2ray", translate("V2Ray")) o:value("v2ray", translate("V2Ray"))
end end
if nixio.fs.access("/usr/sbin/trojan") then if nixio.fs.access("/usr/sbin/trojan") then
o:value("trojan", translate("Trojan")) o:value("trojan", translate("Trojan"))
end end
if nixio.fs.access("/usr/sbin/redsocks2") then if nixio.fs.access("/usr/sbin/redsocks2") then
o:value("socks5", translate("Socks5")) o:value("socks5", translate("Socks5"))
o:value("tun", translate("Network Tunnel")) o:value("tun", translate("Network Tunnel"))
end end
o.description = translate("Using incorrect encryption mothod may causes service fail to start") o.description = translate("Using incorrect encryption mothod may causes service fail to start")
o = s:option(Value, "alias", translate("Alias(optional)")) o = s:option(Value, "alias", translate("Alias(optional)"))
o = s:option(ListValue, "iface", translate("Network interface to use")) o = s:option(ListValue, "iface", translate("Network interface to use"))
for _, e in ipairs(sys.net.devices()) do for _, e in ipairs(luci.sys.net.devices()) do
if e ~= "lo" then o:value(e) end if e ~= "lo" then o:value(e) end
end end
o:depends("type", "tun") o:depends("type", "tun")
o.description = translate("Redirect traffic to this network interface") o.description = translate("Redirect traffic to this network interface")
@ -369,6 +366,7 @@ o.rmempty = true
o:depends("type", "v2ray") o:depends("type", "v2ray")
o:depends("type", "trojan") o:depends("type", "trojan")
o.default = "1" o.default = "1"
o.description = translate("If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates.")
-- [[ TLS ]]-- -- [[ TLS ]]--
o = s:option(Flag, "tls", translate("TLS")) o = s:option(Flag, "tls", translate("TLS"))
@ -409,31 +407,31 @@ o:depends("certificate", 1)
cert_dir = "/etc/ssl/private/" cert_dir = "/etc/ssl/private/"
local path local path
http.setfilehandler( luci.http.setfilehandler(
function(meta, chunk, eof) function(meta, chunk, eof)
if not fd then if not fd then
if (not meta) or (not meta.name) or (not meta.file) then return end if (not meta) or (not meta.name) or (not meta.file) then return end
fd = nixio.open(cert_dir .. meta.file, "w") fd = nixio.open(cert_dir .. meta.file, "w")
if not fd then if not fd then
path = translate("Create upload file error.") path = translate("Create upload file error.")
return return
end end
end end
if chunk and fd then if chunk and fd then
fd:write(chunk) fd:write(chunk)
end end
if eof and fd then if eof and fd then
fd:close() fd:close()
fd = nil fd = nil
path = '/etc/ssl/private/' .. meta.file .. '' path = '/etc/ssl/private/' .. meta.file .. ''
end end
end end
) )
if luci.http.formvalue("upload") then if luci.http.formvalue("upload") then
local f = luci.http.formvalue("ulfile") local f = luci.http.formvalue("ulfile")
if #f <= 0 then if #f <= 0 then
path = translate("No specify upload file.") path = translate("No specify upload file.")
end end
end end
o = s:option(Value, "certpath", translate("Current Certificate Path")) o = s:option(Value, "certpath", translate("Current Certificate Path"))
@ -459,42 +457,36 @@ o.default = 1234
o.rmempty = false o.rmempty = false
if nixio.fs.access("/usr/bin/kcptun-client") then 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 = s:option(Flag, "kcp_enable", translate("KcpTun Enable"), translate("bin:/usr/bin/kcptun-client")) kcp_enable.rmempty = true
kcp_enable.rmempty = true kcp_enable.default = "0"
kcp_enable.default = "0" kcp_enable:depends("type", "ssr")
kcp_enable:depends("type", "ssr") kcp_enable:depends("type", "ss")
kcp_enable:depends("type", "ss") o = s:option(Value, "kcp_port", translate("KcpTun Port"))
o.datatype = "port"
o = s:option(Value, "kcp_port", translate("KcpTun Port")) o.default = 4000
o.datatype = "port" function o.validate(self, value, section)
o.default = 4000
function o.validate(self, value, section)
local kcp_file="/usr/bin/kcptun-client" local kcp_file="/usr/bin/kcptun-client"
local enable = kcp_enable:formvalue(section) or kcp_enable.disabled local enable = kcp_enable:formvalue(section) or kcp_enable.disabled
if enable == kcp_enable.enabled then if enable == kcp_enable.enabled then
if not fs.access(kcp_file) then if not nixio.fs.access(kcp_file) then
return nil, translate("Haven't a Kcptun executable file") return nil, translate("Haven't a Kcptun executable file")
elseif not isKcptun(kcp_file) then elseif not isKcptun(kcp_file) then
return nil, translate("Not a Kcptun executable file") return nil, translate("Not a Kcptun executable file")
end
end
return value
end end
end o:depends("type", "ssr")
o:depends("type", "ss")
return value o = s:option(Value, "kcp_password", translate("KcpTun Password"))
end o.password = true
o:depends("type", "ssr") o:depends("type", "ssr")
o:depends("type", "ss") o:depends("type", "ss")
o = s:option(Value, "kcp_param", translate("KcpTun Param"))
o = s:option(Value, "kcp_password", translate("KcpTun Password")) o.default = "--nocomp"
o.password = true o:depends("type", "ssr")
o:depends("type", "ssr") o:depends("type", "ss")
o:depends("type", "ss")
o = s:option(Value, "kcp_param", translate("KcpTun Param"))
o.default = "--nocomp"
o:depends("type", "ssr")
o:depends("type", "ss")
end end
return m return m

View File

@ -1,16 +1,14 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com> github.com/ywb94 -- Copyright (C) 2017 yushi studio <ywb94@qq.com> github.com/ywb94
-- Copyright (C) 2018 lean <coolsnowwolf@gmail.com> github.com/coolsnowwolf -- Copyright (C) 2018 lean <coolsnowwolf@gmail.com> github.com/coolsnowwolf
-- Licensed to the public under the GNU General Public License v3. -- Licensed to the public under the GNU General Public License v3.
require "luci.model.uci"
local m, s, sec, o, kcp_enable local m, s, sec, o, kcp_enable
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local sys = require "luci.sys"
m = Map(shadowsocksr, translate("ShadowSocksR Plus+ Settings")) m = Map(shadowsocksr, translate("ShadowSocksR Plus+ Settings"))
m:section(SimpleSection).template = "shadowsocksr/status" m:section(SimpleSection).template = "shadowsocksr/status"
local server_table = {} local server_table = {}
uci:foreach(shadowsocksr, "servers", function(s) uci:foreach(shadowsocksr, "servers", function(s)

View File

@ -1,5 +1,6 @@
require "luci.ip"
require "nixio.fs"
local m, s, o local m, s, o
local NXFS = require "nixio.fs"
m = Map("shadowsocksr", translate("IP black-and-white list")) 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 = s:taboption("lan_ac", DynamicList, "lan_ac_ips", translate("LAN Host List"))
o.datatype = "ipaddr" o.datatype = "ipaddr"
luci.ip.neighbors({ family = 4 }, function(entry) luci.ip.neighbors({ family = 4 }, function(entry)
if entry.reachable then if entry.reachable then
o:value(entry.dest:string()) o:value(entry.dest:string())
end end
end) end)
o:depends("lan_ac_mode", "w") o:depends("lan_ac_mode", "w")
o:depends("lan_ac_mode", "b") 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 = s:taboption("lan_ac", DynamicList, "lan_bp_ips", translate("LAN Bypassed Host List"))
o.datatype = "ipaddr" o.datatype = "ipaddr"
luci.ip.neighbors({ family = 4 }, function(entry) luci.ip.neighbors({ family = 4 }, function(entry)
if entry.reachable then if entry.reachable then
o:value(entry.dest:string()) o:value(entry.dest:string())
end end
end) end)
o = s:taboption("lan_ac", DynamicList, "lan_fp_ips", translate("LAN Force Proxy Host List")) o = s:taboption("lan_ac", DynamicList, "lan_fp_ips", translate("LAN Force Proxy Host List"))
o.datatype = "ipaddr" o.datatype = "ipaddr"
luci.ip.neighbors({ family = 4 }, function(entry) luci.ip.neighbors({ family = 4 }, function(entry)
if entry.reachable then if entry.reachable then
o:value(entry.dest:string()) o:value(entry.dest:string())
end end
end) end)
o = s:taboption("lan_ac", DynamicList, "lan_gm_ips", translate("Game Mode Host List")) o = s:taboption("lan_ac", DynamicList, "lan_gm_ips", translate("Game Mode Host List"))
o.datatype = "ipaddr" o.datatype = "ipaddr"
luci.ip.neighbors({ family = 4 }, function(entry) luci.ip.neighbors({ family = 4 }, function(entry)
if entry.reachable then if entry.reachable then
o:value(entry.dest:string()) o:value(entry.dest:string())
end end
end) end)
-- Part of Self -- Part of Self
@ -66,73 +67,73 @@ end)
-- o:value("2", translatef("Forwarded Proxy")) -- o:value("2", translatef("Forwarded Proxy"))
-- o.rmempty = false -- o.rmempty = false
s:tab("esc", translate("Bypass Domain List")) s:tab("esc", translate("Bypass Domain List"))
local escconf = "/etc/config/white.list" local escconf = "/etc/ssr/white.list"
o = s:taboption("esc", TextValue, "escconf") o = s:taboption("esc", TextValue, "escconf")
o.rows = 13 o.rows = 13
o.wrap = "off" o.wrap = "off"
o.rmempty = true o.rmempty = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return NXFS.readfile(escconf) or "" return nixio.fs.readfile(escconf) or ""
end end
o.write = function(self, section, value) o.write = function(self, section, value)
NXFS.writefile(escconf, value:gsub("\r\n", "\n")) nixio.fs.writefile(escconf, value:gsub("\r\n", "\n"))
end end
o.remove = function(self, section, value) o.remove = function(self, section, value)
NXFS.writefile(escconf, "") nixio.fs.writefile(escconf, "")
end end
s:tab("block", translate("Black Domain List")) s:tab("block", translate("Black Domain List"))
local blockconf = "/etc/config/black.list" local blockconf = "/etc/ssr/black.list"
o = s:taboption("block", TextValue, "blockconf") o = s:taboption("block", TextValue, "blockconf")
o.rows = 13 o.rows = 13
o.wrap = "off" o.wrap = "off"
o.rmempty = true o.rmempty = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return NXFS.readfile(blockconf) or " " return nixio.fs.readfile(blockconf) or " "
end end
o.write = function(self, section, value) o.write = function(self, section, value)
NXFS.writefile(blockconf, value:gsub("\r\n", "\n")) nixio.fs.writefile(blockconf, value:gsub("\r\n", "\n"))
end end
o.remove = function(self, section, value) o.remove = function(self, section, value)
NXFS.writefile(blockconf, "") nixio.fs.writefile(blockconf, "")
end end
s:tab("netflix", translate("Netflix Domain List")) s:tab("netflix", translate("Netflix Domain List"))
local netflixconf = "/etc/config/netflix.list" local netflixconf = "/etc/ssr/netflix.list"
o = s:taboption("netflix", TextValue, "netflixconf") o = s:taboption("netflix", TextValue, "netflixconf")
o.rows = 13 o.rows = 13
o.wrap = "off" o.wrap = "off"
o.rmempty = true o.rmempty = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return NXFS.readfile(netflixconf) or " " return nixio.fs.readfile(netflixconf) or " "
end end
o.write = function(self, section, value) o.write = function(self, section, value)
NXFS.writefile(netflixconf, value:gsub("\r\n", "\n")) nixio.fs.writefile(netflixconf, value:gsub("\r\n", "\n"))
end end
o.remove = function(self, section, value) o.remove = function(self, section, value)
NXFS.writefile(netflixconf, "") nixio.fs.writefile(netflixconf, "")
end end
s:tab("netflixip", translate("Netflix IP List")) s:tab("netflixip", translate("Netflix IP List"))
local netflixipconf = "/etc/config/netflixip.list" local netflixipconf = "/etc/ssr/netflixip.list"
o = s:taboption("netflixip", TextValue, "netflixipconf") o = s:taboption("netflixip", TextValue, "netflixipconf")
o.rows = 13 o.rows = 13
o.wrap = "off" o.wrap = "off"
o.rmempty = true o.rmempty = true
o.cfgvalue = function(self, section) o.cfgvalue = function(self, section)
return NXFS.readfile(netflixipconf) or " " return nixio.fs.readfile(netflixipconf) or " "
end end
o.write = function(self, section, value) o.write = function(self, section, value)
NXFS.writefile(netflixipconf, value:gsub("\r\n", "\n")) nixio.fs.writefile(netflixipconf, value:gsub("\r\n", "\n"))
end end
o.remove = function(self, section, value) o.remove = function(self, section, value)
NXFS.writefile(netflixipconf, "") nixio.fs.writefile(netflixipconf, "")
end end
return m return m

View File

@ -1,20 +1,20 @@
local fs = require "nixio.fs" require "luci.util"
require "nixio.fs"
f = SimpleForm("logview") f = SimpleForm("logview")
f.reset = false
f.submit = false
t = f:field(TextValue, "conf") t = f:field(TextValue, "conf")
t.rmempty = true t.rmempty = true
t.rows = 20 t.rows = 20
function t.cfgvalue() function t.cfgvalue()
if fs.access("/tmp/ssrplus.log") then if nixio.fs.access("/tmp/ssrplus.log") then
local logs = luci.util.execi("cat /tmp/ssrplus.log") local logs = luci.util.execi("cat /tmp/ssrplus.log")
local s = "" local s = ""
for line in logs do for line in logs do
s = line .. "\n" .. s s = line .. "\n" .. s
end end
return s return s
end end
end end
t.readonly="readonly" t.readonly="readonly"
return f
return f

View File

@ -1,43 +1,44 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com> -- Copyright (C) 2017 yushi studio <ywb94@qq.com>
-- Licensed to the public under the GNU General Public License v3. -- Licensed to the public under the GNU General Public License v3.
require "luci.http"
require "luci.dispatcher"
local m, s, o local m, s, o
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
local sid = arg[1] local sid = arg[1]
local encrypt_methods = { local encrypt_methods = {
"rc4-md5", "rc4-md5",
"rc4-md5-6", "rc4-md5-6",
"rc4", "rc4",
"table", "table",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"cast5-cfb", "cast5-cfb",
"des-cfb", "des-cfb",
"idea-cfb", "idea-cfb",
"rc2-cfb", "rc2-cfb",
"seed-cfb", "seed-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local protocol = { local protocol = {
"origin", "origin",
} }
obfs = { obfs = {
"plain", "plain",
"http_simple", "http_simple",
"http_post", "http_post",
} }
m = Map(shadowsocksr, translate("Edit ShadowSocksR Server")) m = Map(shadowsocksr, translate("Edit ShadowSocksR Server"))
@ -54,7 +55,7 @@ end
-- [[ Server Setting ]]-- -- [[ Server Setting ]]--
s = m:section(NamedSection, sid, "server_config") s = m:section(NamedSection, sid, "server_config")
s.anonymous = true s.anonymous = true
s.addremove = false s.addremove = false
o = s:option(Flag, "enable", translate("Enable")) o = s:option(Flag, "enable", translate("Enable"))
o.default = 1 o.default = 1

View File

@ -1,56 +1,55 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com> -- Copyright (C) 2017 yushi studio <ywb94@qq.com>
-- Licensed to the public under the GNU General Public License v3. -- Licensed to the public under the GNU General Public License v3.
require "luci.http"
require "luci.dispatcher"
local m, sec, o local m, sec, o
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor()
m = Map(shadowsocksr)
local encrypt_methods = { local encrypt_methods = {
"table", "table",
"rc4", "rc4",
"rc4-md5", "rc4-md5",
"rc4-md5-6", "rc4-md5-6",
"aes-128-cfb", "aes-128-cfb",
"aes-192-cfb", "aes-192-cfb",
"aes-256-cfb", "aes-256-cfb",
"aes-128-ctr", "aes-128-ctr",
"aes-192-ctr", "aes-192-ctr",
"aes-256-ctr", "aes-256-ctr",
"bf-cfb", "bf-cfb",
"camellia-128-cfb", "camellia-128-cfb",
"camellia-192-cfb", "camellia-192-cfb",
"camellia-256-cfb", "camellia-256-cfb",
"cast5-cfb", "cast5-cfb",
"des-cfb", "des-cfb",
"idea-cfb", "idea-cfb",
"rc2-cfb", "rc2-cfb",
"seed-cfb", "seed-cfb",
"salsa20", "salsa20",
"chacha20", "chacha20",
"chacha20-ietf", "chacha20-ietf",
} }
local protocol = { local protocol = {
"origin", "origin",
"verify_deflate", "verify_deflate",
"auth_sha1_v4", "auth_sha1_v4",
"auth_aes128_sha1", "auth_aes128_sha1",
"auth_aes128_md5", "auth_aes128_md5",
"auth_chain_a", "auth_chain_a",
} }
obfs = { obfs = {
"plain", "plain",
"http_simple", "http_simple",
"http_post", "http_post",
"random_head", "random_head",
"tls1.2_ticket_auth", "tls1.2_ticket_auth",
"tls1.2_ticket_fastauth", "tls1.2_ticket_fastauth",
} }
m = Map(shadowsocksr)
-- [[ Global Setting ]]-- -- [[ Global Setting ]]--
sec = m:section(TypedSection, "server_global", translate("Global Setting")) sec = m:section(TypedSection, "server_global", translate("Global Setting"))
sec.anonymous = true sec.anonymous = true

View File

@ -1,20 +1,17 @@
-- Licensed to the public under the GNU General Public License v3. -- 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 m, s, o
local shadowsocksr = "shadowsocksr" local shadowsocksr = "shadowsocksr"
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
local server_count = 0 local server_count = 0
uci:foreach("shadowsocksr", "servers", function(s) uci:foreach("shadowsocksr", "servers", function(s)
server_count = server_count + 1 server_count = server_count + 1
end) end)
local fs = require "nixio.fs" m = Map(shadowsocksr, translate("Servers subscription and manage"))
local sys = require "luci.sys"
local ucic = luci.model.uci.cursor()
m = Map(shadowsocksr, translate("Servers subscription and manage"))
-- Server Subscribe -- Server Subscribe
@ -28,7 +25,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)")) o = s:option(ListValue, "auto_update_time", translate("Update time (every day)"))
for t = 0,23 do for t = 0,23 do
o:value(t, t..":00") o:value(t, t..":00")
end end
o.default=2 o.default=2
o.rmempty = false o.rmempty = false
@ -44,7 +41,7 @@ o = s:option(Button,"update_Sub",translate("Update Subscribe List"))
o.inputstyle = "reload" o.inputstyle = "reload"
o.description = translate("Update subscribe url list first") o.description = translate("Update subscribe url list first")
o.write = function() 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 end
o = s:option(Flag, "switch", translate("Subscribe Default Auto-Switch")) o = s:option(Flag, "switch", translate("Subscribe Default Auto-Switch"))
@ -58,25 +55,25 @@ o.description = translate("Through proxy update list, Not Recommended ")
o = s:option(Button,"subscribe", translate("Update All Subscribe Severs")) o = s:option(Button,"subscribe", translate("Update All Subscribe Severs"))
o.rawhtml = true o.rawhtml = true
o.template = "shadowsocksr/subscribe" o.template = "shadowsocksr/subscribe"
o = s:option(Button,"delete",translate("Delete All Subscribe Severs")) o = s:option(Button,"delete",translate("Delete All Subscribe Severs"))
o.inputstyle = "reset" 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() o.write = function()
uci:delete_all("shadowsocksr", "servers", function(s) uci:delete_all("shadowsocksr", "servers", function(s)
if s.hashkey or s.isSubscribe then if s.hashkey or s.isSubscribe then
return true return true
else else
return false return false
end end
end) end)
uci:save("shadowsocksr") uci:save("shadowsocksr")
uci:commit("shadowsocksr") uci:commit("shadowsocksr")
luci.sys.exec("/etc/init.d/shadowsocksr restart") luci.sys.exec("/etc/init.d/shadowsocksr restart")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers")) luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "servers"))
return return
end end
-- [[ Servers Manage ]]-- -- [[ Servers Manage ]]--
@ -85,12 +82,12 @@ s.anonymous = true
s.addremove = true s.addremove = true
s.template = "cbi/tblsection" s.template = "cbi/tblsection"
s.sortable = true 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(...) function s.create(...)
local sid = TypedSection.create(...) local sid = TypedSection.create(...)
if sid then if sid then
luci.http.redirect(s.extedit % sid) luci.http.redirect(s.extedit % sid)
return return
end end
end end
@ -121,11 +118,11 @@ o.width="10%"
node = s:option(Button,"apply_node",translate("Apply")) node = s:option(Button,"apply_node",translate("Apply"))
node.inputstyle = "apply" node.inputstyle = "apply"
node.write = function(self, section) node.write = function(self, section)
ucic:set("shadowsocksr", '@global[0]', 'global_server', section) uci:set("shadowsocksr", '@global[0]', 'global_server', section)
ucic:save("shadowsocksr") uci:save("shadowsocksr")
ucic:commit("shadowsocksr") uci:commit("shadowsocksr")
luci.sys.exec("/etc/init.d/shadowsocksr restart") luci.sys.exec("/etc/init.d/shadowsocksr restart")
luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "client")) luci.http.redirect(luci.dispatcher.build_url("admin", "services", "shadowsocksr", "client"))
end end
o = s:option(Flag, "switch_enable", translate("Auto Switch")) o = s:option(Flag, "switch_enable", translate("Auto Switch"))

View File

@ -1,6 +1,8 @@
-- Copyright (C) 2017 yushi studio <ywb94@qq.com> -- Copyright (C) 2017 yushi studio <ywb94@qq.com>
-- Licensed to the public under the GNU General Public License v3. -- 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 m, s, o
local redir_run=0 local redir_run=0
local reudp_run=0 local reudp_run=0
@ -20,71 +22,69 @@ font_off = [[</font>]]
bold_on = [[<strong>]] bold_on = [[<strong>]]
bold_off = [[</strong>]] bold_off = [[</strong>]]
local fs = require "nixio.fs"
local sys = require "luci.sys"
local kcptun_version=translate("Unknown") local kcptun_version=translate("Unknown")
local kcp_file="/usr/bin/kcptun-client" local kcp_file="/usr/bin/kcptun-client"
if not fs.access(kcp_file) then if not nixio.fs.access(kcp_file) then
kcptun_version=translate("Not exist") kcptun_version=translate("Not exist")
else else
if not fs.access(kcp_file, "rwx", "rx", "rx") then if not nixio.fs.access(kcp_file, "rwx", "rx", "rx") then
fs.chmod(kcp_file, 755) nixio.fs.chmod(kcp_file, 755)
end end
kcptun_version=sys.exec(kcp_file .. " -v | awk '{printf $3}'") kcptun_version=luci.sys.exec(kcp_file .. " -v | awk '{printf $3}'")
if not kcptun_version or kcptun_version == "" then if not kcptun_version or kcptun_version == "" then
kcptun_version = translate("Unknown") kcptun_version = translate("Unknown")
end end
end end
if nixio.fs.access("/etc/dnsmasq.ssr/gfw_list.conf") then 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 gfw_count = tonumber(luci.sys.exec("cat /etc/dnsmasq.ssr/gfw_list.conf | wc -l"))/2
end end
if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then
ad_count = tonumber(sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l")) ad_count = tonumber(luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l"))
end end
if nixio.fs.access("/etc/china_ssr.txt") then if nixio.fs.access("/etc/ssr/china_ssr.txt") then
ip_count = tonumber(sys.exec("cat /etc/china_ssr.txt | wc -l")) ip_count = tonumber(luci.sys.exec("cat /etc/china_ssr.txt | wc -l"))
end end
if nixio.fs.access("/etc/config/netflixip.list") then if nixio.fs.access("/etc/ssr/netflixip.list") then
nfip_count = tonumber(sys.exec("cat /etc/config/netflixip.list | wc -l")) nfip_count = tonumber(luci.sys.exec("cat /etc/ssr/netflixip.list | wc -l"))
end 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 if tonumber(icount)>0 then
reudp_run=1 reudp_run=1
else else
icount=sys.exec("busybox ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l") icount=luci.sys.exec("busybox ps -w | grep ssr-retcp |grep \"\\-u\"|grep -v grep| wc -l")
if tonumber(icount)>0 then if tonumber(icount)>0 then
reudp_run=1 reudp_run=1
end end
end end
if luci.sys.call("busybox ps -w | grep ssr-retcp | grep -v grep >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-retcp | grep -v grep >/dev/null") == 0 then
redir_run=1 redir_run=1
end end
if luci.sys.call("busybox ps -w | grep ssr-local | grep -v ssr-socksdns |grep -v grep >/dev/null") == 0 then 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 end
if luci.sys.call("pidof kcptun-client >/dev/null") == 0 then if luci.sys.call("pidof kcptun-client >/dev/null") == 0 then
kcptun_run=1 kcptun_run=1
end end
if luci.sys.call("busybox ps -w | grep ssr-server | grep -v grep >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-server | grep -v grep >/dev/null") == 0 then
server_run=1 server_run=1
end end
if luci.sys.call("busybox ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then if luci.sys.call("busybox ps -w | grep ssr-tunnel |grep -v grep >/dev/null") == 0 then
tunnel_run=1 tunnel_run=1
end 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 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 end
m = SimpleForm("Version") m = SimpleForm("Version")
@ -94,56 +94,56 @@ m.submit = false
s=m:field(DummyValue,"redir_run",translate("Global Client")) s=m:field(DummyValue,"redir_run",translate("Global Client"))
s.rawhtml = true s.rawhtml = true
if redir_run == 1 then 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 else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
s=m:field(DummyValue,"reudp_run",translate("Game Mode UDP Relay")) s=m:field(DummyValue,"reudp_run",translate("Game Mode UDP Relay"))
s.rawhtml = true s.rawhtml = true
if reudp_run == 1 then 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 else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
if uci:get_first(shadowsocksr, 'global', 'pdnsd_enable', '0') ~= '0' then if uci:get_first(shadowsocksr, 'global', 'pdnsd_enable', '0') ~= '0' then
s=m:field(DummyValue,"pdnsd_run",translate("DNS Anti-pollution")) s=m:field(DummyValue,"pdnsd_run",translate("DNS Anti-pollution"))
s.rawhtml = true s.rawhtml = true
if pdnsd_run == 1 then if pdnsd_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 else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
end end
s=m:field(DummyValue,"sock5_run",translate("Global SOCKS5 Proxy Server")) s=m:field(DummyValue,"sock5_run",translate("Global SOCKS5 Proxy Server"))
s.rawhtml = true s.rawhtml = true
if sock5_run == 1 then 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 else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
s=m:field(DummyValue,"server_run",translate("Local Servers")) s=m:field(DummyValue,"server_run",translate("Local Servers"))
s.rawhtml = true s.rawhtml = true
if server_run == 1 then 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 else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
if nixio.fs.access("/usr/bin/kcptun-client") then if nixio.fs.access("/usr/bin/kcptun-client") then
s=m:field(DummyValue,"kcp_version",translate("KcpTun Version")) s=m:field(DummyValue,"kcp_version",translate("KcpTun Version"))
s.rawhtml = true s.rawhtml = true
s.value =kcptun_version s.value =kcptun_version
s=m:field(DummyValue,"kcptun_run",translate("KcpTun")) s=m:field(DummyValue,"kcptun_run",translate("KcpTun"))
s.rawhtml = true s.rawhtml = true
if kcptun_run == 1 then if kcptun_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 else
s.value = translate("Not Running") s.value = translate("Not Running")
end end
end end
s=m:field(DummyValue,"google",translate("Google Connectivity")) s=m:field(DummyValue,"google",translate("Google Connectivity"))
@ -170,10 +170,10 @@ s.template = "shadowsocksr/refresh"
s.value = nfip_count .. " " .. translate("Records") s.value = nfip_count .. " " .. translate("Records")
if uci:get_first(shadowsocksr, 'global', 'adblock', '0') == '1' then if uci:get_first(shadowsocksr, 'global', 'adblock', '0') == '1' then
s=m:field(DummyValue,"ad_data",translate("Advertising Data")) s=m:field(DummyValue,"ad_data",translate("Advertising Data"))
s.rawhtml = true s.rawhtml = true
s.template = "shadowsocksr/refresh" s.template = "shadowsocksr/refresh"
s.value = ad_count .. " " .. translate("Records") s.value = ad_count .. " " .. translate("Records")
end end
s=m:field(DummyValue,"check_port",translate("Check Server Port")) s=m:field(DummyValue,"check_port",translate("Check Server Port"))

View File

@ -1,4 +1,4 @@
<%+cbi/valueheader%> <%+cbi/valueheader%>
<input class="cbi-input-file" style="width: 400px" type="file" id="ulfile" name="ulfile" /> <input class="cbi-input-file" style="width: 400px" type="file" id="ulfile" name="ulfile" />
<input type="submit" class="cbi-button cbi-input-apply" name="upload" value="<%:Upload%>" /> <input type="submit" class="cbi-button cbi-input-apply" name="upload" value="<%:Upload%>" />
<%+cbi/valuefooter%> <%+cbi/valuefooter%>

View File

@ -1,7 +1,5 @@
<%+cbi/valueheader%> <%+cbi/valueheader%>
<script type="text/javascript">//<![CDATA[ <script type="text/javascript">//<![CDATA[
function check_port(btn) function check_port(btn)
{ {
btn.disabled = true; btn.disabled = true;
@ -15,22 +13,14 @@
{ {
s.innerHTML =rv.ret; s.innerHTML =rv.ret;
} }
btn.disabled = false; btn.disabled = false;
btn.value = '<%:Check Server%>'; btn.value = '<%:Check Server%>';
} }
); );
return false; return false;
} }
//]]></script> //]]></script>
<input type="button" class="cbi-button cbi-button-apply" value="<%:Check Server%>" onclick="return check_port(this)" /> <input type="button" class="cbi-button cbi-button-apply" value="<%:Check Server%>" onclick="return check_port(this)" />
<span id="<%=self.option%>-status"><em><%=self.value%></em></span> <span id="<%=self.option%>-status"><em><%=self.value%></em></span>
<%+cbi/valuefooter%> <%+cbi/valuefooter%>

View File

@ -81,47 +81,39 @@ local dsp = require "luci.dispatcher"
return false; return false;
} }
// set tr draggable // set tr draggable
function enableDragForTable(table_selecter, store) { function enableDragForTable(table_selecter, store) {
var trs = document.querySelectorAll(table_selecter + " tr"); var trs = document.querySelectorAll(table_selecter + " tr");
if (!trs || trs.length.length < 3) { if (!trs || trs.length.length < 3) {
return; return;
} }
function ondragstart(ev) { function ondragstart(ev) {
ev.dataTransfer.setData("Text", ev.target.id); ev.dataTransfer.setData("Text", ev.target.id);
} }
function ondrop(ev) { function ondrop(ev) {
var from = ev.dataTransfer.getData("Text"); var from = ev.dataTransfer.getData("Text");
cbi_row_drop(from, this.id, store); cbi_row_drop(from, this.id, store);
} }
function ondragover(ev) { function ondragover(ev) {
ev.preventDefault(); ev.preventDefault();
ev.dataTransfer.dropEffect = "move"; ev.dataTransfer.dropEffect = "move";
} }
function moveToTop(id) { function moveToTop(id) {
var top = document.querySelectorAll(table_selecter + " tr")[2]; var top = document.querySelectorAll(table_selecter + " tr")[2];
cbi_row_drop(id, top.id, store); cbi_row_drop(id, top.id, store);
} }
function moveToBottom(id) { function moveToBottom(id) {
console.log('moveToBottom:', id); console.log('moveToBottom:', id);
var trList = document.querySelectorAll(table_selecter + " tr"); var trList = document.querySelectorAll(table_selecter + " tr");
var bottom = trList[trList.length - 1]; var bottom = trList[trList.length - 1];
cbi_row_drop(id, bottom.id, store, true); cbi_row_drop(id, bottom.id, store, true);
} }
for (let index = 2; index < trs.length; index++) { for (let index = 2; index < trs.length; index++) {
const el = trs[index]; const el = trs[index];
el.setAttribute("draggable", true); el.setAttribute("draggable", true);
el.ondragstart = ondragstart; el.ondragstart = ondragstart;
el.ondrop = ondrop; el.ondrop = ondrop;
el.ondragover = ondragover; el.ondragover = ondragover;
// reset the behaviors of the btns // reset the behaviors of the btns
var upBtns = el.querySelectorAll(".cbi-button.cbi-button-up"); var upBtns = el.querySelectorAll(".cbi-button.cbi-button-up");
if (upBtns && upBtns.length > 0) { if (upBtns && upBtns.length > 0) {
@ -131,7 +123,6 @@ local dsp = require "luci.dispatcher"
}; };
}); });
} }
var downBtns = el.querySelectorAll(".cbi-button.cbi-button-down"); var downBtns = el.querySelectorAll(".cbi-button.cbi-button-down");
if (downBtns && downBtns.length > 0) { if (downBtns && downBtns.length > 0) {
downBtns.forEach(function (_el) { downBtns.forEach(function (_el) {
@ -142,7 +133,6 @@ local dsp = require "luci.dispatcher"
} }
} }
} }
// enable // enable
enableDragForTable( enableDragForTable(
"#cbi-shadowsocksr-servers table", "#cbi-shadowsocksr-servers table",

View File

@ -80,7 +80,6 @@
} }
return false; return false;
} }
function import_ssr_url(btn, urlname, sid) { function import_ssr_url(btn, urlname, sid) {
var s = document.getElementById(urlname + '-status'); var s = document.getElementById(urlname + '-status');
if (!s) if (!s)
@ -98,7 +97,6 @@
s.innerHTML = "<font color='red'>无效格式</font>"; s.innerHTML = "<font color='red'>无效格式</font>";
return false; return false;
} }
var event = document.createEvent("HTMLEvents"); var event = document.createEvent("HTMLEvents");
event.initEvent("change", true, true); event.initEvent("change", true, true);
if (ssu[0] == "ssr") { if (ssu[0] == "ssr") {
@ -137,7 +135,6 @@
s.innerHTML = "<font color='green'>导入ShadowsocksR配置信息成功</font>"; s.innerHTML = "<font color='green'>导入ShadowsocksR配置信息成功</font>";
return false; return false;
} else if (ssu[0] == "ss") { } else if (ssu[0] == "ss") {
var url0, param = ""; var url0, param = "";
var sipIndex = ssu[1].indexOf("@"); var sipIndex = ssu[1].indexOf("@");
var ploc = ssu[1].indexOf("#"); var ploc = ssu[1].indexOf("#");
@ -147,7 +144,6 @@
} else { } else {
url0 = ssu[1]; url0 = ssu[1];
} }
if (sipIndex != -1) { if (sipIndex != -1) {
// SIP002 // SIP002
var userInfo = b64decsafe(url0.substr(0, sipIndex)); var userInfo = b64decsafe(url0.substr(0, sipIndex));
@ -163,7 +159,6 @@
plugin = pluginNameInfo.substr(pluginNameInfo.indexOf("=") + 1) plugin = pluginNameInfo.substr(pluginNameInfo.indexOf("=") + 1)
pluginOpts = pluginInfo.substr(pluginIndex + 1); pluginOpts = pluginInfo.substr(pluginIndex + 1);
} }
var userInfoSplitIndex = userInfo.indexOf(":"); var userInfoSplitIndex = userInfo.indexOf(":");
if (userInfoSplitIndex != -1) { if (userInfoSplitIndex != -1) {
method = userInfo.substr(0, userInfoSplitIndex); method = userInfo.substr(0, userInfoSplitIndex);
@ -177,7 +172,6 @@
document.getElementsByName('cbid.shadowsocksr.' + sid + '.encrypt_method_ss')[0].value = method || ""; 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')[0].value = plugin || "";
document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = pluginOpts || ""; document.getElementsByName('cbid.shadowsocksr.' + sid + '.plugin_opts')[0].value = pluginOpts || "";
if (param != undefined) { if (param != undefined) {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param);
} }
@ -212,7 +206,6 @@
url0 = ssu[1] url0 = ssu[1]
} }
var sstr = url0; var sstr = url0;
document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "trojan"; document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].value = "trojan";
document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event); document.getElementsByName('cbid.shadowsocksr.' + sid + '.type')[0].dispatchEvent(event);
var team = sstr.split('@'); var team = sstr.split('@');
@ -229,7 +222,6 @@
queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || ''); queryParam[decodeURIComponent(params[0])] = decodeURIComponent(params[1] || '');
} }
} }
document.getElementsByName('cbid.shadowsocksr.' + sid + '.server')[0].value = serverPart[0]; 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 + '.server_port')[0].value = port;
document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = password; document.getElementsByName('cbid.shadowsocksr.' + sid + '.password')[0].value = password;
@ -237,7 +229,6 @@
document.getElementsByName('cbid.shadowsocksr.' + sid + '.tls')[0].dispatchEvent(event); 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 + '.tls_host')[0].value = queryParam.peer || '';
document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = queryParam.allowInsecure === '1'; document.getElementsByName('cbid.shadowsocksr.' + sid + '.insecure')[0].checked = queryParam.allowInsecure === '1';
if (param != undefined) { if (param != undefined) {
document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param); document.getElementsByName('cbid.shadowsocksr.' + sid + '.alias')[0].value = decodeURI(param);
} }

View File

@ -61,9 +61,21 @@ msgstr "密码"
msgid "Encrypt Method" msgid "Encrypt Method"
msgstr "加密方式" msgstr "加密方式"
msgid "Transport"
msgstr "传输协议"
msgid "Protocol" msgid "Protocol"
msgstr "传输协议" 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)" msgid "Protocol param(optional)"
msgstr "传输协议参数(可选)" msgstr "传输协议参数(可选)"

View File

@ -6,7 +6,6 @@ config global
option dports '2' option dports '2'
option pdnsd_enable '1' option pdnsd_enable '1'
option monitor_enable '1' option monitor_enable '1'
option global_server 'nil'
option enable_switch '1' option enable_switch '1'
option switch_timeout '5' option switch_timeout '5'
option switch_time '667' option switch_time '667'
@ -15,16 +14,13 @@ config global
option chnroute_url 'https://ispip.clang.cn/all_cn.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://raw.githubusercontent.com/QiuSimons/Netflix_IP/master/NF_only.txt'
option adblock_url 'https://gitee.com/privacy-protection-tools/anti-ad/raw/master/anti-ad-for-dnsmasq.conf' 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' option threads '0'
option global_server 'nil'
config socks5_proxy option netflix_server 'nil'
option socks '0' option netflix_proxy '0'
option local_port '1080'
option local_address '0.0.0.0'
config access_control config access_control
option wan_bp_list '/etc/china_ssr.txt' option wan_bp_list '/etc/ssr/china_ssr.txt'
option lan_ac_mode 'b' option lan_ac_mode 'b'
option router_proxy '1' option router_proxy '1'
list wan_fw_ips '149.154.160.0/20' list wan_fw_ips '149.154.160.0/20'
@ -33,6 +29,11 @@ config access_control
list wan_fw_ips '91.108.56.0/22' list wan_fw_ips '91.108.56.0/22'
list wan_fw_ips '109.239.140.0/24' list wan_fw_ips '109.239.140.0/24'
config socks5_proxy
option socks '0'
option local_port '1080'
option local_address '0.0.0.0'
config server_global config server_global
option enable_server '0' option enable_server '0'

View File

@ -1,5 +1,5 @@
server=/.030buy.com/127.0.0.1#5335 server=/.0914.global.ssl.fastly.net/127.0.0.1#5335
ipset=/.030buy.com/gfwlist ipset=/.0914.global.ssl.fastly.net/gfwlist
server=/.0rz.tw/127.0.0.1#5335 server=/.0rz.tw/127.0.0.1#5335
ipset=/.0rz.tw/gfwlist ipset=/.0rz.tw/gfwlist
server=/.10.tt/127.0.0.1#5335 server=/.10.tt/127.0.0.1#5335
@ -210,14 +210,10 @@ server=/.8news.com.tw/127.0.0.1#5335
ipset=/.8news.com.tw/gfwlist ipset=/.8news.com.tw/gfwlist
server=/.8z1.net/127.0.0.1#5335 server=/.8z1.net/127.0.0.1#5335
ipset=/.8z1.net/gfwlist ipset=/.8z1.net/gfwlist
server=/.9001700.com/127.0.0.1#5335
ipset=/.9001700.com/gfwlist
server=/.91porn.com/127.0.0.1#5335 server=/.91porn.com/127.0.0.1#5335
ipset=/.91porn.com/gfwlist ipset=/.91porn.com/gfwlist
server=/.91vps.club/127.0.0.1#5335 server=/.91vps.club/127.0.0.1#5335
ipset=/.91vps.club/gfwlist ipset=/.91vps.club/gfwlist
server=/.92ccav.com/127.0.0.1#5335
ipset=/.92ccav.com/gfwlist
server=/.991.com/127.0.0.1#5335 server=/.991.com/127.0.0.1#5335
ipset=/.991.com/gfwlist ipset=/.991.com/gfwlist
server=/.99btgc01.com/127.0.0.1#5335 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 ipset=/.a248.e.akamai.net/gfwlist
server=/.a5.com.ru/127.0.0.1#5335 server=/.a5.com.ru/127.0.0.1#5335
ipset=/.a5.com.ru/gfwlist 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 server=/.aamacau.com/127.0.0.1#5335
ipset=/.aamacau.com/gfwlist ipset=/.aamacau.com/gfwlist
server=/.abc.com/127.0.0.1#5335 server=/.abc.com/127.0.0.1#5335
@ -248,8 +246,6 @@ server=/.abc.xyz/127.0.0.1#5335
ipset=/.abc.xyz/gfwlist ipset=/.abc.xyz/gfwlist
server=/.abchinese.com/127.0.0.1#5335 server=/.abchinese.com/127.0.0.1#5335
ipset=/.abchinese.com/gfwlist ipset=/.abchinese.com/gfwlist
server=/.abclite.net/127.0.0.1#5335
ipset=/.abclite.net/gfwlist
server=/.abebooks.com/127.0.0.1#5335 server=/.abebooks.com/127.0.0.1#5335
ipset=/.abebooks.com/gfwlist ipset=/.abebooks.com/gfwlist
server=/.abematv.akamaized.net/127.0.0.1#5335 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 ipset=/.aboluowang.com/gfwlist
server=/.about.google/127.0.0.1#5335 server=/.about.google/127.0.0.1#5335
ipset=/.about.google/gfwlist 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 server=/.ac.jiruan.net/127.0.0.1#5335
ipset=/.ac.jiruan.net/gfwlist 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 server=/.aceros-de-hispania.com/127.0.0.1#5335
ipset=/.aceros-de-hispania.com/gfwlist ipset=/.aceros-de-hispania.com/gfwlist
server=/.acevpn.com/127.0.0.1#5335 server=/.acevpn.com/127.0.0.1#5335
ipset=/.acevpn.com/gfwlist ipset=/.acevpn.com/gfwlist
server=/.acg18.me/127.0.0.1#5335
ipset=/.acg18.me/gfwlist
server=/.acgkj.com/127.0.0.1#5335 server=/.acgkj.com/127.0.0.1#5335
ipset=/.acgkj.com/gfwlist ipset=/.acgkj.com/gfwlist
server=/.acmedia365.com/127.0.0.1#5335 server=/.acmedia365.com/127.0.0.1#5335
@ -300,8 +288,6 @@ server=/.admob.com/127.0.0.1#5335
ipset=/.admob.com/gfwlist ipset=/.admob.com/gfwlist
server=/.adpl.org.hk/127.0.0.1#5335 server=/.adpl.org.hk/127.0.0.1#5335
ipset=/.adpl.org.hk/gfwlist 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 server=/.adsense.com/127.0.0.1#5335
ipset=/.adsense.com/gfwlist ipset=/.adsense.com/gfwlist
server=/.adult-sex-games.com/127.0.0.1#5335 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 ipset=/.aex.com/gfwlist
server=/.af.mil/127.0.0.1#5335 server=/.af.mil/127.0.0.1#5335
ipset=/.af.mil/gfwlist ipset=/.af.mil/gfwlist
server=/.agnesb.fr/127.0.0.1#5335
ipset=/.agnesb.fr/gfwlist
server=/.agoogleaday.com/127.0.0.1#5335 server=/.agoogleaday.com/127.0.0.1#5335
ipset=/.agoogleaday.com/gfwlist ipset=/.agoogleaday.com/gfwlist
server=/.agro.hk/127.0.0.1#5335 server=/.agro.hk/127.0.0.1#5335
@ -352,8 +336,6 @@ server=/.aiweiweiblog.com/127.0.0.1#5335
ipset=/.aiweiweiblog.com/gfwlist ipset=/.aiweiweiblog.com/gfwlist
server=/.akiba-online.com/127.0.0.1#5335 server=/.akiba-online.com/127.0.0.1#5335
ipset=/.akiba-online.com/gfwlist 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 server=/.akow.org/127.0.0.1#5335
ipset=/.akow.org/gfwlist ipset=/.akow.org/gfwlist
server=/.al-islam.com/127.0.0.1#5335 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 ipset=/.alphaporno.com/gfwlist
server=/.alternate-tools.com/127.0.0.1#5335 server=/.alternate-tools.com/127.0.0.1#5335
ipset=/.alternate-tools.com/gfwlist 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 server=/.alvinalexander.com/127.0.0.1#5335
ipset=/.alvinalexander.com/gfwlist ipset=/.alvinalexander.com/gfwlist
server=/.alwaysdata.com/127.0.0.1#5335 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 ipset=/.am730.com.hk/gfwlist
server=/.amazon.co.jp/127.0.0.1#5335 server=/.amazon.co.jp/127.0.0.1#5335
ipset=/.amazon.co.jp/gfwlist ipset=/.amazon.co.jp/gfwlist
server=/.ameblo.jp/127.0.0.1#5335 server=/.ameba.jp/127.0.0.1#5335
ipset=/.ameblo.jp/gfwlist ipset=/.ameba.jp/gfwlist
server=/.americangreencard.com/127.0.0.1#5335 server=/.americangreencard.com/127.0.0.1#5335
ipset=/.americangreencard.com/gfwlist ipset=/.americangreencard.com/gfwlist
server=/.americanunfinished.com/127.0.0.1#5335 server=/.americanunfinished.com/127.0.0.1#5335
@ -470,8 +450,6 @@ server=/.andygod.com/127.0.0.1#5335
ipset=/.andygod.com/gfwlist ipset=/.andygod.com/gfwlist
server=/.angela-merkel.de/127.0.0.1#5335 server=/.angela-merkel.de/127.0.0.1#5335
ipset=/.angela-merkel.de/gfwlist 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 server=/.angularjs.org/127.0.0.1#5335
ipset=/.angularjs.org/gfwlist ipset=/.angularjs.org/gfwlist
server=/.animecrazy.net/127.0.0.1#5335 server=/.animecrazy.net/127.0.0.1#5335
@ -518,10 +496,6 @@ server=/.aolchannels.aol.com/127.0.0.1#5335
ipset=/.aolchannels.aol.com/gfwlist ipset=/.aolchannels.aol.com/gfwlist
server=/.aomiwang.com/127.0.0.1#5335 server=/.aomiwang.com/127.0.0.1#5335
ipset=/.aomiwang.com/gfwlist 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 server=/.apetube.com/127.0.0.1#5335
ipset=/.apetube.com/gfwlist ipset=/.apetube.com/gfwlist
server=/.api-secure.recaptcha.net/127.0.0.1#5335 server=/.api-secure.recaptcha.net/127.0.0.1#5335
@ -598,8 +572,6 @@ server=/.arctosia.com/127.0.0.1#5335
ipset=/.arctosia.com/gfwlist ipset=/.arctosia.com/gfwlist
server=/.areca-backup.org/127.0.0.1#5335 server=/.areca-backup.org/127.0.0.1#5335
ipset=/.areca-backup.org/gfwlist 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 server=/.arethusa.su/127.0.0.1#5335
ipset=/.arethusa.su/gfwlist ipset=/.arethusa.su/gfwlist
server=/.arlingtoncemetery.mil/127.0.0.1#5335 server=/.arlingtoncemetery.mil/127.0.0.1#5335
@ -644,16 +616,12 @@ server=/.assembla.com/127.0.0.1#5335
ipset=/.assembla.com/gfwlist ipset=/.assembla.com/gfwlist
server=/.assets.bwbx.io/127.0.0.1#5335 server=/.assets.bwbx.io/127.0.0.1#5335
ipset=/.assets.bwbx.io/gfwlist 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 server=/.astrill.com/127.0.0.1#5335
ipset=/.astrill.com/gfwlist ipset=/.astrill.com/gfwlist
server=/.atc.org.au/127.0.0.1#5335 server=/.atc.org.au/127.0.0.1#5335
ipset=/.atc.org.au/gfwlist ipset=/.atc.org.au/gfwlist
server=/.atchinese.com/127.0.0.1#5335 server=/.atchinese.com/127.0.0.1#5335
ipset=/.atchinese.com/gfwlist ipset=/.atchinese.com/gfwlist
server=/.atdmt.com/127.0.0.1#5335
ipset=/.atdmt.com/gfwlist
server=/.atgfw.org/127.0.0.1#5335 server=/.atgfw.org/127.0.0.1#5335
ipset=/.atgfw.org/gfwlist ipset=/.atgfw.org/gfwlist
server=/.athenaeizou.com/127.0.0.1#5335 server=/.athenaeizou.com/127.0.0.1#5335
@ -716,8 +684,6 @@ server=/.azerbaycan.tv/127.0.0.1#5335
ipset=/.azerbaycan.tv/gfwlist ipset=/.azerbaycan.tv/gfwlist
server=/.azerimix.com/127.0.0.1#5335 server=/.azerimix.com/127.0.0.1#5335
ipset=/.azerimix.com/gfwlist ipset=/.azerimix.com/gfwlist
server=/.azubu.tv/127.0.0.1#5335
ipset=/.azubu.tv/gfwlist
server=/.b0ne.com/127.0.0.1#5335 server=/.b0ne.com/127.0.0.1#5335
ipset=/.b0ne.com/gfwlist ipset=/.b0ne.com/gfwlist
server=/.babynet.com.hk/127.0.0.1#5335 server=/.babynet.com.hk/127.0.0.1#5335
@ -732,8 +698,6 @@ server=/.badjojo.com/127.0.0.1#5335
ipset=/.badjojo.com/gfwlist ipset=/.badjojo.com/gfwlist
server=/.badoo.com/127.0.0.1#5335 server=/.badoo.com/127.0.0.1#5335
ipset=/.badoo.com/gfwlist ipset=/.badoo.com/gfwlist
server=/.baidu.jp/127.0.0.1#5335
ipset=/.baidu.jp/gfwlist
server=/.baijie.org/127.0.0.1#5335 server=/.baijie.org/127.0.0.1#5335
ipset=/.baijie.org/gfwlist ipset=/.baijie.org/gfwlist
server=/.bailandaily.com/127.0.0.1#5335 server=/.bailandaily.com/127.0.0.1#5335
@ -746,6 +710,8 @@ server=/.banana-vpn.com/127.0.0.1#5335
ipset=/.banana-vpn.com/gfwlist ipset=/.banana-vpn.com/gfwlist
server=/.band.us/127.0.0.1#5335 server=/.band.us/127.0.0.1#5335
ipset=/.band.us/gfwlist ipset=/.band.us/gfwlist
server=/.bandpage.com/127.0.0.1#5335
ipset=/.bandpage.com/gfwlist
server=/.bandwagonhost.com/127.0.0.1#5335 server=/.bandwagonhost.com/127.0.0.1#5335
ipset=/.bandwagonhost.com/gfwlist ipset=/.bandwagonhost.com/gfwlist
server=/.bangbrosnetwork.com/127.0.0.1#5335 server=/.bangbrosnetwork.com/127.0.0.1#5335
@ -756,14 +722,10 @@ server=/.bangdream.space/127.0.0.1#5335
ipset=/.bangdream.space/gfwlist ipset=/.bangdream.space/gfwlist
server=/.bangyoulater.com/127.0.0.1#5335 server=/.bangyoulater.com/127.0.0.1#5335
ipset=/.bangyoulater.com/gfwlist ipset=/.bangyoulater.com/gfwlist
server=/.bankmobilevibe.com/127.0.0.1#5335
ipset=/.bankmobilevibe.com/gfwlist
server=/.bannedbook.org/127.0.0.1#5335 server=/.bannedbook.org/127.0.0.1#5335
ipset=/.bannedbook.org/gfwlist ipset=/.bannedbook.org/gfwlist
server=/.bannednews.org/127.0.0.1#5335 server=/.bannednews.org/127.0.0.1#5335
ipset=/.bannednews.org/gfwlist ipset=/.bannednews.org/gfwlist
server=/.banorte.com/127.0.0.1#5335
ipset=/.banorte.com/gfwlist
server=/.baramangaonline.com/127.0.0.1#5335 server=/.baramangaonline.com/127.0.0.1#5335
ipset=/.baramangaonline.com/gfwlist ipset=/.baramangaonline.com/gfwlist
server=/.barenakedislam.com/127.0.0.1#5335 server=/.barenakedislam.com/127.0.0.1#5335
@ -774,8 +736,6 @@ server=/.barton.de/127.0.0.1#5335
ipset=/.barton.de/gfwlist ipset=/.barton.de/gfwlist
server=/.bartvpn.com/127.0.0.1#5335 server=/.bartvpn.com/127.0.0.1#5335
ipset=/.bartvpn.com/gfwlist 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 server=/.bastillepost.com/127.0.0.1#5335
ipset=/.bastillepost.com/gfwlist ipset=/.bastillepost.com/gfwlist
server=/.bayvoice.net/127.0.0.1#5335 server=/.bayvoice.net/127.0.0.1#5335
@ -920,8 +880,6 @@ server=/.bfsh.hk/127.0.0.1#5335
ipset=/.bfsh.hk/gfwlist ipset=/.bfsh.hk/gfwlist
server=/.bgvpn.com/127.0.0.1#5335 server=/.bgvpn.com/127.0.0.1#5335
ipset=/.bgvpn.com/gfwlist ipset=/.bgvpn.com/gfwlist
server=/.bianlei.com/127.0.0.1#5335
ipset=/.bianlei.com/gfwlist
server=/.biantailajiao.com/127.0.0.1#5335 server=/.biantailajiao.com/127.0.0.1#5335
ipset=/.biantailajiao.com/gfwlist ipset=/.biantailajiao.com/gfwlist
server=/.biantailajiao.in/127.0.0.1#5335 server=/.biantailajiao.in/127.0.0.1#5335
@ -936,6 +894,8 @@ server=/.big.one/127.0.0.1#5335
ipset=/.big.one/gfwlist ipset=/.big.one/gfwlist
server=/.bigfools.com/127.0.0.1#5335 server=/.bigfools.com/127.0.0.1#5335
ipset=/.bigfools.com/gfwlist 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 server=/.bigjapanesesex.com/127.0.0.1#5335
ipset=/.bigjapanesesex.com/gfwlist ipset=/.bigjapanesesex.com/gfwlist
server=/.bigmoney.biz/127.0.0.1#5335 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 ipset=/.bolin.netfirms.com/gfwlist
server=/.bonbonme.com/127.0.0.1#5335 server=/.bonbonme.com/127.0.0.1#5335
ipset=/.bonbonme.com/gfwlist ipset=/.bonbonme.com/gfwlist
server=/.bonbonsex.com/127.0.0.1#5335
ipset=/.bonbonsex.com/gfwlist
server=/.bonfoundation.org/127.0.0.1#5335 server=/.bonfoundation.org/127.0.0.1#5335
ipset=/.bonfoundation.org/gfwlist ipset=/.bonfoundation.org/gfwlist
server=/.bongacams.com/127.0.0.1#5335 server=/.bongacams.com/127.0.0.1#5335
@ -1352,8 +1310,6 @@ server=/.castbox.fm/127.0.0.1#5335
ipset=/.castbox.fm/gfwlist ipset=/.castbox.fm/gfwlist
server=/.catch22.net/127.0.0.1#5335 server=/.catch22.net/127.0.0.1#5335
ipset=/.catch22.net/gfwlist ipset=/.catch22.net/gfwlist
server=/.catchgod.com/127.0.0.1#5335
ipset=/.catchgod.com/gfwlist
server=/.catfightpayperview.xxx/127.0.0.1#5335 server=/.catfightpayperview.xxx/127.0.0.1#5335
ipset=/.catfightpayperview.xxx/gfwlist ipset=/.catfightpayperview.xxx/gfwlist
server=/.catholic.org.hk/127.0.0.1#5335 server=/.catholic.org.hk/127.0.0.1#5335
@ -1602,8 +1558,6 @@ server=/.chinasoul.org/127.0.0.1#5335
ipset=/.chinasoul.org/gfwlist ipset=/.chinasoul.org/gfwlist
server=/.chinasucks.net/127.0.0.1#5335 server=/.chinasucks.net/127.0.0.1#5335
ipset=/.chinasucks.net/gfwlist ipset=/.chinasucks.net/gfwlist
server=/.chinatimes.com/127.0.0.1#5335
ipset=/.chinatimes.com/gfwlist
server=/.chinatopsex.com/127.0.0.1#5335 server=/.chinatopsex.com/127.0.0.1#5335
ipset=/.chinatopsex.com/gfwlist ipset=/.chinatopsex.com/gfwlist
server=/.chinatown.com.au/127.0.0.1#5335 server=/.chinatown.com.au/127.0.0.1#5335
@ -1656,8 +1610,6 @@ server=/.chithu.org/127.0.0.1#5335
ipset=/.chithu.org/gfwlist ipset=/.chithu.org/gfwlist
server=/.chn.chosun.com/127.0.0.1#5335 server=/.chn.chosun.com/127.0.0.1#5335
ipset=/.chn.chosun.com/gfwlist 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 server=/.chrdnet.com/127.0.0.1#5335
ipset=/.chrdnet.com/gfwlist ipset=/.chrdnet.com/gfwlist
server=/.christianfreedom.org/127.0.0.1#5335 server=/.christianfreedom.org/127.0.0.1#5335
@ -1754,6 +1706,8 @@ server=/.clinica-tibet.ru/127.0.0.1#5335
ipset=/.clinica-tibet.ru/gfwlist ipset=/.clinica-tibet.ru/gfwlist
server=/.clipfish.de/127.0.0.1#5335 server=/.clipfish.de/127.0.0.1#5335
ipset=/.clipfish.de/gfwlist ipset=/.clipfish.de/gfwlist
server=/.clips4sale.com/127.0.0.1#5335
ipset=/.clips4sale.com/gfwlist
server=/.cloakpoint.com/127.0.0.1#5335 server=/.cloakpoint.com/127.0.0.1#5335
ipset=/.cloakpoint.com/gfwlist ipset=/.cloakpoint.com/gfwlist
server=/.cloud.feedly.com/127.0.0.1#5335 server=/.cloud.feedly.com/127.0.0.1#5335
@ -1790,8 +1744,6 @@ server=/.cn.freeones.com/127.0.0.1#5335
ipset=/.cn.freeones.com/gfwlist ipset=/.cn.freeones.com/gfwlist
server=/.cn.ibtimes.com/127.0.0.1#5335 server=/.cn.ibtimes.com/127.0.0.1#5335
ipset=/.cn.ibtimes.com/gfwlist 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 server=/.cn.sandscotaicentral.com/127.0.0.1#5335
ipset=/.cn.sandscotaicentral.com/gfwlist ipset=/.cn.sandscotaicentral.com/gfwlist
server=/.cn.shafaqna.com/127.0.0.1#5335 server=/.cn.shafaqna.com/127.0.0.1#5335
@ -1948,8 +1900,6 @@ server=/.cristyli.com/127.0.0.1#5335
ipset=/.cristyli.com/gfwlist ipset=/.cristyli.com/gfwlist
server=/.crocotube.com/127.0.0.1#5335 server=/.crocotube.com/127.0.0.1#5335
ipset=/.crocotube.com/gfwlist 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 server=/.crossthewall.net/127.0.0.1#5335
ipset=/.crossthewall.net/gfwlist ipset=/.crossthewall.net/gfwlist
server=/.crossvpn.net/127.0.0.1#5335 server=/.crossvpn.net/127.0.0.1#5335
@ -2116,8 +2066,6 @@ server=/.darktech.org/127.0.0.1#5335
ipset=/.darktech.org/gfwlist ipset=/.darktech.org/gfwlist
server=/.darktoy.net/127.0.0.1#5335 server=/.darktoy.net/127.0.0.1#5335
ipset=/.darktoy.net/gfwlist ipset=/.darktoy.net/gfwlist
server=/.darpa.mil/127.0.0.1#5335
ipset=/.darpa.mil/gfwlist
server=/.dastrassi.org/127.0.0.1#5335 server=/.dastrassi.org/127.0.0.1#5335
ipset=/.dastrassi.org/gfwlist ipset=/.dastrassi.org/gfwlist
server=/.data-vocabulary.org/127.0.0.1#5335 server=/.data-vocabulary.org/127.0.0.1#5335
@ -2130,8 +2078,6 @@ server=/.daum.net/127.0.0.1#5335
ipset=/.daum.net/gfwlist ipset=/.daum.net/gfwlist
server=/.david-kilgour.com/127.0.0.1#5335 server=/.david-kilgour.com/127.0.0.1#5335
ipset=/.david-kilgour.com/gfwlist 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 server=/.daxa.cn/127.0.0.1#5335
ipset=/.daxa.cn/gfwlist ipset=/.daxa.cn/gfwlist
server=/.db.tt/127.0.0.1#5335 server=/.db.tt/127.0.0.1#5335
@ -2166,6 +2112,8 @@ server=/.deck.ly/127.0.0.1#5335
ipset=/.deck.ly/gfwlist ipset=/.deck.ly/gfwlist
server=/.decodet.co/127.0.0.1#5335 server=/.decodet.co/127.0.0.1#5335
ipset=/.decodet.co/gfwlist ipset=/.decodet.co/gfwlist
server=/.deepdiscount.com/127.0.0.1#5335
ipset=/.deepdiscount.com/gfwlist
server=/.deepmind.com/127.0.0.1#5335 server=/.deepmind.com/127.0.0.1#5335
ipset=/.deepmind.com/gfwlist ipset=/.deepmind.com/gfwlist
server=/.deezer.com/127.0.0.1#5335 server=/.deezer.com/127.0.0.1#5335
@ -2228,8 +2176,6 @@ server=/.diigo.com/127.0.0.1#5335
ipset=/.diigo.com/gfwlist ipset=/.diigo.com/gfwlist
server=/.dilber.se/127.0.0.1#5335 server=/.dilber.se/127.0.0.1#5335
ipset=/.dilber.se/gfwlist 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 server=/.dipity.com/127.0.0.1#5335
ipset=/.dipity.com/gfwlist ipset=/.dipity.com/gfwlist
server=/.directcreative.com/127.0.0.1#5335 server=/.directcreative.com/127.0.0.1#5335
@ -2270,14 +2216,10 @@ server=/.dlsite.com/127.0.0.1#5335
ipset=/.dlsite.com/gfwlist ipset=/.dlsite.com/gfwlist
server=/.dlyoutube.com/127.0.0.1#5335 server=/.dlyoutube.com/127.0.0.1#5335
ipset=/.dlyoutube.com/gfwlist ipset=/.dlyoutube.com/gfwlist
server=/.dm530.net/127.0.0.1#5335
ipset=/.dm530.net/gfwlist
server=/.dmcdn.net/127.0.0.1#5335 server=/.dmcdn.net/127.0.0.1#5335
ipset=/.dmcdn.net/gfwlist ipset=/.dmcdn.net/gfwlist
server=/.dmhy.org/127.0.0.1#5335 server=/.dmhy.org/127.0.0.1#5335
ipset=/.dmhy.org/gfwlist 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 server=/.dns-dns.com/127.0.0.1#5335
ipset=/.dns-dns.com/gfwlist ipset=/.dns-dns.com/gfwlist
server=/.dns-stuff.com/127.0.0.1#5335 server=/.dns-stuff.com/127.0.0.1#5335
@ -2302,8 +2244,6 @@ server=/.dnsrd.com/127.0.0.1#5335
ipset=/.dnsrd.com/gfwlist ipset=/.dnsrd.com/gfwlist
server=/.dnssec.net/127.0.0.1#5335 server=/.dnssec.net/127.0.0.1#5335
ipset=/.dnssec.net/gfwlist ipset=/.dnssec.net/gfwlist
server=/.dnvod.tv/127.0.0.1#5335
ipset=/.dnvod.tv/gfwlist
server=/.doctorvoice.org/127.0.0.1#5335 server=/.doctorvoice.org/127.0.0.1#5335
ipset=/.doctorvoice.org/gfwlist ipset=/.doctorvoice.org/gfwlist
server=/.documentingreality.com/127.0.0.1#5335 server=/.documentingreality.com/127.0.0.1#5335
@ -2338,6 +2278,8 @@ server=/.dontmovetochina.com/127.0.0.1#5335
ipset=/.dontmovetochina.com/gfwlist ipset=/.dontmovetochina.com/gfwlist
server=/.dorjeshugden.com/127.0.0.1#5335 server=/.dorjeshugden.com/127.0.0.1#5335
ipset=/.dorjeshugden.com/gfwlist ipset=/.dorjeshugden.com/gfwlist
server=/.dotgov.gov/127.0.0.1#5335
ipset=/.dotgov.gov/gfwlist
server=/.dotplane.com/127.0.0.1#5335 server=/.dotplane.com/127.0.0.1#5335
ipset=/.dotplane.com/gfwlist ipset=/.dotplane.com/gfwlist
server=/.dotsub.com/127.0.0.1#5335 server=/.dotsub.com/127.0.0.1#5335
@ -2554,8 +2496,6 @@ server=/.edubridge.com/127.0.0.1#5335
ipset=/.edubridge.com/gfwlist ipset=/.edubridge.com/gfwlist
server=/.edupro.org/127.0.0.1#5335 server=/.edupro.org/127.0.0.1#5335
ipset=/.edupro.org/gfwlist ipset=/.edupro.org/gfwlist
server=/.eesti.ee/127.0.0.1#5335
ipset=/.eesti.ee/gfwlist
server=/.eevpn.com/127.0.0.1#5335 server=/.eevpn.com/127.0.0.1#5335
ipset=/.eevpn.com/gfwlist ipset=/.eevpn.com/gfwlist
server=/.efcc.org.hk/127.0.0.1#5335 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 ipset=/.eslite.com/gfwlist
server=/.esmtp.biz/127.0.0.1#5335 server=/.esmtp.biz/127.0.0.1#5335
ipset=/.esmtp.biz/gfwlist 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 server=/.etaa.org.au/127.0.0.1#5335
ipset=/.etaa.org.au/gfwlist ipset=/.etaa.org.au/gfwlist
server=/.etadult.com/127.0.0.1#5335 server=/.etadult.com/127.0.0.1#5335
@ -2910,8 +2848,6 @@ server=/.farwestchina.com/127.0.0.1#5335
ipset=/.farwestchina.com/gfwlist ipset=/.farwestchina.com/gfwlist
server=/.fast.wistia.com/127.0.0.1#5335 server=/.fast.wistia.com/127.0.0.1#5335
ipset=/.fast.wistia.com/gfwlist 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 server=/.fastssh.com/127.0.0.1#5335
ipset=/.fastssh.com/gfwlist ipset=/.fastssh.com/gfwlist
server=/.faststone.org/127.0.0.1#5335 server=/.faststone.org/127.0.0.1#5335
@ -2996,16 +2932,12 @@ server=/.fileflyer.com/127.0.0.1#5335
ipset=/.fileflyer.com/gfwlist ipset=/.fileflyer.com/gfwlist
server=/.files2me.com/127.0.0.1#5335 server=/.files2me.com/127.0.0.1#5335
ipset=/.files2me.com/gfwlist ipset=/.files2me.com/gfwlist
server=/.filesor.com/127.0.0.1#5335
ipset=/.filesor.com/gfwlist
server=/.fillthesquare.org/127.0.0.1#5335 server=/.fillthesquare.org/127.0.0.1#5335
ipset=/.fillthesquare.org/gfwlist ipset=/.fillthesquare.org/gfwlist
server=/.filmingfortibet.org/127.0.0.1#5335 server=/.filmingfortibet.org/127.0.0.1#5335
ipset=/.filmingfortibet.org/gfwlist ipset=/.filmingfortibet.org/gfwlist
server=/.filthdump.com/127.0.0.1#5335 server=/.filthdump.com/127.0.0.1#5335
ipset=/.filthdump.com/gfwlist ipset=/.filthdump.com/gfwlist
server=/.financetwitter.com/127.0.0.1#5335
ipset=/.financetwitter.com/gfwlist
server=/.finchvpn.com/127.0.0.1#5335 server=/.finchvpn.com/127.0.0.1#5335
ipset=/.finchvpn.com/gfwlist ipset=/.finchvpn.com/gfwlist
server=/.findmespot.com/127.0.0.1#5335 server=/.findmespot.com/127.0.0.1#5335
@ -3062,10 +2994,6 @@ server=/.flyvpn.com/127.0.0.1#5335
ipset=/.flyvpn.com/gfwlist ipset=/.flyvpn.com/gfwlist
server=/.flyzy2005.com/127.0.0.1#5335 server=/.flyzy2005.com/127.0.0.1#5335
ipset=/.flyzy2005.com/gfwlist 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 server=/.fochk.org/127.0.0.1#5335
ipset=/.fochk.org/gfwlist ipset=/.fochk.org/gfwlist
server=/.focustaiwan.tw/127.0.0.1#5335 server=/.focustaiwan.tw/127.0.0.1#5335
@ -3318,8 +3246,6 @@ server=/.fw.cm/127.0.0.1#5335
ipset=/.fw.cm/gfwlist ipset=/.fw.cm/gfwlist
server=/.fxcm-chinese.com/127.0.0.1#5335 server=/.fxcm-chinese.com/127.0.0.1#5335
ipset=/.fxcm-chinese.com/gfwlist 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 server=/.fzh999.com/127.0.0.1#5335
ipset=/.fzh999.com/gfwlist ipset=/.fzh999.com/gfwlist
server=/.fzh999.net/127.0.0.1#5335 server=/.fzh999.net/127.0.0.1#5335
@ -3470,10 +3396,6 @@ server=/.getsync.com/127.0.0.1#5335
ipset=/.getsync.com/gfwlist ipset=/.getsync.com/gfwlist
server=/.gettrials.com/127.0.0.1#5335 server=/.gettrials.com/127.0.0.1#5335
ipset=/.gettrials.com/gfwlist 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 server=/.gfbv.de/127.0.0.1#5335
ipset=/.gfbv.de/gfwlist ipset=/.gfbv.de/gfwlist
server=/.gfgold.com.hk/127.0.0.1#5335 server=/.gfgold.com.hk/127.0.0.1#5335
@ -3512,8 +3434,6 @@ server=/.gjczz.com/127.0.0.1#5335
ipset=/.gjczz.com/gfwlist ipset=/.gjczz.com/gfwlist
server=/.glass8.eu/127.0.0.1#5335 server=/.glass8.eu/127.0.0.1#5335
ipset=/.glass8.eu/gfwlist 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 server=/.globaljihad.net/127.0.0.1#5335
ipset=/.globaljihad.net/gfwlist ipset=/.globaljihad.net/gfwlist
server=/.globalmediaoutreach.com/127.0.0.1#5335 server=/.globalmediaoutreach.com/127.0.0.1#5335
@ -3536,8 +3456,6 @@ server=/.gloryhole.com/127.0.0.1#5335
ipset=/.gloryhole.com/gfwlist ipset=/.gloryhole.com/gfwlist
server=/.glorystar.me/127.0.0.1#5335 server=/.glorystar.me/127.0.0.1#5335
ipset=/.glorystar.me/gfwlist ipset=/.glorystar.me/gfwlist
server=/.glype.com/127.0.0.1#5335
ipset=/.glype.com/gfwlist
server=/.gmail.com/127.0.0.1#5335 server=/.gmail.com/127.0.0.1#5335
ipset=/.gmail.com/gfwlist ipset=/.gmail.com/gfwlist
server=/.gmbd.cn/127.0.0.1#5335 server=/.gmbd.cn/127.0.0.1#5335
@ -4214,10 +4132,6 @@ server=/.hkzone.org/127.0.0.1#5335
ipset=/.hkzone.org/gfwlist ipset=/.hkzone.org/gfwlist
server=/.hmonghot.com/127.0.0.1#5335 server=/.hmonghot.com/127.0.0.1#5335
ipset=/.hmonghot.com/gfwlist 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 server=/.hnjhj.com/127.0.0.1#5335
ipset=/.hnjhj.com/gfwlist ipset=/.hnjhj.com/gfwlist
server=/.hnntube.com/127.0.0.1#5335 server=/.hnntube.com/127.0.0.1#5335
@ -4234,8 +4148,6 @@ server=/.holyspiritspeaks.org/127.0.0.1#5335
ipset=/.holyspiritspeaks.org/gfwlist ipset=/.holyspiritspeaks.org/gfwlist
server=/.home.sina.com/127.0.0.1#5335 server=/.home.sina.com/127.0.0.1#5335
ipset=/.home.sina.com/gfwlist 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 server=/.homeperversion.com/127.0.0.1#5335
ipset=/.homeperversion.com/gfwlist ipset=/.homeperversion.com/gfwlist
server=/.homeservershow.com/127.0.0.1#5335 server=/.homeservershow.com/127.0.0.1#5335
@ -4248,8 +4160,6 @@ server=/.hongzhi.li/127.0.0.1#5335
ipset=/.hongzhi.li/gfwlist ipset=/.hongzhi.li/gfwlist
server=/.hootsuite.com/127.0.0.1#5335 server=/.hootsuite.com/127.0.0.1#5335
ipset=/.hootsuite.com/gfwlist ipset=/.hootsuite.com/gfwlist
server=/.hoovers.com/127.0.0.1#5335
ipset=/.hoovers.com/gfwlist
server=/.hopedialogue.org/127.0.0.1#5335 server=/.hopedialogue.org/127.0.0.1#5335
ipset=/.hopedialogue.org/gfwlist ipset=/.hopedialogue.org/gfwlist
server=/.hopto.org/127.0.0.1#5335 server=/.hopto.org/127.0.0.1#5335
@ -4522,8 +4432,6 @@ server=/.illusionfactory.com/127.0.0.1#5335
ipset=/.illusionfactory.com/gfwlist ipset=/.illusionfactory.com/gfwlist
server=/.ilove80.be/127.0.0.1#5335 server=/.ilove80.be/127.0.0.1#5335
ipset=/.ilove80.be/gfwlist ipset=/.ilove80.be/gfwlist
server=/.ilovelongtoes.com/127.0.0.1#5335
ipset=/.ilovelongtoes.com/gfwlist
server=/.im.tv/127.0.0.1#5335 server=/.im.tv/127.0.0.1#5335
ipset=/.im.tv/gfwlist ipset=/.im.tv/gfwlist
server=/.im88.tw/127.0.0.1#5335 server=/.im88.tw/127.0.0.1#5335
@ -4536,8 +4444,6 @@ server=/.imageflea.com/127.0.0.1#5335
ipset=/.imageflea.com/gfwlist ipset=/.imageflea.com/gfwlist
server=/.images-gaytube.com/127.0.0.1#5335 server=/.images-gaytube.com/127.0.0.1#5335
ipset=/.images-gaytube.com/gfwlist 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 server=/.imageshack.us/127.0.0.1#5335
ipset=/.imageshack.us/gfwlist ipset=/.imageshack.us/gfwlist
server=/.imagevenue.com/127.0.0.1#5335 server=/.imagevenue.com/127.0.0.1#5335
@ -4664,8 +4570,6 @@ server=/.isaacmao.com/127.0.0.1#5335
ipset=/.isaacmao.com/gfwlist ipset=/.isaacmao.com/gfwlist
server=/.isasecret.com/127.0.0.1#5335 server=/.isasecret.com/127.0.0.1#5335
ipset=/.isasecret.com/gfwlist 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 server=/.isgreat.org/127.0.0.1#5335
ipset=/.isgreat.org/gfwlist ipset=/.isgreat.org/gfwlist
server=/.islahhaber.net/127.0.0.1#5335 server=/.islahhaber.net/127.0.0.1#5335
@ -4770,6 +4674,8 @@ server=/.jav68.tv/127.0.0.1#5335
ipset=/.jav68.tv/gfwlist ipset=/.jav68.tv/gfwlist
server=/.javakiba.org/127.0.0.1#5335 server=/.javakiba.org/127.0.0.1#5335
ipset=/.javakiba.org/gfwlist ipset=/.javakiba.org/gfwlist
server=/.javbus.co/127.0.0.1#5335
ipset=/.javbus.co/gfwlist
server=/.javbus.com/127.0.0.1#5335 server=/.javbus.com/127.0.0.1#5335
ipset=/.javbus.com/gfwlist ipset=/.javbus.com/gfwlist
server=/.javfor.me/127.0.0.1#5335 server=/.javfor.me/127.0.0.1#5335
@ -4778,10 +4684,6 @@ server=/.javhd.com/127.0.0.1#5335
ipset=/.javhd.com/gfwlist ipset=/.javhd.com/gfwlist
server=/.javhip.com/127.0.0.1#5335 server=/.javhip.com/127.0.0.1#5335
ipset=/.javhip.com/gfwlist 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 server=/.javlibrary.com/127.0.0.1#5335
ipset=/.javlibrary.com/gfwlist ipset=/.javlibrary.com/gfwlist
server=/.javmobile.net/127.0.0.1#5335 server=/.javmobile.net/127.0.0.1#5335
@ -4804,8 +4706,6 @@ server=/.jbtalks.com/127.0.0.1#5335
ipset=/.jbtalks.com/gfwlist ipset=/.jbtalks.com/gfwlist
server=/.jbtalks.my/127.0.0.1#5335 server=/.jbtalks.my/127.0.0.1#5335
ipset=/.jbtalks.my/gfwlist ipset=/.jbtalks.my/gfwlist
server=/.jcpenney.com/127.0.0.1#5335
ipset=/.jcpenney.com/gfwlist
server=/.jdwsy.com/127.0.0.1#5335 server=/.jdwsy.com/127.0.0.1#5335
ipset=/.jdwsy.com/gfwlist ipset=/.jdwsy.com/gfwlist
server=/.jeanyim.com/127.0.0.1#5335 server=/.jeanyim.com/127.0.0.1#5335
@ -4838,8 +4738,6 @@ server=/.jihadology.net/127.0.0.1#5335
ipset=/.jihadology.net/gfwlist ipset=/.jihadology.net/gfwlist
server=/.jiji.com/127.0.0.1#5335 server=/.jiji.com/127.0.0.1#5335
ipset=/.jiji.com/gfwlist ipset=/.jiji.com/gfwlist
server=/.jims.net/127.0.0.1#5335
ipset=/.jims.net/gfwlist
server=/.jinbushe.org/127.0.0.1#5335 server=/.jinbushe.org/127.0.0.1#5335
ipset=/.jinbushe.org/gfwlist ipset=/.jinbushe.org/gfwlist
server=/.jingpin.org/127.0.0.1#5335 server=/.jingpin.org/127.0.0.1#5335
@ -4974,8 +4872,6 @@ server=/.kawaiikawaii.jp/127.0.0.1#5335
ipset=/.kawaiikawaii.jp/gfwlist ipset=/.kawaiikawaii.jp/gfwlist
server=/.kawase.com/127.0.0.1#5335 server=/.kawase.com/127.0.0.1#5335
ipset=/.kawase.com/gfwlist 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 server=/.kba-tx.org/127.0.0.1#5335
ipset=/.kba-tx.org/gfwlist ipset=/.kba-tx.org/gfwlist
server=/.kcoolonline.com/127.0.0.1#5335 server=/.kcoolonline.com/127.0.0.1#5335
@ -5002,8 +4898,6 @@ server=/.keycdn.com/127.0.0.1#5335
ipset=/.keycdn.com/gfwlist ipset=/.keycdn.com/gfwlist
server=/.khabdha.org/127.0.0.1#5335 server=/.khabdha.org/127.0.0.1#5335
ipset=/.khabdha.org/gfwlist 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 server=/.khmusic.com.tw/127.0.0.1#5335
ipset=/.khmusic.com.tw/gfwlist ipset=/.khmusic.com.tw/gfwlist
server=/.kichiku-doujinko.com/127.0.0.1#5335 server=/.kichiku-doujinko.com/127.0.0.1#5335
@ -5166,8 +5060,6 @@ server=/.leirentv.ca/127.0.0.1#5335
ipset=/.leirentv.ca/gfwlist ipset=/.leirentv.ca/gfwlist
server=/.leisurecafe.ca/127.0.0.1#5335 server=/.leisurecafe.ca/127.0.0.1#5335
ipset=/.leisurecafe.ca/gfwlist ipset=/.leisurecafe.ca/gfwlist
server=/.leisurepro.com/127.0.0.1#5335
ipset=/.leisurepro.com/gfwlist
server=/.lematin.ch/127.0.0.1#5335 server=/.lematin.ch/127.0.0.1#5335
ipset=/.lematin.ch/gfwlist ipset=/.lematin.ch/gfwlist
server=/.lemonde.fr/127.0.0.1#5335 server=/.lemonde.fr/127.0.0.1#5335
@ -5208,8 +5100,6 @@ server=/.liberal.org.hk/127.0.0.1#5335
ipset=/.liberal.org.hk/gfwlist ipset=/.liberal.org.hk/gfwlist
server=/.libertytimes.com.tw/127.0.0.1#5335 server=/.libertytimes.com.tw/127.0.0.1#5335
ipset=/.libertytimes.com.tw/gfwlist 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 server=/.lighten.org.tw/127.0.0.1#5335
ipset=/.lighten.org.tw/gfwlist ipset=/.lighten.org.tw/gfwlist
server=/.lighti.me/127.0.0.1#5335 server=/.lighti.me/127.0.0.1#5335
@ -5316,8 +5206,6 @@ server=/.longmusic.com/127.0.0.1#5335
ipset=/.longmusic.com/gfwlist ipset=/.longmusic.com/gfwlist
server=/.longtermly.net/127.0.0.1#5335 server=/.longtermly.net/127.0.0.1#5335
ipset=/.longtermly.net/gfwlist ipset=/.longtermly.net/gfwlist
server=/.longtoes.com/127.0.0.1#5335
ipset=/.longtoes.com/gfwlist
server=/.lookpic.com/127.0.0.1#5335 server=/.lookpic.com/127.0.0.1#5335
ipset=/.lookpic.com/gfwlist ipset=/.lookpic.com/gfwlist
server=/.looktoronto.com/127.0.0.1#5335 server=/.looktoronto.com/127.0.0.1#5335
@ -5376,8 +5264,6 @@ server=/.m.plixi.com/127.0.0.1#5335
ipset=/.m.plixi.com/gfwlist ipset=/.m.plixi.com/gfwlist
server=/.m.slandr.net/127.0.0.1#5335 server=/.m.slandr.net/127.0.0.1#5335
ipset=/.m.slandr.net/gfwlist 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 server=/.macrovpn.com/127.0.0.1#5335
ipset=/.macrovpn.com/gfwlist ipset=/.macrovpn.com/gfwlist
server=/.macts.com.tw/127.0.0.1#5335 server=/.macts.com.tw/127.0.0.1#5335
@ -5420,10 +5306,6 @@ server=/.mamingzhe.com/127.0.0.1#5335
ipset=/.mamingzhe.com/gfwlist ipset=/.mamingzhe.com/gfwlist
server=/.manchukuo.net/127.0.0.1#5335 server=/.manchukuo.net/127.0.0.1#5335
ipset=/.manchukuo.net/gfwlist 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 server=/.maniash.com/127.0.0.1#5335
ipset=/.maniash.com/gfwlist ipset=/.maniash.com/gfwlist
server=/.manicur4ik.ru/127.0.0.1#5335 server=/.manicur4ik.ru/127.0.0.1#5335
@ -5574,8 +5456,6 @@ server=/.meyou.jp/127.0.0.1#5335
ipset=/.meyou.jp/gfwlist ipset=/.meyou.jp/gfwlist
server=/.meyul.com/127.0.0.1#5335 server=/.meyul.com/127.0.0.1#5335
ipset=/.meyul.com/gfwlist ipset=/.meyul.com/gfwlist
server=/.mfxmedia.com/127.0.0.1#5335
ipset=/.mfxmedia.com/gfwlist
server=/.mgoon.com/127.0.0.1#5335 server=/.mgoon.com/127.0.0.1#5335
ipset=/.mgoon.com/gfwlist ipset=/.mgoon.com/gfwlist
server=/.mgstage.com/127.0.0.1#5335 server=/.mgstage.com/127.0.0.1#5335
@ -5746,8 +5626,6 @@ server=/.moodyz.com/127.0.0.1#5335
ipset=/.moodyz.com/gfwlist ipset=/.moodyz.com/gfwlist
server=/.moonbbs.com/127.0.0.1#5335 server=/.moonbbs.com/127.0.0.1#5335
ipset=/.moonbbs.com/gfwlist ipset=/.moonbbs.com/gfwlist
server=/.moonbingo.com/127.0.0.1#5335
ipset=/.moonbingo.com/gfwlist
server=/.morningsun.org/127.0.0.1#5335 server=/.morningsun.org/127.0.0.1#5335
ipset=/.morningsun.org/gfwlist ipset=/.morningsun.org/gfwlist
server=/.moroneta.com/127.0.0.1#5335 server=/.moroneta.com/127.0.0.1#5335
@ -5824,8 +5702,6 @@ server=/.muzi.com/127.0.0.1#5335
ipset=/.muzi.com/gfwlist ipset=/.muzi.com/gfwlist
server=/.muzi.net/127.0.0.1#5335 server=/.muzi.net/127.0.0.1#5335
ipset=/.muzi.net/gfwlist 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 server=/.mvdis.gov.tw/127.0.0.1#5335
ipset=/.mvdis.gov.tw/gfwlist ipset=/.mvdis.gov.tw/gfwlist
server=/.mvg.jp/127.0.0.1#5335 server=/.mvg.jp/127.0.0.1#5335
@ -5986,6 +5862,8 @@ server=/.nccwatch.org.tw/127.0.0.1#5335
ipset=/.nccwatch.org.tw/gfwlist ipset=/.nccwatch.org.tw/gfwlist
server=/.nch.com.tw/127.0.0.1#5335 server=/.nch.com.tw/127.0.0.1#5335
ipset=/.nch.com.tw/gfwlist 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 server=/.ncn.org/127.0.0.1#5335
ipset=/.ncn.org/gfwlist ipset=/.ncn.org/gfwlist
server=/.nde.de/127.0.0.1#5335 server=/.nde.de/127.0.0.1#5335
@ -5996,8 +5874,6 @@ server=/.ned.org/127.0.0.1#5335
ipset=/.ned.org/gfwlist ipset=/.ned.org/gfwlist
server=/.nekoslovakia.net/127.0.0.1#5335 server=/.nekoslovakia.net/127.0.0.1#5335
ipset=/.nekoslovakia.net/gfwlist 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 server=/.nepusoku.com/127.0.0.1#5335
ipset=/.nepusoku.com/gfwlist ipset=/.nepusoku.com/gfwlist
server=/.net-fits.pro/127.0.0.1#5335 server=/.net-fits.pro/127.0.0.1#5335
@ -6128,8 +6004,6 @@ server=/.nic.cz.cc/127.0.0.1#5335
ipset=/.nic.cz.cc/gfwlist ipset=/.nic.cz.cc/gfwlist
server=/.nic.google/127.0.0.1#5335 server=/.nic.google/127.0.0.1#5335
ipset=/.nic.google/gfwlist ipset=/.nic.google/gfwlist
server=/.nic.gov/127.0.0.1#5335
ipset=/.nic.gov/gfwlist
server=/.nicovideo.jp/127.0.0.1#5335 server=/.nicovideo.jp/127.0.0.1#5335
ipset=/.nicovideo.jp/gfwlist ipset=/.nicovideo.jp/gfwlist
server=/.nighost.org/127.0.0.1#5335 server=/.nighost.org/127.0.0.1#5335
@ -6176,16 +6050,14 @@ server=/.norbulingka.org/127.0.0.1#5335
ipset=/.norbulingka.org/gfwlist ipset=/.norbulingka.org/gfwlist
server=/.nordstrom.com/127.0.0.1#5335 server=/.nordstrom.com/127.0.0.1#5335
ipset=/.nordstrom.com/gfwlist ipset=/.nordstrom.com/gfwlist
server=/.nordstromimage.com/127.0.0.1#5335 server=/.nordstrommedia.com/127.0.0.1#5335
ipset=/.nordstromimage.com/gfwlist ipset=/.nordstrommedia.com/gfwlist
server=/.nordstromrack.com/127.0.0.1#5335 server=/.nordstromrack.com/127.0.0.1#5335
ipset=/.nordstromrack.com/gfwlist ipset=/.nordstromrack.com/gfwlist
server=/.nordvpn.com/127.0.0.1#5335 server=/.nordvpn.com/127.0.0.1#5335
ipset=/.nordvpn.com/gfwlist ipset=/.nordvpn.com/gfwlist
server=/.notify.dropboxapi.com/127.0.0.1#5335 server=/.notify.dropboxapi.com/127.0.0.1#5335
ipset=/.notify.dropboxapi.com/gfwlist 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 server=/.novelasia.com/127.0.0.1#5335
ipset=/.novelasia.com/gfwlist ipset=/.novelasia.com/gfwlist
server=/.now.com/127.0.0.1#5335 server=/.now.com/127.0.0.1#5335
@ -6206,8 +6078,6 @@ server=/.npnt.me/127.0.0.1#5335
ipset=/.npnt.me/gfwlist ipset=/.npnt.me/gfwlist
server=/.nps.gov/127.0.0.1#5335 server=/.nps.gov/127.0.0.1#5335
ipset=/.nps.gov/gfwlist ipset=/.nps.gov/gfwlist
server=/.npsboost.com/127.0.0.1#5335
ipset=/.npsboost.com/gfwlist
server=/.nradio.me/127.0.0.1#5335 server=/.nradio.me/127.0.0.1#5335
ipset=/.nradio.me/gfwlist ipset=/.nradio.me/gfwlist
server=/.nrk.no/127.0.0.1#5335 server=/.nrk.no/127.0.0.1#5335
@ -6246,8 +6116,6 @@ server=/.ntdtv.co.kr/127.0.0.1#5335
ipset=/.ntdtv.co.kr/gfwlist ipset=/.ntdtv.co.kr/gfwlist
server=/.ntdtv.com/127.0.0.1#5335 server=/.ntdtv.com/127.0.0.1#5335
ipset=/.ntdtv.com/gfwlist ipset=/.ntdtv.com/gfwlist
server=/.ntdtv.cz/127.0.0.1#5335
ipset=/.ntdtv.cz/gfwlist
server=/.ntdtv.org/127.0.0.1#5335 server=/.ntdtv.org/127.0.0.1#5335
ipset=/.ntdtv.org/gfwlist ipset=/.ntdtv.org/gfwlist
server=/.ntdtv.ru/127.0.0.1#5335 server=/.ntdtv.ru/127.0.0.1#5335
@ -6260,14 +6128,14 @@ server=/.ntsna.gov.tw/127.0.0.1#5335
ipset=/.ntsna.gov.tw/gfwlist ipset=/.ntsna.gov.tw/gfwlist
server=/.nubiles.net/127.0.0.1#5335 server=/.nubiles.net/127.0.0.1#5335
ipset=/.nubiles.net/gfwlist ipset=/.nubiles.net/gfwlist
server=/.nudezz.com/127.0.0.1#5335
ipset=/.nudezz.com/gfwlist
server=/.nuexpo.com/127.0.0.1#5335 server=/.nuexpo.com/127.0.0.1#5335
ipset=/.nuexpo.com/gfwlist ipset=/.nuexpo.com/gfwlist
server=/.nukistream.com/127.0.0.1#5335 server=/.nukistream.com/127.0.0.1#5335
ipset=/.nukistream.com/gfwlist ipset=/.nukistream.com/gfwlist
server=/.nurgo-software.com/127.0.0.1#5335 server=/.nurgo-software.com/127.0.0.1#5335
ipset=/.nurgo-software.com/gfwlist 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 server=/.nutaku.net/127.0.0.1#5335
ipset=/.nutaku.net/gfwlist ipset=/.nutaku.net/gfwlist
server=/.nuuvem.com/127.0.0.1#5335 server=/.nuuvem.com/127.0.0.1#5335
@ -6332,6 +6200,8 @@ server=/.ocreampies.com/127.0.0.1#5335
ipset=/.ocreampies.com/gfwlist ipset=/.ocreampies.com/gfwlist
server=/.ocry.com/127.0.0.1#5335 server=/.ocry.com/127.0.0.1#5335
ipset=/.ocry.com/gfwlist ipset=/.ocry.com/gfwlist
server=/.ocsp.int-x3.letsencrypt.org/127.0.0.1#5335
ipset=/.ocsp.int-x3.letsencrypt.org/gfwlist
server=/.october-review.org/127.0.0.1#5335 server=/.october-review.org/127.0.0.1#5335
ipset=/.october-review.org/gfwlist ipset=/.october-review.org/gfwlist
server=/.oculus.com/127.0.0.1#5335 server=/.oculus.com/127.0.0.1#5335
@ -6382,8 +6252,6 @@ server=/.on.cc/127.0.0.1#5335
ipset=/.on.cc/gfwlist ipset=/.on.cc/gfwlist
server=/.on2.com/127.0.0.1#5335 server=/.on2.com/127.0.0.1#5335
ipset=/.on2.com/gfwlist 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 server=/.onedrive.live.com/127.0.0.1#5335
ipset=/.onedrive.live.com/gfwlist ipset=/.onedrive.live.com/gfwlist
server=/.onedumb.com/127.0.0.1#5335 server=/.onedumb.com/127.0.0.1#5335
@ -6416,8 +6284,6 @@ server=/.onmypc.us/127.0.0.1#5335
ipset=/.onmypc.us/gfwlist ipset=/.onmypc.us/gfwlist
server=/.onthehunt.com/127.0.0.1#5335 server=/.onthehunt.com/127.0.0.1#5335
ipset=/.onthehunt.com/gfwlist ipset=/.onthehunt.com/gfwlist
server=/.ontrac.com/127.0.0.1#5335
ipset=/.ontrac.com/gfwlist
server=/.oopsforum.com/127.0.0.1#5335 server=/.oopsforum.com/127.0.0.1#5335
ipset=/.oopsforum.com/gfwlist ipset=/.oopsforum.com/gfwlist
server=/.open.com.hk/127.0.0.1#5335 server=/.open.com.hk/127.0.0.1#5335
@ -6552,8 +6418,8 @@ server=/.paradisehill.cc/127.0.0.1#5335
ipset=/.paradisehill.cc/gfwlist ipset=/.paradisehill.cc/gfwlist
server=/.paradisepoker.com/127.0.0.1#5335 server=/.paradisepoker.com/127.0.0.1#5335
ipset=/.paradisepoker.com/gfwlist ipset=/.paradisepoker.com/gfwlist
server=/.parkansky.com/127.0.0.1#5335 server=/.parts.blog.livedoor.jp/127.0.0.1#5335
ipset=/.parkansky.com/gfwlist ipset=/.parts.blog.livedoor.jp/gfwlist
server=/.partycasino.com/127.0.0.1#5335 server=/.partycasino.com/127.0.0.1#5335
ipset=/.partycasino.com/gfwlist ipset=/.partycasino.com/gfwlist
server=/.partypoker.com/127.0.0.1#5335 server=/.partypoker.com/127.0.0.1#5335
@ -6906,6 +6772,8 @@ server=/.proxomitron.info/127.0.0.1#5335
ipset=/.proxomitron.info/gfwlist ipset=/.proxomitron.info/gfwlist
server=/.proxpn.com/127.0.0.1#5335 server=/.proxpn.com/127.0.0.1#5335
ipset=/.proxpn.com/gfwlist ipset=/.proxpn.com/gfwlist
server=/.proxy.org/127.0.0.1#5335
ipset=/.proxy.org/gfwlist
server=/.proxy1.xyz/127.0.0.1#5335 server=/.proxy1.xyz/127.0.0.1#5335
ipset=/.proxy1.xyz/gfwlist ipset=/.proxy1.xyz/gfwlist
server=/.proxyanonimo.es/127.0.0.1#5335 server=/.proxyanonimo.es/127.0.0.1#5335
@ -6948,6 +6816,8 @@ server=/.pttvan.org/127.0.0.1#5335
ipset=/.pttvan.org/gfwlist ipset=/.pttvan.org/gfwlist
server=/.pubu.com.tw/127.0.0.1#5335 server=/.pubu.com.tw/127.0.0.1#5335
ipset=/.pubu.com.tw/gfwlist 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 server=/.puffinbrowser.com/127.0.0.1#5335
ipset=/.puffinbrowser.com/gfwlist ipset=/.puffinbrowser.com/gfwlist
server=/.puffstore.com/127.0.0.1#5335 server=/.puffstore.com/127.0.0.1#5335
@ -6956,8 +6826,6 @@ server=/.pullfolio.com/127.0.0.1#5335
ipset=/.pullfolio.com/gfwlist ipset=/.pullfolio.com/gfwlist
server=/.pulse.yahoo.com/127.0.0.1#5335 server=/.pulse.yahoo.com/127.0.0.1#5335
ipset=/.pulse.yahoo.com/gfwlist 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 server=/.pureconcepts.net/127.0.0.1#5335
ipset=/.pureconcepts.net/gfwlist ipset=/.pureconcepts.net/gfwlist
server=/.pureinsight.org/127.0.0.1#5335 server=/.pureinsight.org/127.0.0.1#5335
@ -6984,8 +6852,6 @@ server=/.pwned.com/127.0.0.1#5335
ipset=/.pwned.com/gfwlist ipset=/.pwned.com/gfwlist
server=/.python.com/127.0.0.1#5335 server=/.python.com/127.0.0.1#5335
ipset=/.python.com/gfwlist ipset=/.python.com/gfwlist
server=/.pytorch.org/127.0.0.1#5335
ipset=/.pytorch.org/gfwlist
server=/.qanote.com/127.0.0.1#5335 server=/.qanote.com/127.0.0.1#5335
ipset=/.qanote.com/gfwlist ipset=/.qanote.com/gfwlist
server=/.qgirl.com.tw/127.0.0.1#5335 server=/.qgirl.com.tw/127.0.0.1#5335
@ -7012,8 +6878,6 @@ server=/.qoos.com/127.0.0.1#5335
ipset=/.qoos.com/gfwlist ipset=/.qoos.com/gfwlist
server=/.qpoe.com/127.0.0.1#5335 server=/.qpoe.com/127.0.0.1#5335
ipset=/.qpoe.com/gfwlist 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 server=/.qstatus.com/127.0.0.1#5335
ipset=/.qstatus.com/gfwlist ipset=/.qstatus.com/gfwlist
server=/.qtrac.eu/127.0.0.1#5335 server=/.qtrac.eu/127.0.0.1#5335
@ -7046,8 +6910,6 @@ server=/.qxbbs.org/127.0.0.1#5335
ipset=/.qxbbs.org/gfwlist ipset=/.qxbbs.org/gfwlist
server=/.qz.com/127.0.0.1#5335 server=/.qz.com/127.0.0.1#5335
ipset=/.qz.com/gfwlist ipset=/.qz.com/gfwlist
server=/.r18.com/127.0.0.1#5335
ipset=/.r18.com/gfwlist
server=/.ra.gg/127.0.0.1#5335 server=/.ra.gg/127.0.0.1#5335
ipset=/.ra.gg/gfwlist ipset=/.ra.gg/gfwlist
server=/.radicalparty.org/127.0.0.1#5335 server=/.radicalparty.org/127.0.0.1#5335
@ -7070,8 +6932,8 @@ server=/.raidtalk.com.tw/127.0.0.1#5335
ipset=/.raidtalk.com.tw/gfwlist ipset=/.raidtalk.com.tw/gfwlist
server=/.raizoji.or.jp/127.0.0.1#5335 server=/.raizoji.or.jp/127.0.0.1#5335
ipset=/.raizoji.or.jp/gfwlist ipset=/.raizoji.or.jp/gfwlist
server=/.ramcity.com.au/127.0.0.1#5335 server=/.rakuten.co.jp/127.0.0.1#5335
ipset=/.ramcity.com.au/gfwlist ipset=/.rakuten.co.jp/gfwlist
server=/.rangwang.biz/127.0.0.1#5335 server=/.rangwang.biz/127.0.0.1#5335
ipset=/.rangwang.biz/gfwlist ipset=/.rangwang.biz/gfwlist
server=/.rangzen.com/127.0.0.1#5335 server=/.rangzen.com/127.0.0.1#5335
@ -7108,10 +6970,6 @@ server=/.rcinet.ca/127.0.0.1#5335
ipset=/.rcinet.ca/gfwlist ipset=/.rcinet.ca/gfwlist
server=/.rconversation.blogs.com/127.0.0.1#5335 server=/.rconversation.blogs.com/127.0.0.1#5335
ipset=/.rconversation.blogs.com/gfwlist 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 server=/.read01.com/127.0.0.1#5335
ipset=/.read01.com/gfwlist ipset=/.read01.com/gfwlist
server=/.read100.com/127.0.0.1#5335 server=/.read100.com/127.0.0.1#5335
@ -7126,8 +6984,6 @@ server=/.realcourage.org/127.0.0.1#5335
ipset=/.realcourage.org/gfwlist ipset=/.realcourage.org/gfwlist
server=/.realforum.zkiz.com/127.0.0.1#5335 server=/.realforum.zkiz.com/127.0.0.1#5335
ipset=/.realforum.zkiz.com/gfwlist 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 server=/.realraptalk.com/127.0.0.1#5335
ipset=/.realraptalk.com/gfwlist ipset=/.realraptalk.com/gfwlist
server=/.realsexpass.com/127.0.0.1#5335 server=/.realsexpass.com/127.0.0.1#5335
@ -7298,8 +7154,6 @@ server=/.s-cute.com/127.0.0.1#5335
ipset=/.s-cute.com/gfwlist ipset=/.s-cute.com/gfwlist
server=/.s-dragon.org/127.0.0.1#5335 server=/.s-dragon.org/127.0.0.1#5335
ipset=/.s-dragon.org/gfwlist 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 server=/.s1heng.com/127.0.0.1#5335
ipset=/.s1heng.com/gfwlist ipset=/.s1heng.com/gfwlist
server=/.s1s1s1.com/127.0.0.1#5335 server=/.s1s1s1.com/127.0.0.1#5335
@ -7472,8 +7326,6 @@ server=/.sexinsex.net/127.0.0.1#5335
ipset=/.sexinsex.net/gfwlist ipset=/.sexinsex.net/gfwlist
server=/.sextvx.com/127.0.0.1#5335 server=/.sextvx.com/127.0.0.1#5335
ipset=/.sextvx.com/gfwlist ipset=/.sextvx.com/gfwlist
server=/.sexxxy.biz/127.0.0.1#5335
ipset=/.sexxxy.biz/gfwlist
server=/.sfileydy.com/127.0.0.1#5335 server=/.sfileydy.com/127.0.0.1#5335
ipset=/.sfileydy.com/gfwlist ipset=/.sfileydy.com/gfwlist
server=/.sfshibao.com/127.0.0.1#5335 server=/.sfshibao.com/127.0.0.1#5335
@ -7514,8 +7366,6 @@ server=/.shapeservices.com/127.0.0.1#5335
ipset=/.shapeservices.com/gfwlist ipset=/.shapeservices.com/gfwlist
server=/.share.america.gov/127.0.0.1#5335 server=/.share.america.gov/127.0.0.1#5335
ipset=/.share.america.gov/gfwlist 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 server=/.share.youthwant.com.tw/127.0.0.1#5335
ipset=/.share.youthwant.com.tw/gfwlist ipset=/.share.youthwant.com.tw/gfwlist
server=/.sharebee.com/127.0.0.1#5335 server=/.sharebee.com/127.0.0.1#5335
@ -7552,6 +7402,8 @@ server=/.shicheng.org/127.0.0.1#5335
ipset=/.shicheng.org/gfwlist ipset=/.shicheng.org/gfwlist
server=/.shiksha.com/127.0.0.1#5335 server=/.shiksha.com/127.0.0.1#5335
ipset=/.shiksha.com/gfwlist ipset=/.shiksha.com/gfwlist
server=/.shiksha.ws/127.0.0.1#5335
ipset=/.shiksha.ws/gfwlist
server=/.shinychan.com/127.0.0.1#5335 server=/.shinychan.com/127.0.0.1#5335
ipset=/.shinychan.com/gfwlist ipset=/.shinychan.com/gfwlist
server=/.shipcamouflage.com/127.0.0.1#5335 server=/.shipcamouflage.com/127.0.0.1#5335
@ -7670,8 +7522,6 @@ server=/.skyvegas.com/127.0.0.1#5335
ipset=/.skyvegas.com/gfwlist ipset=/.skyvegas.com/gfwlist
server=/.skyxvpn.com/127.0.0.1#5335 server=/.skyxvpn.com/127.0.0.1#5335
ipset=/.skyxvpn.com/gfwlist ipset=/.skyxvpn.com/gfwlist
server=/.slacker.com/127.0.0.1#5335
ipset=/.slacker.com/gfwlist
server=/.slaytizle.com/127.0.0.1#5335 server=/.slaytizle.com/127.0.0.1#5335
ipset=/.slaytizle.com/gfwlist ipset=/.slaytizle.com/gfwlist
server=/.sleazydream.com/127.0.0.1#5335 server=/.sleazydream.com/127.0.0.1#5335
@ -7812,8 +7662,6 @@ server=/.southnews.com.tw/127.0.0.1#5335
ipset=/.southnews.com.tw/gfwlist ipset=/.southnews.com.tw/gfwlist
server=/.sowers.org.hk/127.0.0.1#5335 server=/.sowers.org.hk/127.0.0.1#5335
ipset=/.sowers.org.hk/gfwlist 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 server=/.spaces.hightail.com/127.0.0.1#5335
ipset=/.spaces.hightail.com/gfwlist ipset=/.spaces.hightail.com/gfwlist
server=/.spankbang.com/127.0.0.1#5335 server=/.spankbang.com/127.0.0.1#5335
@ -7848,12 +7696,8 @@ server=/.spotflux.com/127.0.0.1#5335
ipset=/.spotflux.com/gfwlist ipset=/.spotflux.com/gfwlist
server=/.spotify.com/127.0.0.1#5335 server=/.spotify.com/127.0.0.1#5335
ipset=/.spotify.com/gfwlist ipset=/.spotify.com/gfwlist
server=/.spreadshirt.es/127.0.0.1#5335
ipset=/.spreadshirt.es/gfwlist
server=/.spring4u.info/127.0.0.1#5335 server=/.spring4u.info/127.0.0.1#5335
ipset=/.spring4u.info/gfwlist ipset=/.spring4u.info/gfwlist
server=/.springboardplatform.com/127.0.0.1#5335
ipset=/.springboardplatform.com/gfwlist
server=/.sproutcore.com/127.0.0.1#5335 server=/.sproutcore.com/127.0.0.1#5335
ipset=/.sproutcore.com/gfwlist ipset=/.sproutcore.com/gfwlist
server=/.sproxy.info/127.0.0.1#5335 server=/.sproxy.info/127.0.0.1#5335
@ -7876,8 +7720,6 @@ server=/.ssglobal.me/127.0.0.1#5335
ipset=/.ssglobal.me/gfwlist ipset=/.ssglobal.me/gfwlist
server=/.ssh91.com/127.0.0.1#5335 server=/.ssh91.com/127.0.0.1#5335
ipset=/.ssh91.com/gfwlist 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 server=/.ssl443.org/127.0.0.1#5335
ipset=/.ssl443.org/gfwlist ipset=/.ssl443.org/gfwlist
server=/.sspanel.net/127.0.0.1#5335 server=/.sspanel.net/127.0.0.1#5335
@ -7910,8 +7752,6 @@ server=/.stat.gov.tw/127.0.0.1#5335
ipset=/.stat.gov.tw/gfwlist ipset=/.stat.gov.tw/gfwlist
server=/.static-economist.com/127.0.0.1#5335 server=/.static-economist.com/127.0.0.1#5335
ipset=/.static-economist.com/gfwlist 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 server=/.static.shemalez.com/127.0.0.1#5335
ipset=/.static.shemalez.com/gfwlist ipset=/.static.shemalez.com/gfwlist
server=/.static01.nyt.com/127.0.0.1#5335 server=/.static01.nyt.com/127.0.0.1#5335
@ -8020,8 +7860,6 @@ server=/.supchina.com/127.0.0.1#5335
ipset=/.supchina.com/gfwlist ipset=/.supchina.com/gfwlist
server=/.superfreevpn.com/127.0.0.1#5335 server=/.superfreevpn.com/127.0.0.1#5335
ipset=/.superfreevpn.com/gfwlist ipset=/.superfreevpn.com/gfwlist
server=/.superokayama.com/127.0.0.1#5335
ipset=/.superokayama.com/gfwlist
server=/.superpages.com/127.0.0.1#5335 server=/.superpages.com/127.0.0.1#5335
ipset=/.superpages.com/gfwlist ipset=/.superpages.com/gfwlist
server=/.supervpn.net/127.0.0.1#5335 server=/.supervpn.net/127.0.0.1#5335
@ -8044,8 +7882,6 @@ server=/.suyangg.com/127.0.0.1#5335
ipset=/.suyangg.com/gfwlist ipset=/.suyangg.com/gfwlist
server=/.svsfx.com/127.0.0.1#5335 server=/.svsfx.com/127.0.0.1#5335
ipset=/.svsfx.com/gfwlist ipset=/.svsfx.com/gfwlist
server=/.swagbucks.com/127.0.0.1#5335
ipset=/.swagbucks.com/gfwlist
server=/.swissinfo.ch/127.0.0.1#5335 server=/.swissinfo.ch/127.0.0.1#5335
ipset=/.swissinfo.ch/gfwlist ipset=/.swissinfo.ch/gfwlist
server=/.swissvpn.net/127.0.0.1#5335 server=/.swissvpn.net/127.0.0.1#5335
@ -8164,8 +8000,6 @@ server=/.taoism.net/127.0.0.1#5335
ipset=/.taoism.net/gfwlist ipset=/.taoism.net/gfwlist
server=/.taolun.info/127.0.0.1#5335 server=/.taolun.info/127.0.0.1#5335
ipset=/.taolun.info/gfwlist ipset=/.taolun.info/gfwlist
server=/.tapanwap.com/127.0.0.1#5335
ipset=/.tapanwap.com/gfwlist
server=/.tapatalk.com/127.0.0.1#5335 server=/.tapatalk.com/127.0.0.1#5335
ipset=/.tapatalk.com/gfwlist ipset=/.tapatalk.com/gfwlist
server=/.tascn.com.au/127.0.0.1#5335 server=/.tascn.com.au/127.0.0.1#5335
@ -9408,8 +9242,6 @@ server=/.vocn.tv/127.0.0.1#5335
ipset=/.vocn.tv/gfwlist ipset=/.vocn.tv/gfwlist
server=/.vod-abematv.akamaized.net/127.0.0.1#5335 server=/.vod-abematv.akamaized.net/127.0.0.1#5335
ipset=/.vod-abematv.akamaized.net/gfwlist 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 server=/.vot.org/127.0.0.1#5335
ipset=/.vot.org/gfwlist ipset=/.vot.org/gfwlist
server=/.vovo2000.com/127.0.0.1#5335 server=/.vovo2000.com/127.0.0.1#5335
@ -9690,8 +9522,6 @@ server=/.wheelockslatin.com/127.0.0.1#5335
ipset=/.wheelockslatin.com/gfwlist ipset=/.wheelockslatin.com/gfwlist
server=/.whereiswerner.com/127.0.0.1#5335 server=/.whereiswerner.com/127.0.0.1#5335
ipset=/.whereiswerner.com/gfwlist ipset=/.whereiswerner.com/gfwlist
server=/.wheretowatch.com/127.0.0.1#5335
ipset=/.wheretowatch.com/gfwlist
server=/.whichav.com/127.0.0.1#5335 server=/.whichav.com/127.0.0.1#5335
ipset=/.whichav.com/gfwlist ipset=/.whichav.com/gfwlist
server=/.whippedass.com/127.0.0.1#5335 server=/.whippedass.com/127.0.0.1#5335
@ -9744,6 +9574,8 @@ server=/.wikimapia.org/127.0.0.1#5335
ipset=/.wikimapia.org/gfwlist ipset=/.wikimapia.org/gfwlist
server=/.wikipedia.org/127.0.0.1#5335 server=/.wikipedia.org/127.0.0.1#5335
ipset=/.wikipedia.org/gfwlist ipset=/.wikipedia.org/gfwlist
server=/.wikiwand.com/127.0.0.1#5335
ipset=/.wikiwand.com/gfwlist
server=/.wikiwiki.jp/127.0.0.1#5335 server=/.wikiwiki.jp/127.0.0.1#5335
ipset=/.wikiwiki.jp/gfwlist ipset=/.wikiwiki.jp/gfwlist
server=/.wildammo.com/127.0.0.1#5335 server=/.wildammo.com/127.0.0.1#5335
@ -9756,8 +9588,6 @@ server=/.windowsphoneme.com/127.0.0.1#5335
ipset=/.windowsphoneme.com/gfwlist ipset=/.windowsphoneme.com/gfwlist
server=/.windscribe.com/127.0.0.1#5335 server=/.windscribe.com/127.0.0.1#5335
ipset=/.windscribe.com/gfwlist ipset=/.windscribe.com/gfwlist
server=/.wingamestore.com/127.0.0.1#5335
ipset=/.wingamestore.com/gfwlist
server=/.wingy.site/127.0.0.1#5335 server=/.wingy.site/127.0.0.1#5335
ipset=/.wingy.site/gfwlist ipset=/.wingy.site/gfwlist
server=/.winning11.com/127.0.0.1#5335 server=/.winning11.com/127.0.0.1#5335
@ -9802,8 +9632,6 @@ server=/.wo3ttt.wordpress.com/127.0.0.1#5335
ipset=/.wo3ttt.wordpress.com/gfwlist ipset=/.wo3ttt.wordpress.com/gfwlist
server=/.woeser.com/127.0.0.1#5335 server=/.woeser.com/127.0.0.1#5335
ipset=/.woeser.com/gfwlist ipset=/.woeser.com/gfwlist
server=/.wokar.org/127.0.0.1#5335
ipset=/.wokar.org/gfwlist
server=/.wolfax.com/127.0.0.1#5335 server=/.wolfax.com/127.0.0.1#5335
ipset=/.wolfax.com/gfwlist ipset=/.wolfax.com/gfwlist
server=/.woolyss.com/127.0.0.1#5335 server=/.woolyss.com/127.0.0.1#5335
@ -9812,8 +9640,6 @@ server=/.woopie.jp/127.0.0.1#5335
ipset=/.woopie.jp/gfwlist ipset=/.woopie.jp/gfwlist
server=/.woopie.tv/127.0.0.1#5335 server=/.woopie.tv/127.0.0.1#5335
ipset=/.woopie.tv/gfwlist ipset=/.woopie.tv/gfwlist
server=/.wordpress.com/127.0.0.1#5335
ipset=/.wordpress.com/gfwlist
server=/.workatruna.com/127.0.0.1#5335 server=/.workatruna.com/127.0.0.1#5335
ipset=/.workatruna.com/gfwlist ipset=/.workatruna.com/gfwlist
server=/.workerdemo.org.hk/127.0.0.1#5335 server=/.workerdemo.org.hk/127.0.0.1#5335
@ -9846,8 +9672,6 @@ server=/.woyaolian.org/127.0.0.1#5335
ipset=/.woyaolian.org/gfwlist ipset=/.woyaolian.org/gfwlist
server=/.wozy.in/127.0.0.1#5335 server=/.wozy.in/127.0.0.1#5335
ipset=/.wozy.in/gfwlist ipset=/.wozy.in/gfwlist
server=/.wp.com/127.0.0.1#5335
ipset=/.wp.com/gfwlist
server=/.wpoforum.com/127.0.0.1#5335 server=/.wpoforum.com/127.0.0.1#5335
ipset=/.wpoforum.com/gfwlist ipset=/.wpoforum.com/gfwlist
server=/.wqyd.org/127.0.0.1#5335 server=/.wqyd.org/127.0.0.1#5335
@ -9890,8 +9714,6 @@ server=/.wuyanblog.com/127.0.0.1#5335
ipset=/.wuyanblog.com/gfwlist ipset=/.wuyanblog.com/gfwlist
server=/.wwitv.com/127.0.0.1#5335 server=/.wwitv.com/127.0.0.1#5335
ipset=/.wwitv.com/gfwlist 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 server=/.www.ajsands.com/127.0.0.1#5335
ipset=/.www.ajsands.com/gfwlist ipset=/.www.ajsands.com/gfwlist
server=/.www.americorps.gov/127.0.0.1#5335 server=/.www.americorps.gov/127.0.0.1#5335
@ -9948,8 +9770,6 @@ server=/.www.websnapr.com/127.0.0.1#5335
ipset=/.www.websnapr.com/gfwlist ipset=/.www.websnapr.com/gfwlist
server=/.www1.biz/127.0.0.1#5335 server=/.www1.biz/127.0.0.1#5335
ipset=/.www1.biz/gfwlist 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 server=/.x-art.com/127.0.0.1#5335
ipset=/.x-art.com/gfwlist ipset=/.x-art.com/gfwlist
server=/.x-berry.com/127.0.0.1#5335 server=/.x-berry.com/127.0.0.1#5335
@ -10052,6 +9872,8 @@ server=/.xmovies.com/127.0.0.1#5335
ipset=/.xmovies.com/gfwlist ipset=/.xmovies.com/gfwlist
server=/.xn--4gq171p.com/127.0.0.1#5335 server=/.xn--4gq171p.com/127.0.0.1#5335
ipset=/.xn--4gq171p.com/gfwlist 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 server=/.xn--czq75pvv1aj5c.org/127.0.0.1#5335
ipset=/.xn--czq75pvv1aj5c.org/gfwlist ipset=/.xn--czq75pvv1aj5c.org/gfwlist
server=/.xn--i2ru8q2qg.com/127.0.0.1#5335 server=/.xn--i2ru8q2qg.com/127.0.0.1#5335
@ -10244,8 +10066,6 @@ server=/.youtubegaming.com/127.0.0.1#5335
ipset=/.youtubegaming.com/gfwlist ipset=/.youtubegaming.com/gfwlist
server=/.youversion.com/127.0.0.1#5335 server=/.youversion.com/127.0.0.1#5335
ipset=/.youversion.com/gfwlist ipset=/.youversion.com/gfwlist
server=/.youwin.com/127.0.0.1#5335
ipset=/.youwin.com/gfwlist
server=/.youxu.info/127.0.0.1#5335 server=/.youxu.info/127.0.0.1#5335
ipset=/.youxu.info/gfwlist ipset=/.youxu.info/gfwlist
server=/.yt.be/127.0.0.1#5335 server=/.yt.be/127.0.0.1#5335
@ -10254,8 +10074,6 @@ server=/.ytht.net/127.0.0.1#5335
ipset=/.ytht.net/gfwlist ipset=/.ytht.net/gfwlist
server=/.ytimg.com/127.0.0.1#5335 server=/.ytimg.com/127.0.0.1#5335
ipset=/.ytimg.com/gfwlist 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 server=/.yuanming.net/127.0.0.1#5335
ipset=/.yuanming.net/gfwlist ipset=/.yuanming.net/gfwlist
server=/.yuanzhengtang.org/127.0.0.1#5335 server=/.yuanzhengtang.org/127.0.0.1#5335
@ -10398,10 +10216,10 @@ server=/.zoozle.net/127.0.0.1#5335
ipset=/.zoozle.net/gfwlist ipset=/.zoozle.net/gfwlist
server=/.zorrovpn.com/127.0.0.1#5335 server=/.zorrovpn.com/127.0.0.1#5335
ipset=/.zorrovpn.com/gfwlist ipset=/.zorrovpn.com/gfwlist
server=/.zozotown.com/127.0.0.1#5335
ipset=/.zozotown.com/gfwlist
server=/.zpn.im/127.0.0.1#5335 server=/.zpn.im/127.0.0.1#5335
ipset=/.zpn.im/gfwlist ipset=/.zpn.im/gfwlist
server=/.zsdxzk.com/127.0.0.1#5335
ipset=/.zsdxzk.com/gfwlist
server=/.zspeeder.me/127.0.0.1#5335 server=/.zspeeder.me/127.0.0.1#5335
ipset=/.zspeeder.me/gfwlist ipset=/.zspeeder.me/gfwlist
server=/.zsrhao.com/127.0.0.1#5335 server=/.zsrhao.com/127.0.0.1#5335

File diff suppressed because it is too large Load Diff

View File

@ -1030,7 +1030,8 @@
45.65.28.0/22 45.65.28.0/22
45.112.132.0/22 45.112.132.0/22
45.112.188.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.216.0/22
45.112.220.0/22 45.112.220.0/22
45.112.228.0/22 45.112.228.0/22
@ -1471,6 +1472,9 @@
45.253.232.0/22 45.253.232.0/22
45.253.236.0/22 45.253.236.0/22
45.253.240.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.0.0/22
45.254.4.0/22 45.254.4.0/22
45.254.8.0/22 45.254.8.0/22
@ -1782,6 +1786,7 @@
61.29.128.0/18 61.29.128.0/18
61.29.192.0/19 61.29.192.0/19
61.29.224.0/20 61.29.224.0/20
61.29.240.0/20
61.45.128.0/18 61.45.128.0/18
61.45.224.0/20 61.45.224.0/20
61.47.128.0/18 61.47.128.0/18
@ -4004,6 +4009,11 @@
103.149.210.0/23 103.149.210.0/23
103.149.214.0/23 103.149.214.0/23
103.149.220.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.192.0.0/22 103.192.0.0/22
103.192.4.0/22 103.192.4.0/22
103.192.8.0/22 103.192.8.0/22
@ -5062,8 +5072,7 @@
106.4.0.0/14 106.4.0.0/14
106.8.0.0/15 106.8.0.0/15
106.11.0.0/16 106.11.0.0/16
106.12.0.0/15 106.12.0.0/14
106.14.0.0/15
106.16.0.0/12 106.16.0.0/12
106.32.0.0/12 106.32.0.0/12
106.48.0.0/15 106.48.0.0/15
@ -5401,10 +5410,7 @@
117.32.0.0/13 117.32.0.0/13
117.40.0.0/14 117.40.0.0/14
117.44.0.0/15 117.44.0.0/15
117.48.0.0/17 117.48.0.0/14
117.48.128.0/17
117.49.0.0/16
117.50.0.0/15
117.53.48.0/20 117.53.48.0/20
117.53.176.0/20 117.53.176.0/20
117.57.0.0/16 117.57.0.0/16
@ -5832,8 +5838,7 @@
124.64.0.0/15 124.64.0.0/15
124.66.0.0/17 124.66.0.0/17
124.67.0.0/16 124.67.0.0/16
124.68.0.0/15 124.68.0.0/14
124.70.0.0/15
124.72.0.0/16 124.72.0.0/16
124.73.0.0/16 124.73.0.0/16
124.74.0.0/15 124.74.0.0/15

View File

@ -13,11 +13,11 @@ uci -q batch <<-EOF >/dev/null
commit firewall commit firewall
EOF EOF
touch /etc/china_ssr.txt touch /etc/ssr/china_ssr.txt
touch /etc/config/white.list touch /etc/ssr/white.list
touch /etc/config/black.list touch /etc/ssr/black.list
touch /etc/config/netflix.list touch /etc/ssr/netflix.list
touch /etc/config/netflixip.list touch /etc/ssr/netflixip.list
touch /etc/dnsmasq.ssr/ad.conf touch /etc/dnsmasq.ssr/ad.conf
touch /etc/dnsmasq.ssr/gfw_list.conf touch /etc/dnsmasq.ssr/gfw_list.conf

View File

@ -1,9 +1,9 @@
#!/bin/sh -e #!/bin/sh -e
if [ -f /tmp/adnew.conf ]; then if [ -f /tmp/adnew.conf ]; then
if (grep -wq "address=" /tmp/adnew.conf) ; then if (grep -wq "address=" /tmp/adnew.conf); then
cp /tmp/adnew.conf /tmp/ad.conf cp /tmp/adnew.conf /tmp/ssr-update.$1
else else
cat /tmp/adnew.conf | grep ^\|\|[^\*]*\^$ | sed -e 's:||:address\=\/:' -e 's:\^:/0\.0\.0\.0:' > /tmp/ad.conf cat /tmp/adnew.conf | grep ^\|\|[^\*]*\^$ | sed -e 's:||:address\=\/:' -e 's:\^:/0\.0\.0\.0:' >/tmp/ssr-update.$1
fi fi
fi fi
rm -f /tmp/adnew.conf rm -f /tmp/adnew.conf

View File

@ -1,5 +1,4 @@
#!/bin/sh -e #!/bin/sh -e
generate_china_banned() { generate_china_banned() {
cat $1 | base64 -d >/tmp/gfwlist.txt cat $1 | base64 -d >/tmp/gfwlist.txt
rm -f $1 rm -f $1
@ -19,7 +18,7 @@ generate_china_banned() {
}' | sort -u }' | sort -u
} }
generate_china_banned /tmp/gfw.b64 >/tmp/gfw.txt generate_china_banned /tmp/ssr-update.$1 >/tmp/gfw.txt
rm -f /tmp/gfwlist.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 rm -f /tmp/gfw.txt

View File

@ -6,6 +6,9 @@
# This is free software, licensed under the GNU General Public License v3. # This is free software, licensed under the GNU General Public License v3.
# See /LICENSE for more information. # See /LICENSE for more information.
# #
LOCK_FILE="/var/lock/ssr-monitor.lock"
[ -f "$LOCK_FILE" ] && exit 2
touch "$LOCK_FILE"
NAME=shadowsocksr NAME=shadowsocksr
@ -19,6 +22,23 @@ uci_get_by_type() {
echo ${ret:=$3} 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:="127.0.0.1"}
}
server_process_count=$1 server_process_count=$1
redir_tcp_process=$2 redir_tcp_process=$2
redir_udp_process=$3 redir_udp_process=$3
@ -29,25 +49,18 @@ pdnsd_process=$7
if [ -z "$pdnsd_process" ]; then if [ -z "$pdnsd_process" ]; then
pdnsd_process=0 pdnsd_process=0
fi fi
i=0 i=0
GLOBAL_SERVER=$(uci_get_by_type global global_server) 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" == "127.0.0.1" ] && hostip=$(uci_get_by_name $GLOBAL_SERVER ip)
lkcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port) lkcp_port=$(uci_get_by_name $GLOBAL_SERVER kcp_port)
server_port=$(uci_get_by_name $GLOBAL_SERVER server_port) server_port=$(uci_get_by_name $GLOBAL_SERVER server_port)
password=$(uci_get_by_name $GLOBAL_SERVER kcp_password) password=$(uci_get_by_name $GLOBAL_SERVER kcp_password)
kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param) kcp_param=$(uci_get_by_name $GLOBAL_SERVER kcp_param)
[ "$password" != "" ] && password="--key "${password} [ "$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 #死循环 while [ "1" == "1" ]; do #死循环
sleep 30 sleep 30s
#redir tcp #redir tcp
if [ "$redir_tcp_process" -gt 0 ]; then if [ "$redir_tcp_process" -gt 0 ]; then
icount=$(busybox ps -w | grep ssr-retcp | grep -v grep | wc -l) icount=$(busybox ps -w | grep ssr-retcp | grep -v grep | wc -l)
@ -82,6 +95,7 @@ while [ "1" == "1" ]; do #死循环
logger -t "$NAME" "ssr server error.restart!" logger -t "$NAME" "ssr server error.restart!"
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-server | grep -v grep | awk '{print $1}') >/dev/null 2>&1
/etc/init.d/shadowsocksr restart /etc/init.d/shadowsocksr restart
exit 0
fi fi
fi fi
#kcptun #kcptun
@ -100,6 +114,7 @@ while [ "1" == "1" ]; do #死循环
logger -t "$NAME" "global socks server error.restart!" logger -t "$NAME" "global socks server error.restart!"
kill -9 $(busybox ps -w | grep ssr-local | 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
/etc/init.d/shadowsocksr restart /etc/init.d/shadowsocksr restart
exit 0
fi fi
fi fi
#pdnsd #pdnsd
@ -119,14 +134,14 @@ while [ "1" == "1" ]; do #死循环
if [ "$pdnsd_process" -eq 2 ]; then if [ "$pdnsd_process" -eq 2 ]; then
icount=$(busybox ps -w | grep -e ssr-dns -e dns2socks | grep -v grep | wc -l) icount=$(busybox ps -w | grep -e ssr-dns -e dns2socks | grep -v grep | wc -l)
if [ "$icount" -lt 2 ]; then #如果进程挂掉就重启它 if [ "$icount" -lt 2 ]; then #如果进程挂掉就重启它
logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!" logger -t "$NAME" "dns2socks $dnsstr tunnel error.restart!"
dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53) dnsstr=$(uci_get_by_type global tunnel_forward 8.8.4.4:53)
dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}') dnsserver=$(echo "$dnsstr" | awk -F ':' '{print $1}')
dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}') dnsport=$(echo "$dnsstr" | awk -F ':' '{print $2}')
killall -q -9 dns2socks killall -q -9 dns2socks
kill -9 $(busybox ps -w | grep ssr-dns | grep -v grep | awk '{print $1}') >/dev/null 2>&1 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 & 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
fi fi
done done

View File

@ -33,6 +33,7 @@ Valid options are:
-F netflix mode -F netflix mode
-N netflix server IP -N netflix server IP
-M netflix proxy mode -M netflix proxy mode
-I <ip_list_file> a file content is bypassed netflix ip list
-e <extra_options> extra options for iptables -e <extra_options> extra options for iptables
-o apply the rules to the OUTPUT chain -o apply the rules to the OUTPUT chain
-O apply the global rules to the OUTPUT chain -O apply the global rules to the OUTPUT chain
@ -82,7 +83,8 @@ flush_r() {
ipset_r() { ipset_r() {
ipset -N gmlan hash:net 2>/dev/null ipset -N gmlan hash:net 2>/dev/null
for ip in $LAN_GM_IP; do ipset -! add gmlan $ip; done 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 ipset -! -R <<-EOF || return 1
create ss_spec_wan_ac hash:net create ss_spec_wan_ac hash:net
$(gen_iplist | sed -e "s/^/add ss_spec_wan_ac /") $(gen_iplist | sed -e "s/^/add ss_spec_wan_ac /")
@ -92,25 +94,29 @@ ipset_r() {
$IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN $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 -m set --match-set ss_spec_wan_ac dst -j RETURN
$IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW $IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW
elif [ "$RUNMODE" == "gfw" ]; then ;;
gfw)
ipset -N gfwlist hash:net 2>/dev/null ipset -N gfwlist hash:net 2>/dev/null
$IPT -N SS_SPEC_WAN_AC $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 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 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 -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 $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 ipset -N oversea hash:net 2>/dev/null
$IPT -N SS_SPEC_WAN_AC $IPT -N SS_SPEC_WAN_AC
ipset -N gmlan hash:net 2>/dev/null ipset -N gmlan hash:net 2>/dev/null
for ip in $LAN_GM_IP; do ipset -! add gmlan $ip; done 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 -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 $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 -N SS_SPEC_WAN_AC
$IPT -A SS_SPEC_WAN_AC -j SS_SPEC_WAN_FW $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 $IPT -I SS_SPEC_WAN_AC -p tcp ! --dport 53 -d $server -j RETURN
fi ;;
esac
ipset -N fplan hash:net 2>/dev/null ipset -N fplan hash:net 2>/dev/null
for ip in $LAN_FP_IP; do ipset -! add fplan $ip; done 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 $IPT -I SS_SPEC_WAN_AC -m set --match-set fplan src -j SS_SPEC_WAN_FW
@ -123,23 +129,25 @@ ipset_r() {
$IPT -I SS_SPEC_WAN_AC -m set --match-set whitelist dst -j RETURN $IPT -I SS_SPEC_WAN_AC -m set --match-set whitelist dst -j RETURN
for ip in $WAN_BP_IP; do ipset -! add whitelist $ip; done for ip in $WAN_BP_IP; do ipset -! add whitelist $ip; done
for ip in $WAN_FW_IP; do ipset -! add blacklist $ip; done for ip in $WAN_FW_IP; do ipset -! add blacklist $ip; done
if [ "$NETFLIX" != "0" ]; then
if [ "$NETFLIX" == "1" ]; 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 $IPT -I SS_SPEC_WAN_AC -p tcp -m set --match-set netflix dst -j REDIRECT --to-ports 4321
if [ "$NETFLIX_PROXY" == "1" ]; then if [ "$NETFLIX_PROXY" == "1" ]; then
$IPT -I SS_SPEC_WAN_AC -p tcp -d $NETFLIX_IP -j REDIRECT --to-ports $local_port $IPT -I SS_SPEC_WAN_AC -p tcp -d $NETFLIX_IP -j REDIRECT --to-ports $local_port
else else
ipset -! add whitelist $NETFLIX_IP ipset -! add whitelist $NETFLIX_IP
fi 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 2) $IPT -I SS_SPEC_WAN_AC -p tcp -m set --match-set netflix dst -j REDIRECT --to-ports $local_port ;;
fi esac
return $? return $?
} }
fw_rule() { fw_rule() {
ipset -N netflix hash:net 2>/dev/null
$IPT -N SS_SPEC_WAN_FW $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 0.0.0.0/8 -j RETURN
$IPT -A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN $IPT -A SS_SPEC_WAN_FW -d 10.0.0.0/8 -j RETURN
@ -216,23 +224,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 -m set --match-set bplan src -j RETURN
$ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -m set --match-set fplan src \ $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 -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 \ $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 -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 \ $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 -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 china dst -j RETURN
$ipt -A SS_SPEC_TPROXY -p udp -m set --match-set gmlan src -m set ! --match-set china dst \ $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 -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 \ $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 -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 \ $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 -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 all) $ipt -A SS_SPEC_TPROXY -p udp $PROXY_PORTS -j TPROXY --on-port "$LOCAL_PORT" --tproxy-mark 0x01/0x01 ;;
fi esac
$ipt -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p udp $EXT_ARGS $MATCH_SET \ $ipt -I PREROUTING 1 ${IFNAME:+-i $IFNAME} -p udp $EXT_ARGS $MATCH_SET \
-m comment --comment "$TAG" -j SS_SPEC_TPROXY -m comment --comment "$TAG" -j SS_SPEC_TPROXY
return $? return $?
@ -309,7 +320,7 @@ gen_include() {
return 0 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 case "$arg" in
s) s)
server=$OPTARG server=$OPTARG
@ -359,6 +370,9 @@ while getopts ":s:l:S:L:i:e:a:B:b:w:p:G:D:F:N:M:oOuUfgrczh" arg; do
M) M)
NETFLIX_PROXY=$OPTARG NETFLIX_PROXY=$OPTARG
;; ;;
I)
NETFLIX_LIST=$OPTARG
;;
o) o)
OUTPUT=1 OUTPUT=1
;; ;;
@ -403,4 +417,3 @@ fi
flush_r && fw_rule && ipset_r && ac_rule && tp_rule && gen_include flush_r && fw_rule && ipset_r && ac_rule && tp_rule && gen_include
[ "$?" == 0 ] || loger 3 "Start failed!" [ "$?" == 0 ] || loger 3 "Start failed!"
exit $? exit $?

View File

@ -1,4 +1,4 @@
#!/bin/sh /etc/rc.common #!/bin/sh /etc/rc.common
# #
# Copyright (C) 2017 openwrt-ssr # Copyright (C) 2017 openwrt-ssr
# Copyright (C) 2017 yushi studio <ywb94@qq.com> # Copyright (C) 2017 yushi studio <ywb94@qq.com>
@ -6,6 +6,9 @@
# This is free software, licensed under the GNU General Public License v3. # This is free software, licensed under the GNU General Public License v3.
# See /LICENSE for more information. # See /LICENSE for more information.
# #
LOCK_FILE="/var/lock/ssr-switch.lock"
[ -f "$LOCK_FILE" ] && exit 2
touch "$LOCK_FILE"
cycle_time=60 cycle_time=60
switch_time=3 switch_time=3
@ -162,7 +165,7 @@ start() {
fi fi
else else
normal_flag=0 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 fi
done done
} }

View File

@ -1,5 +1,9 @@
#!/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 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 awk '!/^$/&&!/^#/{printf("add china %s'" "'\n",$0)}' /etc/china_ssr.txt >> /tmp/china.ipset
ipset -! flush china ipset -! flush china
ipset -! restore < /tmp/china.ipset 2>/dev/null ipset -! restore < /tmp/china.ipset 2>/dev/null
rm -f /tmp/china.ipset rm -f /tmp/china.ipset $LOCK_FILE

View File

@ -1,72 +1,71 @@
#!/bin/sh #!/bin/sh
cat <<-EOF >$1 cat <<-EOF >$1
base { base {
log_debug = off; log_debug = off;
log_info = off; log_info = off;
log = stderr; log = stderr;
daemon = on; daemon = on;
redirector = iptables; redirector = iptables;
reuseport = on; reuseport = on;
} }
EOF EOF
if [ "$2" == "socks5" ]; then if [ "$2" == "socks5" ]; then
if [ "$3" == "tcp" ]; then if [ "$3" == "tcp" ]; then
if [ "$7" == "0" ]; then if [ "$7" == "0" ]; then
cat <<-EOF >>$1 cat <<-EOF >>$1
redsocks { redsocks {
bind = "0.0.0.0:$4"; bind = "0.0.0.0:$4";
relay = "$5:$6"; relay = "$5:$6";
type = socks5; type = socks5;
autoproxy = 0; autoproxy = 0;
timeout = 10; timeout = 10;
} }
EOF EOF
else else
cat <<-EOF >>$1 cat <<-EOF >>$1
redsocks { redsocks {
bind = "0.0.0.0:$4"; bind = "0.0.0.0:$4";
relay = "$5:$6"; relay = "$5:$6";
type = socks5; type = socks5;
autoproxy = 0; autoproxy = 0;
timeout = 10; timeout = 10;
login = "$8"; login = "$8";
password = "$9"; password = "$9";
} }
EOF EOF
fi fi
else else
if [ "$7" == "0" ]; then if [ "$7" == "0" ]; then
cat <<-EOF >>$1 cat <<-EOF >>$1
redudp { redudp {
bind = "0.0.0.0:$4"; bind = "0.0.0.0:$4";
relay = "$5:$6"; relay = "$5:$6";
type = socks5; type = socks5;
udp_timeout = 10; udp_timeout = 10;
} }
EOF EOF
else else
cat <<-EOF >>$1 cat <<-EOF >>$1
redudp { redudp {
bind = "0.0.0.0:$4"; bind = "0.0.0.0:$4";
relay = "$5:$6"; relay = "$5:$6";
type = socks5; type = socks5;
udp_timeout = 10; udp_timeout = 10;
login = "$8"; login = "$8";
password = "$9"; password = "$9";
} }
EOF EOF
fi fi
fi fi
else else
cat <<-EOF >>$1 cat <<-EOF >>$1
redsocks { redsocks {
bind = "0.0.0.0:$4"; bind = "0.0.0.0:$4";
type = direct; type = direct;
interface = $3; interface = $3;
autoproxy = 0; autoproxy = 0;
timeout = 10; timeout = 10;
} }
EOF EOF
fi fi

View File

@ -1,9 +1,8 @@
local ucursor = require "luci.model.uci".cursor() local ucursor = require "uci".cursor()
local json = require "luci.jsonc" local json = require "luci.jsonc"
local server_section = arg[1] local server_section = arg[1]
local proto = arg[2] local proto = arg[2]
local local_port = arg[3] local local_port = arg[3]
local server = ucursor:get_all("shadowsocksr", server_section) local server = ucursor:get_all("shadowsocksr", server_section)
local trojan = { local trojan = {

View File

@ -1,10 +1,9 @@
local ucursor = require "luci.model.uci".cursor() local ucursor = require "uci".cursor()
local json = require "luci.jsonc" local json = require "luci.jsonc"
local server_section = arg[1] local server_section = arg[1]
local proto = arg[2] local proto = arg[2]
local local_port = arg[3] or "0" local local_port = arg[3] or "0"
local socks_port = arg[4] or "0" local socks_port = arg[4] or "0"
local server = ucursor:get_all("shadowsocksr", server_section) local server = ucursor:get_all("shadowsocksr", server_section)
local v2ray = { local v2ray = {

View File

@ -1,5 +1,34 @@
#!/bin/sh #!/bin/sh
mkdir -p /tmp/dnsmasq.ssr NAME=shadowsocksr
awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"blacklist"'\n",$0)}' /etc/config/black.list > /tmp/dnsmasq.ssr/blacklist_forward.conf uci_get_by_type() {
awk '!/^$/&&!/^#/{printf("server=/.%s/'"127.0.0.1#5335"'\n",$0)}' /etc/config/black.list >> /tmp/dnsmasq.ssr/blacklist_forward.conf local ret=$(uci get $NAME.@$1[0].$2 2>/dev/null)
awk '!/^$/&&!/^#/{printf("ipset=/.%s/'"whitelist"'\n",$0)}' /etc/config/white.list > /tmp/dnsmasq.ssr/whitelist_forward.conf echo ${ret:=$3}
}
cp -a /etc/dnsmasq.ssr /tmp/
cp -a /etc/dnsmasq.oversea /tmp/
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() {
for line in $(cat /etc/ssr/netflix.list); do sed -i "/$line/d" /tmp/dnsmasq.ssr/gfw_list.conf; done
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
if [ "$(uci_get_by_type global adblock 0)" == "0" ]; then
rm -f /tmp/dnsmasq.ssr/ad.conf
fi
fi
/etc/init.d/dnsmasq restart >/dev/null 2>&1

View File

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
/usr/bin/lua /usr/share/shadowsocksr/update.lua /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 /usr/bin/lua /usr/share/shadowsocksr/subscribe.lua
sleep 10
/etc/init.d/shadowsocksr restart

View File

@ -10,27 +10,56 @@ require 'luci.sys'
require 'uci' require 'uci'
-- these global functions are accessed all the time by the event handler -- these global functions are accessed all the time by the event handler
-- so caching them is worth the effort -- so caching them is worth the effort
local luci = luci
local tinsert = table.insert local tinsert = table.insert
local ssub, slen, schar, sbyte, sformat, sgsub = string.sub, string.len, string.char, string.byte, string.format, string.gsub 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 jsonParse, jsonStringify = luci.jsonc.parse, luci.jsonc.stringify
local b64decode = nixio.bin.b64decode local b64decode = nixio.bin.b64decode
local cache = {} local nodeResult = {} -- update result
local nodeResult = setmetatable({}, { __index = cache }) -- update result local application = 'shadowsocksr'
local name = 'shadowsocksr'
local uciType = 'servers' local uciType = 'servers'
local ucic = luci.model.uci.cursor() local ucic2 = uci.cursor()
local proxy = ucic:get_first(name, 'server_subscribe', 'proxy', '0') local proxy = ucic2:get(application, '@server_subscribe[0]', 'proxy') or '0'
local switch = ucic:get_first(name, 'server_subscribe', 'switch', '1') local switch = ucic2:get(application, '@server_subscribe[0]', 'switch') or '1'
local subscribe_url = ucic:get_first(name, 'server_subscribe', 'subscribe_url', {}) local subscribe_url = ucic2:get(application, '@server_subscribe[0]', 'subscribe_url') or {}
local filter_words = ucic:get_first(name, 'server_subscribe', 'filter_words', 'QQ群') local filter_words = ucic2:get(application, '@server_subscribe[0]', 'filter_words') or '过期时间/剩余流量'
ucic2:revert(application)
local log = function(...) local log = function(...)
print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " ")) print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " "))
end end
-- 获取各项动态配置的当前服务器,可以用 get 和 set get必须要获取到节点表
local CONFIG = {
GLOBAL_SERVER = {
remarks = '主节点',
type = "global", option = "global_server",
set = function(server)
ucic2:set(application, '@global[0]', "global_server", server)
end
}
}
do
for k, v in pairs(CONFIG) do
local currentNode
if v.get then
currentNode = v.get()
else
local cfgid = ucic2:get(application, '@' .. v.type .. '[0]', v.option)
if cfgid then
currentNode = ucic2:get_all(application, cfgid)
end
end
if currentNode then
CONFIG[k].currentNode = currentNode
else
CONFIG[k] = nil
end
end
end
-- 分割字符串 -- 分割字符串
local function split(full, sep) local function split(full, sep)
full = full:gsub("%z", "") -- 这里不是很清楚 有时候结尾带个\0 full = full:gsub("%z", "") -- 这里不是很清楚 有时候结尾带个\0
local off, result = 1, {} local off, result = 1, {}
while true do while true do
local nStart, nEnd = full:find(sep, off) local nStart, nEnd = full:find(sep, off)
@ -48,15 +77,15 @@ local function split(full, sep)
return result return result
end end
-- urlencode -- urlencode
local function get_urlencode(c) -- local function get_urlencode(c)
return sformat("%%%02X", sbyte(c)) -- return sformat("%%%02X", sbyte(c))
end -- end
local function urlEncode(szText) -- local function urlEncode(szText)
local str = szText:gsub("([^0-9a-zA-Z ])", get_urlencode) -- local str = szText:gsub("([^0-9a-zA-Z ])", get_urlencode)
str = str:gsub(" ", "+") -- str = str:gsub(" ", "+")
return str -- return str
end -- end
local function get_urldecode(h) local function get_urldecode(h)
return schar(tonumber(h, 16)) return schar(tonumber(h, 16))
@ -72,12 +101,7 @@ local function trim(text)
end end
return (sgsub(text, "^%s*(.-)%s*$", "%1")) return (sgsub(text, "^%s*(.-)%s*$", "%1"))
end end
-- md5
local function md5(content)
local stdout = luci.sys.exec('echo \"' .. urlEncode(content) .. '\" | md5sum | cut -d \" \" -f1')
-- assert(nixio.errno() == 0)
return trim(stdout)
end
-- base64 -- base64
local function base64Decode(text) local function base64Decode(text)
local raw = text local raw = text
@ -99,7 +123,8 @@ local function processData(szType, content)
local result = { local result = {
type = szType, type = szType,
local_port = 1234, local_port = 1234,
kcp_param = '--nocomp' kcp_param = '--nocomp',
isSubscribe = 1,
} }
if szType == 'ssr' then if szType == 'ssr' then
local dat = split(content, "/%?") local dat = split(content, "/%?")
@ -119,7 +144,7 @@ local function processData(szType, content)
result.protocol_param = base64Decode(params.protoparam) result.protocol_param = base64Decode(params.protoparam)
local group = base64Decode(params.group) local group = base64Decode(params.group)
if group then if group then
result.alias = "[" .. group .. "] " result.alias = "[" .. group .. "] "
end end
result.alias = result.alias .. base64Decode(params.remarks) result.alias = result.alias .. base64Decode(params.remarks)
elseif szType == 'vmess' then elseif szType == 'vmess' then
@ -263,14 +288,6 @@ local function processData(szType, content)
if not result.alias then if not result.alias then
result.alias = result.server .. ':' .. result.server_port result.alias = result.server .. ':' .. result.server_port
end end
-- alias 不参与 hashkey 计算
local alias = result.alias
result.alias = nil
local switch_enable = result.switch_enable
result.switch_enable = nil
result.hashkey = md5(jsonStringify(result))
result.alias = alias
result.switch_enable = switch_enable
return result return result
end end
-- wget -- wget
@ -280,15 +297,67 @@ local function wget(url)
end end
local function check_filer(result) local function check_filer(result)
do do
local filter_word = split(filter_words, "/") local filter_word = split(filter_words, "/")
for i, v in pairs(filter_word) do for i, v in pairs(filter_word) do
if result.alias:find(v) then if result.alias:find(v) then
log('订阅节点关键字过滤:“' .. v ..'” ,该节点被丢弃') log('订阅节点关键字过滤:“' .. v ..'” ,该节点被丢弃')
return true return true
end end
end end
end end
end
local function select_node(nodes, config)
local server
-- 第一优先级 IP + 端口
for id, node in pairs(nodes) do
if node.server .. ':' .. node.server_port == config.currentNode.server .. ':' .. config.currentNode.server_port then
log('选择【' .. config.remarks .. '】第一匹配节点:' .. node.alias)
server = id
break
end
end
-- 第二优先级 IP
if not server then
for id, node in pairs(nodes) do
if node.server == config.currentNode.server then
log('选择【' .. config.remarks .. '】第二匹配节点:' .. node.alias)
server = id
break
end
end
end
-- 第三优先级备注
if not server then
for id, node in pairs(nodes) do
if node.alias == config.currentNode.alias then
log('选择【' .. config.remarks .. '】第三匹配节点:' .. node.alias)
server = id
break
end
end
end
-- 第四 cfgid
if not server then
for id, node in pairs(nodes) do
if id == config.currentNode['.name'] then
log('选择【' .. config.remarks .. '】第四匹配节点:' .. node.alias)
server = id
break
end
end
end
-- 还不行 随便找一个
if not server then
server = ucic2:get(application, '@'.. uciType .. '[0]')
if server then
log('无法找到最匹配的节点,当前已更换为' .. ucic2:get_all(application, server).alias)
end
end
if server then
config.set(server)
end
end end
local execute = function() local execute = function()
@ -296,15 +365,14 @@ local execute = function()
do do
if proxy == '0' then -- 不使用代理更新的话先暂停 if proxy == '0' then -- 不使用代理更新的话先暂停
log('服务正在暂停') log('服务正在暂停')
luci.sys.init.stop(name) luci.sys.init.stop(application)
end end
for k, url in ipairs(subscribe_url) do for k, url in ipairs(subscribe_url) do
local raw = wget(url) local raw = wget(url)
if #raw > 0 then if #raw > 0 then
local nodes, szType local nodes, szType
local groupHash = md5(url) local all_odes = {}
cache[groupHash] = {} tinsert(nodeResult, all_odes)
tinsert(nodeResult, {})
local index = #nodeResult local index = #nodeResult
-- SSD 似乎是这种格式 ssd:// 开头的 -- SSD 似乎是这种格式 ssd:// 开头的
if raw:find('ssd://') then if raw:find('ssd://') then
@ -313,10 +381,10 @@ local execute = function()
nodes = base64Decode(raw:sub(nEnd + 1, #raw)) nodes = base64Decode(raw:sub(nEnd + 1, #raw))
nodes = jsonParse(nodes) nodes = jsonParse(nodes)
local extra = { local extra = {
airport = nodes.airport, airport = nodes.airport,
port = nodes.port, port = nodes.port,
encryption = nodes.encryption, encryption = nodes.encryption,
password = nodes.password password = nodes.password
} }
local servers = {} local servers = {}
-- SS里面包着 干脆直接这样 -- SS里面包着 干脆直接这样
@ -349,16 +417,15 @@ local execute = function()
-- log(result) -- log(result)
if result then if result then
if if
not result.server or not result.server or
check_filer(result) or not result.server_port or
result.server:match("[^0-9a-zA-Z%-%.%s]") -- 中文做地址的 也没有人拿中文域名搞就算中文域也有Puny Code SB 机场 check_filer(result) or
then result.server:match("[^0-9a-zA-Z%-%.%s]") -- 中文做地址的 也没有人拿中文域名搞就算中文域也有Puny Code SB 机场
then
log('丢弃无效节点: ' .. result.type ..' 节点, ' .. result.alias) log('丢弃无效节点: ' .. result.type ..' 节点, ' .. result.alias)
else else
log('成功解析: ' .. result.type ..' 节点, ' .. result.alias) log('成功解析: ' .. result.type ..' 节点, ' .. result.alias)
result.grouphashkey = groupHash tinsert(all_odes, result)
tinsert(nodeResult[index], result)
cache[groupHash][result.hashkey] = nodeResult[index][#nodeResult[index]]
end end
end end
end end
@ -371,61 +438,45 @@ local execute = function()
end end
-- diff -- diff
do do
if next(nodeResult) == nil then assert(next(nodeResult), '更新失败,没有可用的节点信息')
log("更新失败,没有可用的节点信息") -- delete all for subscribe nodes
return ucic2:foreach(application, uciType, function(node)
end if node.isSubscribe or node.hashkey then -- 兼容之前的hashkey
local add, del = 0, 0 ucic2:delete(application, node['.name'])
ucic:foreach(name, uciType, function(old)
if old.grouphashkey or old.hashkey then -- 没有 hash 的不参与删除
if not nodeResult[old.grouphashkey] or not nodeResult[old.grouphashkey][old.hashkey] then
ucic:delete(name, old['.name'])
del = del + 1
else
local dat = nodeResult[old.grouphashkey][old.hashkey]
ucic:tset(name, old['.name'], dat)
-- 标记一下
setmetatable(nodeResult[old.grouphashkey][old.hashkey], { __index = { _ignore = true } })
end
else
if not old.alias then
old.alias = old.server .. ':' .. old.server_port
end
log('忽略手动添加的节点: ' .. old.alias)
end end
end) end)
for k, v in ipairs(nodeResult) do for _, v in ipairs(nodeResult) do
for kk, vv in ipairs(v) do for _, vv in ipairs(v) do
if not vv._ignore then vv.switch_enable = switch
local section = ucic:add(name, uciType) local cfgid = ucic2:add(application, uciType)
ucic:tset(name, section, vv) for kkk, vvv in pairs(vv) do
ucic:set(name, section, "switch_enable", switch) ucic2:set(application, cfgid, kkk, vvv)
add = add + 1
end end
end end
end end
ucic:commit(name) ucic2:commit(application)
-- 如果原有服务器节点已经不见了就尝试换为第一个节点 local ucic3 = uci.cursor()
local globalServer = ucic:get_first(name, 'global', 'global_server', '') -- repair configuration
local firstServer = ucic:get_first(name, uciType) if next(CONFIG) then
if firstServer then local nodes = {}
if not ucic:get(name, globalServer) then ucic3:foreach(application, uciType, function(node)
luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &") if node.server and node.server_port and node.alias then
ucic:commit(name) nodes[node['.name']] = node
ucic:set(name, ucic:get_first(name, 'global'), 'global_server', ucic:get_first(name, uciType)) end
ucic:commit(name) end)
log('当前主服务器节点已被删除,正在自动更换为第一个节点。') for _, config in pairs(CONFIG) do
luci.sys.call("/etc/init.d/" .. name .. " start > /dev/null 2>&1 &") select_node(nodes, config)
else
log('维持当前主服务器节点。')
luci.sys.call("/etc/init.d/" .. name .." restart > /dev/null 2>&1 &")
end end
else ucic3:commit(application)
log('没有服务器节点了,停止服务')
luci.sys.call("/etc/init.d/" .. name .. " stop > /dev/null 2>&1 &")
end end
log('新增节点数量: ' ..add, '删除节点数量: ' .. del) -- select first server
local globalServer = ucic3:get(application, '@global[0]', 'global_server') or ''
if not globalServer or not ucic3:get_all(application, globalServer) then
ucic3:set(application, '@global[0]', 'global_server', select(2, ucic3:get(application, '@' .. uciType .. '[0]')))
ucic3:commit(application)
log('当前没有主节点,自动选择第一个节点开启服务。')
end
luci.sys.call("/etc/init.d/" .. application .." restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
log('订阅更新成功') log('订阅更新成功')
end end
end end
@ -435,12 +486,11 @@ if subscribe_url and #subscribe_url > 0 then
log(e) log(e)
log(debug.traceback()) log(debug.traceback())
log('发生错误, 正在恢复服务') log('发生错误, 正在恢复服务')
local firstServer = ucic:get_first(name, uciType) if CONFIG.GLOBAL_SERVER and CONFIG.GLOBAL_SERVER.currentNode then
if firstServer then luci.sys.call("/etc/init.d/" .. application .." restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
luci.sys.call("/etc/init.d/" .. name .." restart > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
log('重启服务成功') log('重启服务成功')
else else
luci.sys.call("/etc/init.d/" .. name .." stop > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早 luci.sys.call("/etc/init.d/" .. application .." stop > /dev/null 2>&1 &") -- 不加&的话日志会出现的更早
log('停止服务成功') log('停止服务成功')
end end
end) end)

View File

@ -3,10 +3,8 @@
-- This file is part of the luci-app-ssr-plus update.lua -- This file is part of the luci-app-ssr-plus update.lua
-- By Mattraks -- By Mattraks
------------------------------------------------ ------------------------------------------------
require 'nixio' require "luci.sys"
require 'luci.util' require "luci.model.uci"
require 'luci.jsonc'
require 'luci.sys'
local icount = 0 local icount = 0
local uci = luci.model.uci.cursor() local uci = luci.model.uci.cursor()
@ -14,112 +12,41 @@ local log = function(...)
print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " ")) print(os.date("%Y-%m-%d %H:%M:%S ") .. table.concat({ ... }, " "))
end end
log('正在更新【GFW列表】数据库') local function update(url, file, type, file2)
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 Num = 1
sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") refresh_cmd = "wget-ssl --no-check-certificate -t 3 -T 10 -O- " .. url .. " > /tmp/ssr-update." .. type
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"
sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") sret = luci.sys.call(refresh_cmd .. " 2>/dev/null")
if sret == 0 then if sret == 0 then
luci.sys.call("/usr/bin/ssr-ad") if type == "gfw_data" then
icount = luci.sys.exec("cat /tmp/ad.conf | wc -l") luci.sys.call("/usr/bin/ssr-gfw " .. type)
if tonumber(icount) > 100 then Num = 2
if nixio.fs.access("/etc/dnsmasq.ssr/ad.conf") then end
oldcount = luci.sys.exec("cat /etc/dnsmasq.ssr/ad.conf | wc -l") if type == "ad_data" then
else luci.sys.call("/usr/bin/ssr-ad " .. type)
oldcount = "0" end
end local new_md5 = luci.sys.exec("echo -n $([ -f '/tmp/ssr-update." .. type .. "' ] && md5sum /tmp/ssr-update." .. type .. " | awk '{print $1}')")
if tonumber(icount) ~= tonumber(oldcount) then local old_md5 = luci.sys.exec("echo -n $([ -f '" .. file .. "' ] && md5sum " .. file .. " | awk '{print $1}')")
luci.sys.exec("cp -f /tmp/ad.conf /etc/dnsmasq.ssr/ad.conf") if new_md5 == old_md5 then
luci.sys.exec("cp -f /tmp/ad.conf /tmp/dnsmasq.ssr/ad.conf") log("你已经是最新数据,无需更新!")
log('更新成功! 新的总纪录数:' .. tostring(tonumber(icount))) else
else icount = luci.sys.exec("cat /tmp/ssr-update." .. type .. " | wc -l")
log('你已经是最新数据,无需更新!') luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file)
end if file2 then luci.sys.exec("cp -f /tmp/ssr-update." .. type .. " " .. file2) end
else log("更新成功! 新的总纪录数:" .. tostring(tonumber(icount)/Num))
log('更新失败!')
end end
luci.sys.exec("rm -f /tmp/ad.conf")
else else
log('更新失败!') log("更新失败!")
end end
luci.sys.exec("rm -f /tmp/ssr-update." .. type)
end end
--[[ log("正在更新【GFW列表】数据库")
log('正在更新【Netflix IP段】数据库') update(uci:get_first("shadowsocksr", "global", "gfwlist_url", "https://cdn.jsdelivr.net/gh/gfwlist/gfwlist/gfwlist.txt"), "/etc/dnsmasq.ssr/gfw_list.conf", "gfw_data", "/tmp/dnsmasq.ssr/gfw_list.conf")
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" log("正在更新【国内IP段】数据库")
sret = luci.sys.call(refresh_cmd .. " 2>/dev/null") update(uci:get_first("shadowsocksr", "global", "chnroute_url","https://ispip.clang.cn/all_cn.txt"), "/etc/ssr/china_ssr.txt", "cnip")
if sret == 0 then if uci:get_first("shadowsocksr", "global", "adblock","0") == "1" then
luci.sys.call("/usr/bin/ssr-gfw") log("正在更新【广告屏蔽】数据库")
icount = luci.sys.exec("cat /tmp/netflixip.list | wc -l") update(uci:get_first("shadowsocksr", "global", "adblock_url","https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt"), "/etc/dnsmasq.ssr/ad.conf", "ad_data", "/tmp/dnsmasq.ssr/ad.conf")
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('更新失败!')
end 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")