luci-app-ssr-plus: update from upstream
* latest commit 311f6ef039ba1d31f3671fc9d8b9c9eadfdc0bdf Signed-off-by: sbwml <admin@cooluc.com>
This commit is contained in:
parent
d6dbccce7b
commit
caf16149c8
@ -1,5 +1,8 @@
|
|||||||
local uci = luci.model.uci.cursor()
|
local uci = luci.model.uci.cursor()
|
||||||
local server_table = {}
|
local server_table = {}
|
||||||
|
local function is_finded(e)
|
||||||
|
return luci.sys.exec('type -t -p "%s"' % e) ~= "" and true or false
|
||||||
|
end
|
||||||
|
|
||||||
uci:foreach("shadowsocksr", "servers", function(s)
|
uci:foreach("shadowsocksr", "servers", function(s)
|
||||||
if s.alias then
|
if s.alias then
|
||||||
|
@ -117,7 +117,8 @@ local securitys = {
|
|||||||
local tls_flows = {
|
local tls_flows = {
|
||||||
-- tls
|
-- tls
|
||||||
"xtls-rprx-vision",
|
"xtls-rprx-vision",
|
||||||
"xtls-rprx-vision-udp443"
|
"xtls-rprx-vision-udp443",
|
||||||
|
"none"
|
||||||
}
|
}
|
||||||
|
|
||||||
m = Map("shadowsocksr", translate("Edit ShadowSocksR Server"))
|
m = Map("shadowsocksr", translate("Edit ShadowSocksR Server"))
|
||||||
@ -218,7 +219,7 @@ o:depends("type", "ss")
|
|||||||
o:depends("type", "v2ray")
|
o:depends("type", "v2ray")
|
||||||
o:depends("type", "trojan")
|
o:depends("type", "trojan")
|
||||||
o:depends("type", "naiveproxy")
|
o:depends("type", "naiveproxy")
|
||||||
o:depends({type = "hysteria",port_hopping = false})
|
o:depends("type", "hysteria")
|
||||||
o:depends("type", "tuic")
|
o:depends("type", "tuic")
|
||||||
o:depends("type", "shadowtls")
|
o:depends("type", "shadowtls")
|
||||||
o:depends("type", "socks5")
|
o:depends("type", "socks5")
|
||||||
@ -341,7 +342,7 @@ o.default = "30"
|
|||||||
|
|
||||||
o = s:option(Value, "port_range", translate("Port Range"))
|
o = s:option(Value, "port_range", translate("Port Range"))
|
||||||
o:depends({type = "hysteria", port_hopping = true})
|
o:depends({type = "hysteria", port_hopping = true})
|
||||||
o.rmempty = false
|
o.rmempty = true
|
||||||
|
|
||||||
o = s:option(Flag, "lazy_mode", translate("Enable Lazy Mode"))
|
o = s:option(Flag, "lazy_mode", translate("Enable Lazy Mode"))
|
||||||
o:depends("type", "hysteria")
|
o:depends("type", "hysteria")
|
||||||
@ -868,7 +869,7 @@ if is_finded("xray") then
|
|||||||
o:depends({type = "v2ray", v2ray_protocol = "vless", reality = true})
|
o:depends({type = "v2ray", v2ray_protocol = "vless", reality = true})
|
||||||
|
|
||||||
-- [[ XTLS ]]--
|
-- [[ XTLS ]]--
|
||||||
o = s:option(Value, "tls_flow", translate("Flow"))
|
o = s:option(ListValue, "tls_flow", translate("Flow"))
|
||||||
for _, v in ipairs(tls_flows) do
|
for _, v in ipairs(tls_flows) do
|
||||||
o:value(v, translate(v))
|
o:value(v, translate(v))
|
||||||
end
|
end
|
||||||
@ -878,7 +879,7 @@ if is_finded("xray") then
|
|||||||
|
|
||||||
-- [[ uTLS ]]--
|
-- [[ uTLS ]]--
|
||||||
o = s:option(Value, "fingerprint", translate("Finger Print"))
|
o = s:option(Value, "fingerprint", translate("Finger Print"))
|
||||||
o:value("", translate("disable"))
|
o.default = "chrome"
|
||||||
o:value("chrome", translate("chrome"))
|
o:value("chrome", translate("chrome"))
|
||||||
o:value("firefox", translate("firefox"))
|
o:value("firefox", translate("firefox"))
|
||||||
o:value("safari", translate("safari"))
|
o:value("safari", translate("safari"))
|
||||||
@ -889,6 +890,7 @@ if is_finded("xray") then
|
|||||||
o:value("qq", translate("qq"))
|
o:value("qq", translate("qq"))
|
||||||
o:value("random", translate("random"))
|
o:value("random", translate("random"))
|
||||||
o:value("randomized", translate("randomized"))
|
o:value("randomized", translate("randomized"))
|
||||||
|
o:value("", translate("disable"))
|
||||||
o:depends({type = "v2ray", tls = true})
|
o:depends({type = "v2ray", tls = true})
|
||||||
o:depends({type = "v2ray", reality = true})
|
o:depends({type = "v2ray", reality = true})
|
||||||
end
|
end
|
||||||
@ -917,9 +919,11 @@ o = s:option(Value, "pinsha256", translate("Certificate fingerprint"))
|
|||||||
o:depends({type = "hysteria", insecure = true })
|
o:depends({type = "hysteria", insecure = true })
|
||||||
o.rmempty = true
|
o.rmempty = true
|
||||||
|
|
||||||
|
|
||||||
-- [[ Mux ]]--
|
-- [[ Mux ]]--
|
||||||
o = s:option(Flag, "mux", translate("Mux"))
|
o = s:option(Flag, "mux", translate("Mux"))
|
||||||
o.rmempty = false
|
o.rmempty = false
|
||||||
|
o.default = false
|
||||||
o:depends({type = "v2ray", v2ray_protocol = "vless"})
|
o:depends({type = "v2ray", v2ray_protocol = "vless"})
|
||||||
o:depends({type = "v2ray", v2ray_protocol = "vmess"})
|
o:depends({type = "v2ray", v2ray_protocol = "vmess"})
|
||||||
o:depends({type = "v2ray", v2ray_protocol = "trojan"})
|
o:depends({type = "v2ray", v2ray_protocol = "trojan"})
|
||||||
@ -927,12 +931,185 @@ o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
|||||||
o:depends({type = "v2ray", v2ray_protocol = "socks"})
|
o:depends({type = "v2ray", v2ray_protocol = "socks"})
|
||||||
o:depends({type = "v2ray", v2ray_protocol = "http"})
|
o:depends({type = "v2ray", v2ray_protocol = "http"})
|
||||||
|
|
||||||
o = s:option(Value, "concurrency", translate("Concurrency"))
|
o = s:option(ListValue, "concurrency", translate("concurrency"))
|
||||||
o.datatype = "uinteger"
|
|
||||||
o.rmempty = true
|
o.rmempty = true
|
||||||
o.default = "4"
|
o.default = "-1"
|
||||||
o:depends("mux", "1")
|
o:value("-1", translate("disable"))
|
||||||
o:depends("type", "naiveproxy")
|
o:value("8", translate("8"))
|
||||||
|
o:depends("mux", true)
|
||||||
|
|
||||||
|
o = s:option(ListValue, "xudpConcurrency", translate("xudpConcurrency"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "16"
|
||||||
|
o:value("16", translate("16"))
|
||||||
|
o:value("-1", translate("disable"))
|
||||||
|
o:depends("mux", true)
|
||||||
|
|
||||||
|
o = s:option(ListValue, "xudpProxyUDP443", translate("xudpProxyUDP443"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "reject"
|
||||||
|
o:value("reject", translate("reject"))
|
||||||
|
o:value("allow", translate("allow"))
|
||||||
|
o:value("skip", translate("skip"))
|
||||||
|
o:depends("mux", true)
|
||||||
|
|
||||||
|
|
||||||
|
-- [[ MPTCP ]]--
|
||||||
|
o = s:option(Flag, "mptcp", translate("MPTCP"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = false
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vless"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vmess"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "trojan"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "socks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "http"})
|
||||||
|
|
||||||
|
-- [[ custom_tcpcongestion 连接服务器节点的 TCP 拥塞控制算法 ]]--
|
||||||
|
o = s:option(ListValue, "custom_tcpcongestion", translate("custom_tcpcongestion"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = ""
|
||||||
|
o:value("", translate("comment_tcpcongestion_disable"))
|
||||||
|
o:value("bbr", translate("BBR"))
|
||||||
|
o:value("cubic", translate("CUBIC"))
|
||||||
|
o:value("reno", translate("Reno"))
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vless"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vmess"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "trojan"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "socks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "http"})
|
||||||
|
|
||||||
|
|
||||||
|
-- [[ custom_sniffing 流量嗅探 ]]--
|
||||||
|
o = s:option(Flag, "custom_sniffing", translate("custom_sniffing"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = true
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vless"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vmess"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "trojan"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "socks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "http"})
|
||||||
|
|
||||||
|
-- [[ custom_domainsExcluded 流量嗅探域名排除列表 ]]--
|
||||||
|
o = s:option(Flag, "custom_domainsExcluded", translate("custom_domainsExcluded"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = true
|
||||||
|
o:depends("custom_sniffing", true)
|
||||||
|
|
||||||
|
-- [[ custom_routeOnly 嗅探得到的域名仅用于 Xray 路由 ]]--
|
||||||
|
o = s:option(Flag, "custom_routeOnly", translate("custom_routeOnly"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = false
|
||||||
|
o:depends("custom_sniffing", true)
|
||||||
|
|
||||||
|
|
||||||
|
-- [[ custom_dns_enable Xray DNS 功能 ]]--
|
||||||
|
o = s:option(Flag, "custom_dns_enable", translate("custom_dns_enable"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = false
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vless"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vmess"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "trojan"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "socks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "http"})
|
||||||
|
o.description = translate("comment_dns_inbound_enable")
|
||||||
|
|
||||||
|
-- [[ custom_dns_local 本地 DNS ]]--
|
||||||
|
o = s:option(ListValue, "custom_dns_local", translate("custom_dns_local"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "https+local://223.5.5.5/dns-query"
|
||||||
|
o:value("https+local://223.5.5.5/dns-query", translate("https+local://223.5.5.5/dns-query"))
|
||||||
|
o:value("https+local://119.29.29.29/dns-query", translate("https+local://119.29.29.29/dns-query"))
|
||||||
|
o:depends("custom_dns_enable", true)
|
||||||
|
|
||||||
|
-- [[ custom_dns_remote 远端 DNS ]]--
|
||||||
|
o = s:option(ListValue, "custom_dns_remote", translate("custom_dns_remote"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "https://1.1.1.1/dns-query"
|
||||||
|
o:value("https://1.1.1.1/dns-query", translate("https://1.1.1.1/dns-query"))
|
||||||
|
o:value("https://8.8.8.8/dns-query", translate("https://8.8.8.8/dns-query"))
|
||||||
|
o:depends("custom_dns_enable", true)
|
||||||
|
|
||||||
|
-- [[ custom_dns_remote_domains 远端 DNS 域名列表 ]]--
|
||||||
|
o = s:option(ListValue, "custom_dns_remote_domains", translate("custom_dns_remote_domains"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "geosite:geolocation-!cn"
|
||||||
|
o:value("geosite:geolocation-!cn", translate("geosite:geolocation-!cn"))
|
||||||
|
o:depends("custom_dns_enable", true)
|
||||||
|
|
||||||
|
-- [[ custom_nonIPQuery 非 A 和 AAAA 记录处理方式 ]]--
|
||||||
|
o = s:option(ListValue, "custom_nonIPQuery", translate("custom_nonIPQuery"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "skip"
|
||||||
|
o:value("skip", translate("skip"))
|
||||||
|
o:value("drop", translate("drop"))
|
||||||
|
o:depends("custom_dns_enable", true)
|
||||||
|
|
||||||
|
-- [[ custom_nonIPQuery_outbound_tag 非 A 和 AAAA 记录查询方式 ]]--
|
||||||
|
o = s:option(ListValue, "custom_nonIPQuery_outbound_tag", translate("custom_nonIPQuery_outbound_tag"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "direct"
|
||||||
|
o:value("direct", translate("direct"))
|
||||||
|
o:value("proxy", translate("proxy"))
|
||||||
|
o:depends({custom_nonIPQuery = "skip"})
|
||||||
|
|
||||||
|
-- [[ custom_dokodemo_door_dns_address 查询非 A 和 AAAA 记录 DNS ]]--
|
||||||
|
o = s:option(ListValue, "custom_dokodemo_door_dns_address", translate("custom_dokodemo_door_dns_address"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "223.5.5.5"
|
||||||
|
o:value("223.5.5.5", translate("223.5.5.5"))
|
||||||
|
o:value("119.29.29.29", translate("119.29.29.29"))
|
||||||
|
o:value("1.1.1.1", translate("1.1.1.1"))
|
||||||
|
o:value("8.8.8.8", translate("8.8.8.8"))
|
||||||
|
o:depends({custom_nonIPQuery = "skip"})
|
||||||
|
|
||||||
|
|
||||||
|
-- [[ custom_log Xray 日志功能 ]]--
|
||||||
|
o = s:option(Flag, "custom_log", translate("custom_log"))
|
||||||
|
o.rmempty = false
|
||||||
|
o.default = false
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vless"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "vmess"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "trojan"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "shadowsocks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "socks"})
|
||||||
|
o:depends({type = "v2ray", v2ray_protocol = "http"})
|
||||||
|
|
||||||
|
-- [[ custom_loglevel 日志级别 ]]--
|
||||||
|
o = s:option(ListValue, "custom_loglevel", translate("custom_loglevel"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "warning"
|
||||||
|
o:value("error", translate("error"))
|
||||||
|
o:value("warning", translate("warning"))
|
||||||
|
o:value("info", translate("info"))
|
||||||
|
o:value("debug", translate("debug"))
|
||||||
|
o:depends("custom_log", true)
|
||||||
|
|
||||||
|
-- [[ custom_dnsLog DNS 查询记录 ]]--
|
||||||
|
o = s:option(Flag, "custom_dnsLog", translate("custom_dnsLog"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = true
|
||||||
|
o:depends("custom_log", true)
|
||||||
|
|
||||||
|
-- [[ custom_access 访问记录 ]]--
|
||||||
|
o = s:option(ListValue, "custom_access", translate("custom_access"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "/tmp/access.log"
|
||||||
|
o:value("/tmp/access.log", translate("/tmp/access.log"))
|
||||||
|
o:value("none", translate("none"))
|
||||||
|
o:depends("custom_log", true)
|
||||||
|
|
||||||
|
-- [[ custom_error 错误记录 ]]--
|
||||||
|
o = s:option(ListValue, "custom_error", translate("custom_error"))
|
||||||
|
o.rmempty = true
|
||||||
|
o.default = "/tmp/error.log"
|
||||||
|
o:value("/tmp/error.log", translate("/tmp/error.log"))
|
||||||
|
o:value("none", translate("none"))
|
||||||
|
o:depends("custom_log", true)
|
||||||
|
|
||||||
|
|
||||||
-- [[ Cert ]]--
|
-- [[ Cert ]]--
|
||||||
o = s:option(Flag, "certificate", translate("Self-signed Certificate"))
|
o = s:option(Flag, "certificate", translate("Self-signed Certificate"))
|
||||||
|
@ -91,6 +91,21 @@ msgstr "允许不安全连接"
|
|||||||
msgid "Concurrency"
|
msgid "Concurrency"
|
||||||
msgstr "最大并发连接数"
|
msgstr "最大并发连接数"
|
||||||
|
|
||||||
|
msgid "custom_tcpcongestion"
|
||||||
|
msgstr "连接服务器节点的 TCP 拥塞控制算法"
|
||||||
|
|
||||||
|
msgid "comment_tcpcongestion_disable"
|
||||||
|
msgstr "使用系统默认值"
|
||||||
|
|
||||||
|
msgid "custom_sniffing"
|
||||||
|
msgstr "流量嗅探"
|
||||||
|
|
||||||
|
msgid "custom_domainsExcluded"
|
||||||
|
msgstr "流量嗅探域名排除列表"
|
||||||
|
|
||||||
|
msgid "custom_routeOnly"
|
||||||
|
msgstr "嗅探得到的域名仅用于 Xray 内部路由"
|
||||||
|
|
||||||
msgid "If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates."
|
msgid "If true, allowss insecure connection at TLS client, e.g., TLS server uses unverifiable certificates."
|
||||||
msgstr "是否允许不安全连接。当选择时,将不会检查远端主机所提供的 TLS 证书的有效性。"
|
msgstr "是否允许不安全连接。当选择时,将不会检查远端主机所提供的 TLS 证书的有效性。"
|
||||||
|
|
||||||
|
@ -407,7 +407,7 @@ start_udp() {
|
|||||||
hysteria)
|
hysteria)
|
||||||
gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port
|
gen_config_file $UDP_RELAY_SERVER $type 2 $tmp_udp_port
|
||||||
ln_start_bin $(first_type hysteria) hysteria client --config $udp_config_file
|
ln_start_bin $(first_type hysteria) hysteria client --config $udp_config_file
|
||||||
echolog "UDP TPROXY Relay:$($(first_type "hysteria") version | awk '{print $1,$2}') Started!"
|
echolog "UDP TPROXY Relay:$($(first_type "hysteria") version | awk '{print "Hhysteria2: " $2}' | head -9 | tail +9) Started!"
|
||||||
;;
|
;;
|
||||||
tuic)
|
tuic)
|
||||||
# FIXME: ipt2socks cannot handle udp reply from tuic
|
# FIXME: ipt2socks cannot handle udp reply from tuic
|
||||||
@ -705,7 +705,7 @@ Start_Run() {
|
|||||||
hysteria)
|
hysteria)
|
||||||
gen_config_file $GLOBAL_SERVER $type 1 $tcp_port $socks_port
|
gen_config_file $GLOBAL_SERVER $type 1 $tcp_port $socks_port
|
||||||
ln_start_bin $(first_type hysteria) hysteria client --config $tcp_config_file
|
ln_start_bin $(first_type hysteria) hysteria client --config $tcp_config_file
|
||||||
echolog "Main node:$($(first_type hysteria) version | awk '{print $1,$2}') Started!"
|
echolog "Main node:$($(first_type hysteria) version | awk '{print "Hhysteria2: " $2}' | head -9 | tail +9) Started!"
|
||||||
;;
|
;;
|
||||||
tuic)
|
tuic)
|
||||||
local PARAM
|
local PARAM
|
||||||
|
@ -28,7 +28,6 @@ touch /etc/ssrplus/ad.conf
|
|||||||
touch /etc/config/shadowsocksr
|
touch /etc/config/shadowsocksr
|
||||||
[ -s "/etc/config/shadowsocksr" ] || /etc/init.d/shadowsocksr reset
|
[ -s "/etc/config/shadowsocksr" ] || /etc/init.d/shadowsocksr reset
|
||||||
|
|
||||||
sed -i "s/option pdnsd_enable '3'/option pdnsd_enable '1'/g" /etc/config/shadowsocksr
|
|
||||||
sed -i "s/option type 'vmess'/option type 'v2ray'\n\toption v2ray_protocol 'vmess'/g" /etc/config/shadowsocksr
|
sed -i "s/option type 'vmess'/option type 'v2ray'\n\toption v2ray_protocol 'vmess'/g" /etc/config/shadowsocksr
|
||||||
sed -i "s/option type 'vless'/option type 'v2ray'\n\toption v2ray_protocol 'vless'/g" /etc/config/shadowsocksr
|
sed -i "s/option type 'vless'/option type 'v2ray'\n\toption v2ray_protocol 'vless'/g" /etc/config/shadowsocksr
|
||||||
sed -i "s/option encrypt_method_v2ray_ss/option encrypt_method_ss/g" /etc/config/shadowsocksr
|
sed -i "s/option encrypt_method_v2ray_ss/option encrypt_method_ss/g" /etc/config/shadowsocksr
|
||||||
|
@ -116,18 +116,96 @@ end
|
|||||||
local settings = outbound:new()
|
local settings = outbound:new()
|
||||||
settings:handleIndex(server.v2ray_protocol)
|
settings:handleIndex(server.v2ray_protocol)
|
||||||
local Xray = {
|
local Xray = {
|
||||||
log = {
|
-- 日志
|
||||||
-- error = "/var/ssrplus.log",
|
log = (server.custom_log == "1") and {
|
||||||
loglevel = "warning"
|
loglevel = server.custom_loglevel, -- 日志级别
|
||||||
|
dnsLog = (server.custom_dnsLog == "1") and true or false, -- DNS 查询记录
|
||||||
|
access = server.custom_access, -- 访问记录
|
||||||
|
error = server.custom_error -- 错误记录
|
||||||
|
} or nil,
|
||||||
|
-- DNS
|
||||||
|
dns = {
|
||||||
|
hosts = {
|
||||||
|
["dns.alidns.com"] = "223.5.5.5",
|
||||||
|
["doh.pub"] = "119.29.29.29"
|
||||||
|
},
|
||||||
|
servers = (server.custom_dns_enable == "1") and { -- Xray 内置 DNS
|
||||||
|
server.custom_dns_local, -- 本地 DNS
|
||||||
|
{
|
||||||
|
address = server.custom_dns_remote, -- 远端 DNS
|
||||||
|
domains = {
|
||||||
|
server.custom_dns_remote_domains -- 远端 DNS 域名列表
|
||||||
|
},
|
||||||
|
skipFallback = true,
|
||||||
|
queryStrategy = "UseIP"
|
||||||
|
}
|
||||||
|
} or nil,
|
||||||
|
queryStrategy = "UseIP"
|
||||||
|
},
|
||||||
|
-- 路由
|
||||||
|
routing = {
|
||||||
|
domainStrategy = "AsIs",
|
||||||
|
rules = {
|
||||||
|
{
|
||||||
|
type = "field",
|
||||||
|
inboundTag = {
|
||||||
|
"dns-in"
|
||||||
|
},
|
||||||
|
outboundTag = "dns-out"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
-- 传入连接
|
-- 传入连接
|
||||||
inbound = (local_port ~= "0") and {
|
inbounds = {
|
||||||
|
(local_port ~= "0") and {
|
||||||
-- listening
|
-- listening
|
||||||
port = tonumber(local_port),
|
port = tonumber(local_port),
|
||||||
protocol = "dokodemo-door",
|
protocol = "dokodemo-door",
|
||||||
settings = {network = proto, followRedirect = true},
|
settings = {network = proto, followRedirect = true},
|
||||||
sniffing = {enabled = true, destOverride = {"http", "tls"}}
|
sniffing = {
|
||||||
|
enabled = (server.custom_sniffing == "1") and true or false, -- 流量嗅探
|
||||||
|
routeOnly = (server.custom_routeOnly == "1") and true or false, -- 嗅探得到的域名仅用于 Xray 内部路由
|
||||||
|
destOverride = {"http", "tls", "quic"},
|
||||||
|
domainsExcluded = (server.custom_domainsExcluded == "1") and { -- 流量嗅探域名排除列表
|
||||||
|
"courier.push.apple.com",
|
||||||
|
"rbsxbxp-mim.vivox.com",
|
||||||
|
"rbsxbxp.www.vivox.com",
|
||||||
|
"rbsxbxp-ws.vivox.com",
|
||||||
|
"rbspsxp.www.vivox.com",
|
||||||
|
"rbspsxp-mim.vivox.com",
|
||||||
|
"rbspsxp-ws.vivox.com",
|
||||||
|
"rbswxp.www.vivox.com",
|
||||||
|
"rbswxp-mim.vivox.com",
|
||||||
|
"disp-rbspsp-5-1.vivox.com",
|
||||||
|
"disp-rbsxbp-5-1.vivox.com",
|
||||||
|
"proxy.rbsxbp.vivox.com",
|
||||||
|
"proxy.rbspsp.vivox.com",
|
||||||
|
"proxy.rbswp.vivox.com",
|
||||||
|
"rbswp.vivox.com",
|
||||||
|
"rbsxbp.vivox.com",
|
||||||
|
"rbspsp.vivox.com",
|
||||||
|
"rbspsp.www.vivox.com",
|
||||||
|
"rbswp.www.vivox.com",
|
||||||
|
"rbsxbp.www.vivox.com",
|
||||||
|
"rbsxbxp.vivox.com",
|
||||||
|
"rbspsxp.vivox.com",
|
||||||
|
"rbswxp.vivox.com",
|
||||||
|
"Mijia Cloud",
|
||||||
|
"dlg.io.mi.com"
|
||||||
|
} or nil,
|
||||||
|
}
|
||||||
} or nil,
|
} or nil,
|
||||||
|
(server.custom_dns_enable == "1") and { -- Xray 内置 DNS
|
||||||
|
port = 5335,
|
||||||
|
protocol = "dokodemo-door",
|
||||||
|
settings = {
|
||||||
|
address = server.custom_dokodemo_door_dns_address, -- 查询非 A 和 AAAA 记录DNS
|
||||||
|
port = 53,
|
||||||
|
network = "udp"
|
||||||
|
},
|
||||||
|
tag = "dns-in"
|
||||||
|
} or nil,
|
||||||
|
},
|
||||||
-- 开启 socks 代理
|
-- 开启 socks 代理
|
||||||
inboundDetour = (proto:find("tcp") and socks_port ~= "0") and {
|
inboundDetour = (proto:find("tcp") and socks_port ~= "0") and {
|
||||||
{
|
{
|
||||||
@ -138,7 +216,9 @@ local Xray = {
|
|||||||
}
|
}
|
||||||
} or nil,
|
} or nil,
|
||||||
-- 传出连接
|
-- 传出连接
|
||||||
outbound = {
|
outbounds = {
|
||||||
|
{
|
||||||
|
tag = "proxy",
|
||||||
protocol = server.v2ray_protocol,
|
protocol = server.v2ray_protocol,
|
||||||
settings = outbound_settings,
|
settings = outbound_settings,
|
||||||
-- 底层传输配置
|
-- 底层传输配置
|
||||||
@ -154,10 +234,9 @@ local Xray = {
|
|||||||
certificates = server.certificate and {
|
certificates = server.certificate and {
|
||||||
usage = "verify",
|
usage = "verify",
|
||||||
certificateFile = server.certpath
|
certificateFile = server.certpath
|
||||||
} or nil
|
} or nil,
|
||||||
} or nil,
|
} or nil,
|
||||||
realitySettings = (server.reality == '1') and {
|
realitySettings = (server.reality == '1') and {
|
||||||
show = false,
|
|
||||||
publicKey = server.reality_publickey,
|
publicKey = server.reality_publickey,
|
||||||
shortId = server.reality_shortid,
|
shortId = server.reality_shortid,
|
||||||
spiderX = server.reality_spiderx,
|
spiderX = server.reality_spiderx,
|
||||||
@ -176,6 +255,7 @@ local Xray = {
|
|||||||
}
|
}
|
||||||
} or nil,
|
} or nil,
|
||||||
kcpSettings = (server.transport == "kcp") and {
|
kcpSettings = (server.transport == "kcp") and {
|
||||||
|
-- kcp
|
||||||
mtu = tonumber(server.mtu),
|
mtu = tonumber(server.mtu),
|
||||||
tti = tonumber(server.tti),
|
tti = tonumber(server.tti),
|
||||||
uplinkCapacity = tonumber(server.uplink_capacity),
|
uplinkCapacity = tonumber(server.uplink_capacity),
|
||||||
@ -217,14 +297,47 @@ local Xray = {
|
|||||||
health_check_timeout = tonumber(server.health_check_timeout) or nil,
|
health_check_timeout = tonumber(server.health_check_timeout) or nil,
|
||||||
permit_without_stream = (server.permit_without_stream == "1") and true or nil,
|
permit_without_stream = (server.permit_without_stream == "1") and true or nil,
|
||||||
initial_windows_size = tonumber(server.initial_windows_size) or nil
|
initial_windows_size = tonumber(server.initial_windows_size) or nil
|
||||||
} or nil
|
} or nil,
|
||||||
|
sockopt = {
|
||||||
|
tcpMptcp = (server.mptcp == "1") and true or false, -- MPTCP
|
||||||
|
tcpNoDelay = (server.mptcp == "1") and true or false, -- MPTCP
|
||||||
|
tcpcongestion = server.custom_tcpcongestion -- 连接服务器节点的 TCP 拥塞控制算法
|
||||||
|
}
|
||||||
},
|
},
|
||||||
mux = (server.mux == "1" and server.transport ~= "grpc") and {
|
mux = {
|
||||||
-- mux
|
enabled = (server.mux == "1") and true or false, -- Mux
|
||||||
enabled = true,
|
concurrency = tonumber(server.concurrency), -- TCP 最大并发连接数
|
||||||
concurrency = tonumber(server.concurrency)
|
xudpConcurrency = tonumber(server.xudpConcurrency), -- UDP 最大并发连接数
|
||||||
} or nil
|
xudpProxyUDP443 = server.xudpProxyUDP443 -- 对被代理的 UDP/443 流量处理方式
|
||||||
} or nil
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
protocol = "freedom",
|
||||||
|
settings = {
|
||||||
|
domainStrategy = "ForceIPv6v4"
|
||||||
|
},
|
||||||
|
streamSettings = {
|
||||||
|
sockopt = {
|
||||||
|
tcpFastOpen = true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
tag = "direct"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
protocol = "blackhole",
|
||||||
|
tag = "block"
|
||||||
|
},
|
||||||
|
(server.custom_dns_enable == "1") and { -- Xray 内置 DNS
|
||||||
|
protocol = "dns",
|
||||||
|
settings = {
|
||||||
|
nonIPQuery = server.custom_nonIPQuery -- 非 A 和 AAAA 记录处理方式
|
||||||
|
},
|
||||||
|
proxySettings = (server.custom_nonIPQuery == "skip") and {
|
||||||
|
tag = server.custom_nonIPQuery_outbound_tag -- 非 A 和 AAAA 记录查询方式
|
||||||
|
} or nil,
|
||||||
|
tag = "dns-out"
|
||||||
|
} or nil,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
local cipher = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA"
|
local cipher = "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA"
|
||||||
local cipher13 = "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384"
|
local cipher13 = "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384"
|
||||||
@ -279,7 +392,7 @@ local ss = {
|
|||||||
reuse_port = true
|
reuse_port = true
|
||||||
}
|
}
|
||||||
local hysteria = {
|
local hysteria = {
|
||||||
server = server.server_port and (server.server .. ":" .. server.server_port) or (server.server .. ":" .. server.port_range),
|
server = (server.port_range and (server.server .. ":" .. server.port_range)) or (server.server_port and (server.server .. ":" .. server.server_port)),
|
||||||
bandwidth = {
|
bandwidth = {
|
||||||
up = tonumber(server.uplink_capacity) and tonumber(server.uplink_capacity) .. " mbps" or nil,
|
up = tonumber(server.uplink_capacity) and tonumber(server.uplink_capacity) .. " mbps" or nil,
|
||||||
down = tonumber(server.downlink_capacity) and tonumber(server.downlink_capacity) .. " mbps" or nil
|
down = tonumber(server.downlink_capacity) and tonumber(server.downlink_capacity) .. " mbps" or nil
|
||||||
@ -321,6 +434,7 @@ local hysteria = {
|
|||||||
auth = server.hy2_auth,
|
auth = server.hy2_auth,
|
||||||
tls = (server.tls_host) and {
|
tls = (server.tls_host) and {
|
||||||
sni = server.tls_host,
|
sni = server.tls_host,
|
||||||
|
alpn = server.tls_alpn or nil,
|
||||||
insecure = (server.insecure == "1") and true or false,
|
insecure = (server.insecure == "1") and true or false,
|
||||||
pinSHA256 = (server.insecure == "1") and server.pinsha256 or nil
|
pinSHA256 = (server.insecure == "1") and server.pinsha256 or nil
|
||||||
} or {
|
} or {
|
||||||
|
Loading…
Reference in New Issue
Block a user