update 2024-10-11 04:21:53

This commit is contained in:
kenzok8 2024-10-11 04:21:53 +08:00
parent 4d0d9e7843
commit 083fe874bb
3 changed files with 90 additions and 9 deletions

View File

@ -160,6 +160,9 @@ if has_xray then
o.default = "10-20" o.default = "10-20"
o:depends("fragment", true) o:depends("fragment", true)
o = s_xray:option(Flag, "noise", translate("Noise"), translate("UDP noise, Under some circumstances it can bypass some UDP based protocol restrictions."))
o.default = 0
o = s_xray:option(Flag, "sniffing_override_dest", translate("Override the connection destination address"), translate("Override the connection destination address with the sniffed domain.")) o = s_xray:option(Flag, "sniffing_override_dest", translate("Override the connection destination address"), translate("Override the connection destination address with the sniffed domain."))
o.default = 0 o.default = 0
@ -177,6 +180,42 @@ if has_xray then
o = s_xray:option(Value, "buffer_size", translate("Buffer Size"), translate("Buffer size for every connection (kB)")) o = s_xray:option(Value, "buffer_size", translate("Buffer Size"), translate("Buffer size for every connection (kB)"))
o.datatype = "uinteger" o.datatype = "uinteger"
s_xray_noise = m:section(TypedSection, "xray_noise_packets", translate("Xray Noise Packets"),"<font color='red'>" .. translate("To send noise packets, select \"Noise\" in Xray Settings.") .. "</font>")
s_xray_noise.template = "cbi/tblsection"
s_xray_noise.sortable = true
s_xray_noise.anonymous = true
s_xray_noise.addremove = true
s_xray_noise.create = function(e, t)
TypedSection.create(e, api.gen_short_uuid())
end
s_xray_noise.remove = function(self, section)
for k, v in pairs(self.children) do
v.rmempty = true
v.validate = nil
end
TypedSection.remove(self, section)
end
o = s_xray_noise:option(Flag, "enabled", translate("Enable"))
o.default = 1
o.rmempty = false
o = s_xray_noise:option(ListValue, "type", translate("Type"))
o:value("rand", "rand")
o:value("str", "str")
o:value("base64", "base64")
o = s_xray_noise:option(Value, "packet", translate("Packet"))
o.datatype = "minlength(1)"
o.rmempty = false
o = s_xray_noise:option(Value, "delay", translate("Delay (ms)"))
o.datatype = "or(uinteger,portrange)"
o.rmempty = false
end end
if has_singbox then if has_singbox then

View File

@ -18,6 +18,20 @@ local function get_new_port()
return new_port return new_port
end end
local function get_noise_packets()
local noises = {}
uci:foreach(appname, "xray_noise_packets", function(n)
local noise = (n.enabled == "1") and {
type = n.type,
packet = n.packet,
delay = string.find(n.delay, "-") and n.delay or tonumber(n.delay)
} or nil
table.insert(noises, noise)
end)
if #noises == 0 then noises = nil end
return noises
end
local function get_domain_excluded() local function get_domain_excluded()
local path = string.format("/usr/share/%s/domains_excluded", appname) local path = string.format("/usr/share/%s/domains_excluded", appname)
local content = fs.readfile(path) local content = fs.readfile(path)
@ -44,10 +58,12 @@ function gen_outbound(flag, node, tag, proxy_table)
local proxy = 0 local proxy = 0
local proxy_tag = "nil" local proxy_tag = "nil"
local fragment = nil local fragment = nil
local noise = nil
if proxy_table ~= nil and type(proxy_table) == "table" then if proxy_table ~= nil and type(proxy_table) == "table" then
proxy = proxy_table.proxy or 0 proxy = proxy_table.proxy or 0
proxy_tag = proxy_table.tag or "nil" proxy_tag = proxy_table.tag or "nil"
fragment = proxy_table.fragment or nil fragment = proxy_table.fragment or nil
noise = proxy_table.noise or nil
end end
if node.type == "Xray" then if node.type == "Xray" then
@ -132,7 +148,7 @@ function gen_outbound(flag, node, tag, proxy_table)
mark = 255, mark = 255,
tcpMptcp = (node.tcpMptcp == "1") and true or nil, tcpMptcp = (node.tcpMptcp == "1") and true or nil,
tcpNoDelay = (node.tcpNoDelay == "1") and true or nil, tcpNoDelay = (node.tcpNoDelay == "1") and true or nil,
dialerProxy = fragment and "fragment" or nil dialerProxy = (fragment or noise) and "dialerproxy" or nil
}, },
network = node.transport, network = node.transport,
security = node.stream_security, security = node.stream_security,
@ -679,7 +695,7 @@ function gen_config(var)
end end
if is_new_blc_node then if is_new_blc_node then
local blc_node = uci:get_all(appname, blc_node_id) local blc_node = uci:get_all(appname, blc_node_id)
local outbound = gen_outbound(flag, blc_node, blc_node_tag, { fragment = xray_settings.fragment == "1" or nil }) local outbound = gen_outbound(flag, blc_node, blc_node_tag, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil })
if outbound then if outbound then
table.insert(outbounds, outbound) table.insert(outbounds, outbound)
valid_nodes[#valid_nodes + 1] = blc_node_tag valid_nodes[#valid_nodes + 1] = blc_node_tag
@ -698,7 +714,7 @@ function gen_config(var)
if is_new_node then if is_new_node then
local fallback_node = uci:get_all(appname, fallback_node_id) local fallback_node = uci:get_all(appname, fallback_node_id)
if fallback_node.protocol ~= "_balancing" then if fallback_node.protocol ~= "_balancing" then
local outbound = gen_outbound(flag, fallback_node, fallback_node_id, { fragment = xray_settings.fragment == "1" or nil }) local outbound = gen_outbound(flag, fallback_node, fallback_node_id, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil })
if outbound then if outbound then
table.insert(outbounds, outbound) table.insert(outbounds, outbound)
else else
@ -863,10 +879,17 @@ function gen_config(var)
if xray_settings.fragment == "1" and not proxy_table.tag then if xray_settings.fragment == "1" and not proxy_table.tag then
proxy_table.fragment = true proxy_table.fragment = true
end end
if xray_settings.noise == "1" and not proxy_table.tag then
proxy_table.noise = true
end
local outbound = gen_outbound(flag, _node, rule_name, proxy_table) local outbound = gen_outbound(flag, _node, rule_name, proxy_table)
if outbound then if outbound then
set_outbound_detour(_node, outbound, outbounds, rule_name) set_outbound_detour(_node, outbound, outbounds, rule_name)
table.insert(outbounds, outbound) if rule_name == "default" then
table.insert(outbounds, 1, outbound)
else
table.insert(outbounds, outbound)
end
rule_outboundTag = rule_name rule_outboundTag = rule_name
end end
end end
@ -1054,7 +1077,7 @@ function gen_config(var)
sys.call("touch /tmp/etc/passwall2/iface/" .. node.iface) sys.call("touch /tmp/etc/passwall2/iface/" .. node.iface)
end end
else else
local outbound = gen_outbound(flag, node, nil, { fragment = xray_settings.fragment == "1" or nil }) local outbound = gen_outbound(flag, node, nil, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.fragment == "1" or nil })
if outbound then if outbound then
local default_outTag = set_outbound_detour(node, outbound, outbounds) local default_outTag = set_outbound_detour(node, outbound, outbounds)
table.insert(outbounds, outbound) table.insert(outbounds, outbound)
@ -1421,17 +1444,18 @@ function gen_config(var)
} }
} }
if xray_settings.fragment == "1" then if xray_settings.fragment == "1" or xray_settings.noise == "1" then
table.insert(outbounds, { table.insert(outbounds, {
protocol = "freedom", protocol = "freedom",
tag = "fragment", tag = "dialerproxy",
settings = { settings = {
domainStrategy = (direct_dns_query_strategy and direct_dns_query_strategy ~= "") and direct_dns_query_strategy or "UseIP", domainStrategy = (direct_dns_query_strategy and direct_dns_query_strategy ~= "") and direct_dns_query_strategy or "UseIP",
fragment = { fragment = (xray_settings.fragment == "1") and {
packets = (xray_settings.fragment_packets and xray_settings.fragment_packets ~= "") and xray_settings.fragment_packets, packets = (xray_settings.fragment_packets and xray_settings.fragment_packets ~= "") and xray_settings.fragment_packets,
length = (xray_settings.fragment_length and xray_settings.fragment_length ~= "") and xray_settings.fragment_length, length = (xray_settings.fragment_length and xray_settings.fragment_length ~= "") and xray_settings.fragment_length,
interval = (xray_settings.fragment_interval and xray_settings.fragment_interval ~= "") and xray_settings.fragment_interval interval = (xray_settings.fragment_interval and xray_settings.fragment_interval ~= "") and xray_settings.fragment_interval
} } or nil,
noises = (xray_settings.noise == "1") and get_noise_packets() or nil
}, },
streamSettings = { streamSettings = {
sockopt = { sockopt = {

View File

@ -1516,6 +1516,24 @@ msgstr "分片间隔"
msgid "Fragmentation interval (ms)" msgid "Fragmentation interval (ms)"
msgstr "分片间隔ms" msgstr "分片间隔ms"
msgid "Noise"
msgstr "噪声"
msgid "UDP noise, Under some circumstances it can bypass some UDP based protocol restrictions."
msgstr "UDP 噪声,在某些情况下可以绕过一些针对 UDP 协议的限制。"
msgid "To send noise packets, select \"Noise\" in Xray Settings."
msgstr "在 Xray 设置中勾选 “噪声” 以发送噪声包。"
msgid "Xray Noise Packets"
msgstr "Xray 噪声数据包"
msgid "Packet"
msgstr "数据包"
msgid "Delay (ms)"
msgstr "延迟ms"
msgid "If is domain name, The requested domain name will be resolved to IP before connect." msgid "If is domain name, The requested domain name will be resolved to IP before connect."
msgstr "如果是域名,域名将在请求发出之前解析为 IP。" msgstr "如果是域名,域名将在请求发出之前解析为 IP。"