update 2023-09-01 09:14:49
This commit is contained in:
parent
bc8e7d497d
commit
9c8669400f
|
@ -127,30 +127,33 @@ o:depends("ipv6_tproxy", true)
|
|||
o.default = 0
|
||||
|
||||
if has_v2ray or has_xray then
|
||||
o = s:option(Flag, "sniffing", translate("Sniffing (V2Ray/Xray)"), translate("When using the V2ray/Xray shunt, must be enabled, otherwise the shunt will invalid."))
|
||||
s = m:section(TypedSection, "global_xray", "V2Ray/Xray " .. translate("Settings"))
|
||||
s.anonymous = true
|
||||
s.addremove = false
|
||||
|
||||
o = s:option(Flag, "sniffing", translate("Sniffing"), translate("When using the shunt, must be enabled, otherwise the shunt will invalid."))
|
||||
o.default = 1
|
||||
o.rmempty = false
|
||||
|
||||
if has_xray then
|
||||
route_only = s:option(Flag, "route_only", translate("Sniffing Route Only (Xray)"), translate("When enabled, the server not will resolve the domain name again."))
|
||||
route_only.default = 0
|
||||
route_only:depends("sniffing", true)
|
||||
o = s:option(Flag, "route_only", translate("Sniffing Route Only"))
|
||||
o.default = 0
|
||||
o:depends("sniffing", true)
|
||||
|
||||
local domains_excluded = string.format("/usr/share/%s/domains_excluded", appname)
|
||||
o = s:option(TextValue, "no_sniffing_hosts", translate("No Sniffing Lists"), translate("Hosts added into No Sniffing Lists will not resolve again on server (Xray only)."))
|
||||
o = s:option(TextValue, "no_sniffing_hosts", translate("No Sniffing Lists"), translate("Hosts added into No Sniffing Lists will not resolve again on server."))
|
||||
o.rows = 15
|
||||
o.wrap = "off"
|
||||
o.cfgvalue = function(self, section) return fs.readfile(domains_excluded) or "" end
|
||||
o.write = function(self, section, value) fs.writefile(domains_excluded, value:gsub("\r\n", "\n")) end
|
||||
o.remove = function(self, section, value)
|
||||
if route_only:formvalue(section) == "0" then
|
||||
if s.fields["route_only"]:formvalue(section) == "0" then
|
||||
fs.writefile(domains_excluded, "")
|
||||
end
|
||||
end
|
||||
o:depends({sniffing = true, route_only = false})
|
||||
|
||||
o = s:option(Value, "buffer_size", translate("Buffer Size (Xray)"), translate("Buffer size for every connection (kB)"))
|
||||
o.rmempty = true
|
||||
o = s:option(Value, "buffer_size", translate("Buffer Size"), translate("Buffer size for every connection (kB)"))
|
||||
o.datatype = "uinteger"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,6 +6,8 @@ if not api.is_finded("brook") then
|
|||
return
|
||||
end
|
||||
|
||||
local type_name = "Brook"
|
||||
|
||||
local option_prefix = "brook_"
|
||||
|
||||
local function option_name(name)
|
||||
|
@ -18,48 +20,59 @@ local function rm_prefix_cfgvalue(self, section)
|
|||
end
|
||||
end
|
||||
local function rm_prefix_write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:set(section, self.option:sub(1 + #option_prefix), value)
|
||||
end
|
||||
end
|
||||
end
|
||||
local function rm_prefix_remove(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:del(section, self.option:sub(1 + #option_prefix))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- [[ Brook ]]
|
||||
|
||||
s.fields["type"]:value("Brook", translate("Brook"))
|
||||
s.fields["type"]:value(type_name, translate("Brook"))
|
||||
|
||||
o = s:option(Value, "brook_port", translate("Listen Port"))
|
||||
o = s:option(Value, option_name("port"), translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(ListValue, "brook_protocol", translate("Protocol"))
|
||||
o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
|
||||
o:value("server", "Brook")
|
||||
o:value("wsserver", "WebSocket")
|
||||
|
||||
--o = s:option(Flag, "brook_tls", translate("Use TLS"))
|
||||
--o:depends({ brook_protocol = "wsserver" })
|
||||
--o = s:option(Flag, option_name("tls"), translate("Use TLS"))
|
||||
--o:depends({ [option_name("protocol")] = "wsserver" })
|
||||
|
||||
o = s:option(Value, "brook_password", translate("Password"))
|
||||
o = s:option(Value, option_name("password"), translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(Value, "brook_ws_path", translate("WebSocket Path"))
|
||||
o:depends({ brook_protocol = "wsserver" })
|
||||
o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
|
||||
o:depends({ [option_name("protocol")] = "wsserver" })
|
||||
|
||||
o = s:option(Flag, "brook_log", translate("Log"))
|
||||
o = s:option(Flag, option_name("log"), translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
for key, value in pairs(s.fields) do
|
||||
if key:find(option_prefix) == 1 then
|
||||
if not s.fields[key].not_rewrite then
|
||||
s.fields[key].cfgvalue = rm_prefix_cfgvalue
|
||||
s.fields[key].write = rm_prefix_write
|
||||
s.fields[key].remove = rm_prefix_remove
|
||||
end
|
||||
|
||||
local deps = s.fields[key].deps
|
||||
if #deps > 0 then
|
||||
for index, value in ipairs(deps) do
|
||||
deps[index]["type"] = "Brook"
|
||||
deps[index]["type"] = type_name
|
||||
end
|
||||
else
|
||||
s.fields[key]:depends({ type = "Brook" })
|
||||
s.fields[key]:depends({ type = type_name })
|
||||
end
|
||||
end
|
||||
end
|
|
@ -6,6 +6,8 @@ if not api.is_finded("hysteria") then
|
|||
return
|
||||
end
|
||||
|
||||
local type_name = "Hysteria"
|
||||
|
||||
local option_prefix = "hysteria_"
|
||||
|
||||
local function option_name(name)
|
||||
|
@ -18,67 +20,76 @@ local function rm_prefix_cfgvalue(self, section)
|
|||
end
|
||||
end
|
||||
local function rm_prefix_write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:set(section, self.option:sub(1 + #option_prefix), value)
|
||||
end
|
||||
end
|
||||
end
|
||||
local function rm_prefix_remove(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:del(section, self.option:sub(1 + #option_prefix))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- [[ Hysteria ]]
|
||||
|
||||
s.fields["type"]:value("Hysteria", translate("Hysteria"))
|
||||
s.fields["type"]:value(type_name, translate("Hysteria"))
|
||||
|
||||
o = s:option(Value, "hysteria_port", translate("Listen Port"))
|
||||
o = s:option(Value, option_name("port"), translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(ListValue, "hysteria_protocol", translate("Protocol"))
|
||||
o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
|
||||
o:value("udp", "UDP")
|
||||
o:value("faketcp", "faketcp")
|
||||
o:value("wechat-video", "wechat-video")
|
||||
|
||||
o = s:option(Value, "hysteria_obfs", translate("Obfs Password"))
|
||||
o = s:option(Value, option_name("obfs"), translate("Obfs Password"))
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(ListValue, "hysteria_auth_type", translate("Auth Type"))
|
||||
o = s:option(ListValue, option_name("auth_type"), translate("Auth Type"))
|
||||
o:value("disable", translate("Disable"))
|
||||
o:value("string", translate("STRING"))
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Value, "hysteria_auth_password", translate("Auth Password"))
|
||||
o = s:option(Value, option_name("auth_password"), translate("Auth Password"))
|
||||
o.password = true
|
||||
o:depends({ hysteria_auth_type = "string" })
|
||||
o:depends({ [option_name("auth_type")] = "string" })
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Value, "hysteria_alpn", translate("QUIC TLS ALPN"))
|
||||
o = s:option(Value, option_name("alpn"), translate("QUIC TLS ALPN"))
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Flag, "hysteria_udp", translate("UDP"))
|
||||
o = s:option(Flag, option_name("udp"), translate("UDP"))
|
||||
o.default = "1"
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Value, "hysteria_up_mbps", translate("Max upload Mbps"))
|
||||
o = s:option(Value, option_name("up_mbps"), translate("Max upload Mbps"))
|
||||
o.default = "10"
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Value, "hysteria_down_mbps", translate("Max download Mbps"))
|
||||
o = s:option(Value, option_name("down_mbps"), translate("Max download Mbps"))
|
||||
o.default = "50"
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Value, "hysteria_recv_window_conn", translate("QUIC stream receive window"))
|
||||
o = s:option(Value, option_name("recv_window_conn"), translate("QUIC stream receive window"))
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Value, "hysteria_recv_window", translate("QUIC connection receive window"))
|
||||
o = s:option(Value, option_name("recv_window"), translate("QUIC connection receive window"))
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Flag, "hysteria_disable_mtu_discovery", translate("Disable MTU detection"))
|
||||
o = s:option(Flag, option_name("disable_mtu_discovery"), translate("Disable MTU detection"))
|
||||
o.not_rewrite = true
|
||||
|
||||
o = s:option(Flag, "hysteria_tls", translate("TLS"))
|
||||
o = s:option(Flag, option_name("tls"), translate("TLS"))
|
||||
o.default = 0
|
||||
o.validate = function(self, value, t)
|
||||
if value then
|
||||
if value == "1" then
|
||||
local ca = s.fields["hysteria_tls_certificateFile"]:formvalue(t) or ""
|
||||
local key = s.fields["hysteria_tls_keyFile"]:formvalue(t) or ""
|
||||
local ca = s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
|
||||
local key = s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
|
||||
if ca == "" or key == "" then
|
||||
return nil, translate("Public key and Private key path can not be empty!")
|
||||
end
|
||||
|
@ -87,9 +98,9 @@ o.validate = function(self, value, t)
|
|||
end
|
||||
end
|
||||
|
||||
o = s:option(FileUpload, "hysteria_tls_certificateFile", translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
|
||||
o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
|
||||
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
|
||||
o:depends({ hysteria_tls = true })
|
||||
o:depends({ [option_name("tls")] = true })
|
||||
o.validate = function(self, value, t)
|
||||
if value and value ~= "" then
|
||||
if not nixio.fs.access(value) then
|
||||
|
@ -101,9 +112,9 @@ o.validate = function(self, value, t)
|
|||
return nil
|
||||
end
|
||||
|
||||
o = s:option(FileUpload, "hysteria_tls_keyFile", translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
|
||||
o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
|
||||
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
|
||||
o:depends({ hysteria_tls = true })
|
||||
o:depends({ [option_name("tls")] = true })
|
||||
o.validate = function(self, value, t)
|
||||
if value and value ~= "" then
|
||||
if not nixio.fs.access(value) then
|
||||
|
@ -115,23 +126,25 @@ o.validate = function(self, value, t)
|
|||
return nil
|
||||
end
|
||||
|
||||
o = s:option(Flag, "hysteria_log", translate("Log"))
|
||||
o = s:option(Flag, option_name("log"), translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
for key, value in pairs(s.fields) do
|
||||
if key:find(option_prefix) == 1 then
|
||||
if not s.fields[key].not_rewrite then
|
||||
s.fields[key].cfgvalue = rm_prefix_cfgvalue
|
||||
s.fields[key].write = rm_prefix_write
|
||||
s.fields[key].remove = rm_prefix_remove
|
||||
end
|
||||
|
||||
local deps = s.fields[key].deps
|
||||
if #deps > 0 then
|
||||
for index, value in ipairs(deps) do
|
||||
deps[index]["type"] = "Hysteria"
|
||||
deps[index]["type"] = type_name
|
||||
end
|
||||
else
|
||||
s.fields[key]:depends({ type = "Hysteria" })
|
||||
s.fields[key]:depends({ type = type_name })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,10 +18,19 @@ local function rm_prefix_cfgvalue(self, section)
|
|||
end
|
||||
end
|
||||
local function rm_prefix_write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:set(section, self.option:sub(1 + #option_prefix), value)
|
||||
end
|
||||
end
|
||||
end
|
||||
local function rm_prefix_remove(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == "Xray" or s.fields["type"]:formvalue(arg[1]) == "V2ray" then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:del(section, self.option:sub(1 + #option_prefix))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function add_xray_depends(o, field, value)
|
||||
local deps = { type = "Xray" }
|
||||
|
@ -51,11 +60,11 @@ local function add_v2ray_depends(o, field, value)
|
|||
o:depends(deps)
|
||||
end
|
||||
|
||||
local v_ss_encrypt_method_list = {
|
||||
local v_ss_method_list = {
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305"
|
||||
}
|
||||
|
||||
local x_ss_encrypt_method_list = {
|
||||
local x_ss_method_list = {
|
||||
"aes-128-gcm", "aes-256-gcm", "chacha20-poly1305", "xchacha20-poly1305", "2022-blake3-aes-128-gcm", "2022-blake3-aes-256-gcm", "2022-blake3-chacha20-poly1305"
|
||||
}
|
||||
|
||||
|
@ -72,7 +81,7 @@ if api.is_finded("xray") then
|
|||
s.fields["type"]:value("Xray", translate("Xray"))
|
||||
end
|
||||
|
||||
o = s:option(ListValue, "xray_protocol", translate("Protocol"))
|
||||
o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
|
||||
o:value("vmess", "Vmess")
|
||||
o:value("vless", "VLESS")
|
||||
o:value("http", "HTTP")
|
||||
|
@ -82,17 +91,13 @@ o:value("trojan", "Trojan")
|
|||
o:value("dokodemo-door", "dokodemo-door")
|
||||
add_xray_depends(o)
|
||||
add_v2ray_depends(o)
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
|
||||
o = s:option(Value, "xray_port", translate("Listen Port"))
|
||||
o = s:option(Value, option_name("port"), translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
add_xray_depends(o)
|
||||
add_v2ray_depends(o)
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
|
||||
o = s:option(Flag, "xray_auth", translate("Auth"))
|
||||
o = s:option(Flag, option_name("auth"), translate("Auth"))
|
||||
o.validate = function(self, value, t)
|
||||
if value and value == "1" then
|
||||
local user_v = s.fields["xray_username"]:formvalue(t) or ""
|
||||
|
@ -103,107 +108,105 @@ o.validate = function(self, value, t)
|
|||
end
|
||||
return value
|
||||
end
|
||||
add_xray_depends(o, { xray_protocol = "socks" })
|
||||
add_xray_depends(o, { xray_protocol = "http" })
|
||||
add_v2ray_depends(o, { xray_protocol = "socks" })
|
||||
add_v2ray_depends(o, { xray_protocol = "http" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
add_xray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "http" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "http" })
|
||||
|
||||
o = s:option(Value, "xray_username", translate("Username"))
|
||||
add_xray_depends(o, { xray_auth = true })
|
||||
add_v2ray_depends(o, { xray_auth = true })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
o = s:option(Value, option_name("username"), translate("Username"))
|
||||
add_xray_depends(o, { [option_name("auth")] = true })
|
||||
add_v2ray_depends(o, { [option_name("auth")] = true })
|
||||
|
||||
o = s:option(Value, "xray_password", translate("Password"))
|
||||
o = s:option(Value, option_name("password"), translate("Password"))
|
||||
o.password = true
|
||||
add_xray_depends(o, { xray_auth = true })
|
||||
add_v2ray_depends(o, { xray_auth = true })
|
||||
add_xray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_v2ray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
add_xray_depends(o, { [option_name("auth")] = true })
|
||||
add_v2ray_depends(o, { [option_name("auth")] = true })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
|
||||
o = s:option(ListValue, "d_protocol", translate("Destination protocol"))
|
||||
o = s:option(ListValue, option_name("d_protocol"), translate("Destination protocol"))
|
||||
o:value("tcp", "TCP")
|
||||
o:value("udp", "UDP")
|
||||
o:value("tcp,udp", "TCP,UDP")
|
||||
add_v2ray_depends(o, { xray_protocol = "dokodemo-door" })
|
||||
add_xray_depends(o, { xray_protocol = "dokodemo-door" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
|
||||
|
||||
o = s:option(Value, "d_address", translate("Destination address"))
|
||||
add_v2ray_depends(o, { xray_protocol = "dokodemo-door" })
|
||||
add_xray_depends(o, { xray_protocol = "dokodemo-door" })
|
||||
o = s:option(Value, option_name("d_address"), translate("Destination address"))
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
|
||||
|
||||
o = s:option(Value, "d_port", translate("Destination port"))
|
||||
o = s:option(Value, option_name("d_port"), translate("Destination port"))
|
||||
o.datatype = "port"
|
||||
add_v2ray_depends(o, { xray_protocol = "dokodemo-door" })
|
||||
add_xray_depends(o, { xray_protocol = "dokodemo-door" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "dokodemo-door" })
|
||||
|
||||
o = s:option(Value, "decryption", translate("Encrypt Method"))
|
||||
o = s:option(Value, option_name("decryption"), translate("Encrypt Method"))
|
||||
o.default = "none"
|
||||
add_v2ray_depends(o, { xray_protocol = "vless" })
|
||||
add_xray_depends(o, { xray_protocol = "vless" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
|
||||
o = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(v_ss_encrypt_method_list) do o:value(t) end
|
||||
add_v2ray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
o = s:option(ListValue, option_name("v_ss_method"), translate("Encrypt Method"))
|
||||
o.not_rewrite = true
|
||||
for a, t in ipairs(v_ss_method_list) do o:value(t) end
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
function o.cfgvalue(self, section)
|
||||
return m:get(section, "method")
|
||||
end
|
||||
function o.write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == "V2ray" then
|
||||
m:set(section, "method", value)
|
||||
end
|
||||
end
|
||||
|
||||
o = s:option(ListValue, "x_ss_encrypt_method", translate("Encrypt Method"))
|
||||
for a, t in ipairs(x_ss_encrypt_method_list) do o:value(t) end
|
||||
add_xray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
o = s:option(ListValue, option_name("x_ss_method"), translate("Encrypt Method"))
|
||||
o.not_rewrite = true
|
||||
for a, t in ipairs(x_ss_method_list) do o:value(t) end
|
||||
add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
function o.cfgvalue(self, section)
|
||||
return m:get(section, "method")
|
||||
end
|
||||
function o.write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == "Xray" then
|
||||
m:set(section, "method", value)
|
||||
end
|
||||
end
|
||||
|
||||
o = s:option(Flag, "iv_check", translate("IV Check"))
|
||||
add_v2ray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_xray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
o = s:option(Flag, option_name("iv_check"), translate("IV Check"))
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
|
||||
o = s:option(ListValue, "ss_network", translate("Transport"))
|
||||
o = s:option(ListValue, option_name("ss_network"), translate("Transport"))
|
||||
o.default = "tcp,udp"
|
||||
o:value("tcp", "TCP")
|
||||
o:value("udp", "UDP")
|
||||
o:value("tcp,udp", "TCP,UDP")
|
||||
add_v2ray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_xray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
|
||||
o = s:option(Flag, "udp_forward", translate("UDP Forward"))
|
||||
o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
add_v2ray_depends(o, { xray_protocol = "socks" })
|
||||
add_xray_depends(o, { xray_protocol = "socks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
|
||||
o = s:option(DynamicList, "xray_uuid", translate("ID") .. "/" .. translate("Password"))
|
||||
o = s:option(DynamicList, option_name("uuid"), translate("ID") .. "/" .. translate("Password"))
|
||||
for i = 1, 3 do
|
||||
o:value(api.gen_uuid(1))
|
||||
end
|
||||
add_v2ray_depends(o, { xray_protocol = "vmess" })
|
||||
add_v2ray_depends(o, { xray_protocol = "vless" })
|
||||
add_v2ray_depends(o, { xray_protocol = "trojan" })
|
||||
add_xray_depends(o, { xray_protocol = "vmess" })
|
||||
add_xray_depends(o, { xray_protocol = "vless" })
|
||||
add_xray_depends(o, { xray_protocol = "trojan" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "trojan" })
|
||||
|
||||
o = s:option(Flag, "xray_tls", translate("TLS"))
|
||||
o = s:option(Flag, option_name("tls"), translate("TLS"))
|
||||
o.default = 0
|
||||
o.validate = function(self, value, t)
|
||||
if value then
|
||||
if value == "1" then
|
||||
local ca = s.fields["xray_tls_certificateFile"]:formvalue(t) or ""
|
||||
local key = s.fields["xray_tls_keyFile"]:formvalue(t) or ""
|
||||
local ca = s.fields[option_name("tls_certificateFile")]:formvalue(t) or ""
|
||||
local key = s.fields[option_name("tls_keyFile")]:formvalue(t) or ""
|
||||
if ca == "" or key == "" then
|
||||
return nil, translate("Public key and Private key path can not be empty!")
|
||||
end
|
||||
|
@ -211,48 +214,44 @@ o.validate = function(self, value, t)
|
|||
return value
|
||||
end
|
||||
end
|
||||
add_v2ray_depends(o, { xray_protocol = "vmess" })
|
||||
add_v2ray_depends(o, { xray_protocol = "vless" })
|
||||
add_v2ray_depends(o, { xray_protocol = "socks" })
|
||||
add_v2ray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_v2ray_depends(o, { xray_protocol = "trojan" })
|
||||
add_xray_depends(o, { xray_protocol = "vmess" })
|
||||
add_xray_depends(o, { xray_protocol = "vless" })
|
||||
add_xray_depends(o, { xray_protocol = "socks" })
|
||||
add_xray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_xray_depends(o, { xray_protocol = "trojan" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "trojan" })
|
||||
|
||||
o = s:option(Value, "tlsflow", translate("flow"))
|
||||
o = s:option(Value, option_name("tlsflow"), translate("flow"))
|
||||
o.default = ""
|
||||
o:value("", translate("Disable"))
|
||||
o:value("xtls-rprx-vision")
|
||||
o:value("xtls-rprx-vision-udp443")
|
||||
add_xray_depends(o, { xray_protocol = "vless", xray_tls = true })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("tls")] = true })
|
||||
|
||||
o = s:option(ListValue, "alpn", translate("alpn"))
|
||||
o = s:option(ListValue, option_name("alpn"), translate("alpn"))
|
||||
o.default = "h2,http/1.1"
|
||||
o:value("h2,http/1.1")
|
||||
o:value("h2")
|
||||
o:value("http/1.1")
|
||||
add_v2ray_depends(o, { xray_tls = true })
|
||||
add_xray_depends(o, { xray_tls = true })
|
||||
add_v2ray_depends(o, { [option_name("tls")] = true })
|
||||
add_xray_depends(o, { [option_name("tls")] = true })
|
||||
|
||||
-- o = s:option(Value, "minversion", translate("minversion"))
|
||||
-- o = s:option(Value, option_name("minversion"), translate("minversion"))
|
||||
-- o.default = "1.3"
|
||||
-- o:value("1.3")
|
||||
--add_v2ray_depends(o, { xray_tls = true })
|
||||
--add_xray_depends(o, { xray_tls = true })
|
||||
--add_v2ray_depends(o, { [option_name("tls")] = true })
|
||||
--add_xray_depends(o, { [option_name("tls")] = true })
|
||||
|
||||
-- [[ TLS部分 ]] --
|
||||
|
||||
o = s:option(FileUpload, "xray_tls_certificateFile", translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
|
||||
o = s:option(FileUpload, option_name("tls_certificateFile"), translate("Public key absolute path"), translate("as:") .. "/etc/ssl/fullchain.pem")
|
||||
o.default = m:get(s.section, "tls_certificateFile") or "/etc/config/ssl/" .. arg[1] .. ".pem"
|
||||
add_v2ray_depends(o, { xray_tls = true })
|
||||
add_xray_depends(o, { xray_tls = true })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
add_v2ray_depends(o, { [option_name("tls")] = true })
|
||||
add_xray_depends(o, { [option_name("tls")] = true })
|
||||
o.validate = function(self, value, t)
|
||||
if value and value ~= "" then
|
||||
if not nixio.fs.access(value) then
|
||||
|
@ -264,12 +263,10 @@ o.validate = function(self, value, t)
|
|||
return nil
|
||||
end
|
||||
|
||||
o = s:option(FileUpload, "xray_tls_keyFile", translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
|
||||
o = s:option(FileUpload, option_name("tls_keyFile"), translate("Private key absolute path"), translate("as:") .. "/etc/ssl/private.key")
|
||||
o.default = m:get(s.section, "tls_keyFile") or "/etc/config/ssl/" .. arg[1] .. ".key"
|
||||
add_v2ray_depends(o, { xray_tls = true })
|
||||
add_xray_depends(o, { xray_tls = true })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
add_v2ray_depends(o, { [option_name("tls")] = true })
|
||||
add_xray_depends(o, { [option_name("tls")] = true })
|
||||
o.validate = function(self, value, t)
|
||||
if value and value ~= "" then
|
||||
if not nixio.fs.access(value) then
|
||||
|
@ -281,7 +278,7 @@ o.validate = function(self, value, t)
|
|||
return nil
|
||||
end
|
||||
|
||||
o = s:option(ListValue, "transport", translate("Transport"))
|
||||
o = s:option(ListValue, option_name("transport"), translate("Transport"))
|
||||
o:value("tcp", "TCP")
|
||||
o:value("mkcp", "mKCP")
|
||||
o:value("ws", "WebSocket")
|
||||
|
@ -289,179 +286,171 @@ o:value("h2", "HTTP/2")
|
|||
o:value("ds", "DomainSocket")
|
||||
o:value("quic", "QUIC")
|
||||
o:value("grpc", "gRPC")
|
||||
add_v2ray_depends(o, { xray_protocol = "vmess" })
|
||||
add_v2ray_depends(o, { xray_protocol = "vless" })
|
||||
add_v2ray_depends(o, { xray_protocol = "socks" })
|
||||
add_v2ray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_v2ray_depends(o, { xray_protocol = "trojan" })
|
||||
add_xray_depends(o, { xray_protocol = "vmess" })
|
||||
add_xray_depends(o, { xray_protocol = "vless" })
|
||||
add_xray_depends(o, { xray_protocol = "socks" })
|
||||
add_xray_depends(o, { xray_protocol = "shadowsocks" })
|
||||
add_xray_depends(o, { xray_protocol = "trojan" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "trojan" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vmess" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "socks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "shadowsocks" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "trojan" })
|
||||
|
||||
-- [[ WebSocket部分 ]]--
|
||||
|
||||
o = s:option(Value, "xray_ws_host", translate("WebSocket Host"))
|
||||
add_v2ray_depends(o, { transport = "ws" })
|
||||
add_xray_depends(o, { transport = "ws" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
o = s:option(Value, option_name("ws_host"), translate("WebSocket Host"))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "ws" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "ws" })
|
||||
|
||||
o = s:option(Value, "xray_ws_path", translate("WebSocket Path"))
|
||||
add_v2ray_depends(o, { transport = "ws" })
|
||||
add_xray_depends(o, { transport = "ws" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
o = s:option(Value, option_name("ws_path"), translate("WebSocket Path"))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "ws" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "ws" })
|
||||
|
||||
-- [[ HTTP/2部分 ]]--
|
||||
|
||||
o = s:option(Value, "xray_h2_host", translate("HTTP/2 Host"))
|
||||
add_v2ray_depends(o, { transport = "h2" })
|
||||
add_xray_depends(o, { transport = "h2" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
o = s:option(Value, option_name("h2_host"), translate("HTTP/2 Host"))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "h2" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "h2" })
|
||||
|
||||
o = s:option(Value, "xray_h2_path", translate("HTTP/2 Path"))
|
||||
add_v2ray_depends(o, { transport = "h2" })
|
||||
add_xray_depends(o, { transport = "h2" })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
o = s:option(Value, option_name("h2_path"), translate("HTTP/2 Path"))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "h2" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "h2" })
|
||||
|
||||
-- [[ TCP部分 ]]--
|
||||
|
||||
-- TCP伪装
|
||||
o = s:option(ListValue, "tcp_guise", translate("Camouflage Type"))
|
||||
o = s:option(ListValue, option_name("tcp_guise"), translate("Camouflage Type"))
|
||||
o:value("none", "none")
|
||||
o:value("http", "http")
|
||||
add_v2ray_depends(o, { transport = "tcp" })
|
||||
add_xray_depends(o, { transport = "tcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "tcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "tcp" })
|
||||
|
||||
-- HTTP域名
|
||||
o = s:option(DynamicList, "tcp_guise_http_host", translate("HTTP Host"))
|
||||
add_v2ray_depends(o, { tcp_guise = "http" })
|
||||
add_xray_depends(o, { tcp_guise = "http" })
|
||||
o = s:option(DynamicList, option_name("tcp_guise_http_host"), translate("HTTP Host"))
|
||||
add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" })
|
||||
add_xray_depends(o, { [option_name("tcp_guise")] = "http" })
|
||||
|
||||
-- HTTP路径
|
||||
o = s:option(DynamicList, "tcp_guise_http_path", translate("HTTP Path"))
|
||||
add_v2ray_depends(o, { tcp_guise = "http" })
|
||||
add_xray_depends(o, { tcp_guise = "http" })
|
||||
o = s:option(DynamicList, option_name("tcp_guise_http_path"), translate("HTTP Path"))
|
||||
add_v2ray_depends(o, { [option_name("tcp_guise")] = "http" })
|
||||
add_xray_depends(o, { [option_name("tcp_guise")] = "http" })
|
||||
|
||||
-- [[ mKCP部分 ]]--
|
||||
|
||||
o = s:option(ListValue, "mkcp_guise", translate("Camouflage Type"), translate('<br />none: default, no masquerade, data sent is packets with no characteristics.<br />srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).<br />utp: packets disguised as uTP will be recognized as bittorrent downloaded data.<br />wechat-video: packets disguised as WeChat video calls.<br />dtls: disguised as DTLS 1.2 packet.<br />wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
|
||||
o = s:option(ListValue, option_name("mkcp_guise"), translate("Camouflage Type"), translate('<br />none: default, no masquerade, data sent is packets with no characteristics.<br />srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).<br />utp: packets disguised as uTP will be recognized as bittorrent downloaded data.<br />wechat-video: packets disguised as WeChat video calls.<br />dtls: disguised as DTLS 1.2 packet.<br />wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)'))
|
||||
for a, t in ipairs(header_type_list) do o:value(t) end
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Value, "mkcp_mtu", translate("KCP MTU"))
|
||||
o = s:option(Value, option_name("mkcp_mtu"), translate("KCP MTU"))
|
||||
o.default = "1350"
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Value, "mkcp_tti", translate("KCP TTI"))
|
||||
o = s:option(Value, option_name("mkcp_tti"), translate("KCP TTI"))
|
||||
o.default = "20"
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Value, "mkcp_uplinkCapacity", translate("KCP uplinkCapacity"))
|
||||
o = s:option(Value, option_name("mkcp_uplinkCapacity"), translate("KCP uplinkCapacity"))
|
||||
o.default = "5"
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Value, "mkcp_downlinkCapacity", translate("KCP downlinkCapacity"))
|
||||
o = s:option(Value, option_name("mkcp_downlinkCapacity"), translate("KCP downlinkCapacity"))
|
||||
o.default = "20"
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Flag, "mkcp_congestion", translate("KCP Congestion"))
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
o = s:option(Flag, option_name("mkcp_congestion"), translate("KCP Congestion"))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Value, "mkcp_readBufferSize", translate("KCP readBufferSize"))
|
||||
o = s:option(Value, option_name("mkcp_readBufferSize"), translate("KCP readBufferSize"))
|
||||
o.default = "1"
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Value, "mkcp_writeBufferSize", translate("KCP writeBufferSize"))
|
||||
o = s:option(Value, option_name("mkcp_writeBufferSize"), translate("KCP writeBufferSize"))
|
||||
o.default = "1"
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
o = s:option(Value, "mkcp_seed", translate("KCP Seed"))
|
||||
add_v2ray_depends(o, { transport = "mkcp" })
|
||||
add_xray_depends(o, { transport = "mkcp" })
|
||||
o = s:option(Value, option_name("mkcp_seed"), translate("KCP Seed"))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "mkcp" })
|
||||
|
||||
-- [[ DomainSocket部分 ]]--
|
||||
|
||||
o = s:option(Value, "ds_path", "Path", translate("A legal file path. This file must not exist before running."))
|
||||
add_v2ray_depends(o, { transport = "ds" })
|
||||
add_xray_depends(o, { transport = "ds" })
|
||||
o = s:option(Value, option_name("ds_path"), "Path", translate("A legal file path. This file must not exist before running."))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "ds" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "ds" })
|
||||
|
||||
-- [[ QUIC部分 ]]--
|
||||
o = s:option(ListValue, "quic_security", translate("Encrypt Method"))
|
||||
o = s:option(ListValue, option_name("quic_security"), translate("Encrypt Method"))
|
||||
o:value("none")
|
||||
o:value("aes-128-gcm")
|
||||
o:value("chacha20-poly1305")
|
||||
add_v2ray_depends(o, { transport = "quic" })
|
||||
add_xray_depends(o, { transport = "quic" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "quic" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "quic" })
|
||||
|
||||
o = s:option(Value, "quic_key", translate("Encrypt Method") .. translate("Key"))
|
||||
add_v2ray_depends(o, { transport = "quic" })
|
||||
add_xray_depends(o, { transport = "quic" })
|
||||
o = s:option(Value, option_name("quic_key"), translate("Encrypt Method") .. translate("Key"))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "quic" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "quic" })
|
||||
|
||||
o = s:option(ListValue, "quic_guise", translate("Camouflage Type"))
|
||||
o = s:option(ListValue, option_name("quic_guise"), translate("Camouflage Type"))
|
||||
for a, t in ipairs(header_type_list) do o:value(t) end
|
||||
add_v2ray_depends(o, { transport = "quic" })
|
||||
add_xray_depends(o, { transport = "quic" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "quic" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "quic" })
|
||||
|
||||
-- [[ gRPC部分 ]]--
|
||||
o = s:option(Value, "grpc_serviceName", "ServiceName")
|
||||
add_v2ray_depends(o, { transport = "grpc" })
|
||||
add_xray_depends(o, { transport = "grpc" })
|
||||
o = s:option(Value, option_name("grpc_serviceName"), "ServiceName")
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "grpc" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "grpc" })
|
||||
|
||||
o = s:option(Flag, "acceptProxyProtocol", translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
|
||||
add_v2ray_depends(o, { transport = "tcp" })
|
||||
add_v2ray_depends(o, { transport = "ws" })
|
||||
add_xray_depends(o, { transport = "tcp" })
|
||||
add_xray_depends(o, { transport = "ws" })
|
||||
o = s:option(Flag, option_name("acceptProxyProtocol"), translate("acceptProxyProtocol"), translate("Whether to receive PROXY protocol, when this node want to be fallback or forwarded by proxy, it must be enable, otherwise it cannot be used."))
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "tcp" })
|
||||
add_v2ray_depends(o, { [option_name("transport")] = "ws" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "tcp" })
|
||||
add_xray_depends(o, { [option_name("transport")] = "ws" })
|
||||
|
||||
-- [[ Fallback部分 ]]--
|
||||
o = s:option(Flag, "fallback", translate("Fallback"))
|
||||
add_v2ray_depends(o, { xray_protocol = "vless", transport = "tcp" })
|
||||
add_v2ray_depends(o, { xray_protocol = "trojan", transport = "tcp" })
|
||||
add_xray_depends(o, { xray_protocol = "vless", transport = "tcp" })
|
||||
add_xray_depends(o, { xray_protocol = "trojan", transport = "tcp" })
|
||||
o = s:option(Flag, option_name("fallback"), translate("Fallback"))
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" })
|
||||
add_v2ray_depends(o, { [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "vless", [option_name("transport")] = "tcp" })
|
||||
add_xray_depends(o, { [option_name("protocol")] = "trojan", [option_name("transport")] = "tcp" })
|
||||
|
||||
--[[
|
||||
o = s:option(Value, "fallback_alpn", "Fallback alpn")
|
||||
add_v2ray_depends(o, { fallback = true })
|
||||
add_xray_depends(o, { fallback = true })
|
||||
o = s:option(Value, option_name("fallback_alpn"), "Fallback alpn")
|
||||
add_v2ray_depends(o, { [option_name("fallback")] = true })
|
||||
add_xray_depends(o, { [option_name("fallback")] = true })
|
||||
|
||||
o = s:option(Value, "fallback_path", "Fallback path")
|
||||
add_v2ray_depends(o, { fallback = true })
|
||||
add_xray_depends(o, { fallback = true })
|
||||
o = s:option(Value, option_name("fallback_path"), "Fallback path")
|
||||
add_v2ray_depends(o, { [option_name("fallback")] = true })
|
||||
add_xray_depends(o, { [option_name("fallback")] = true })
|
||||
|
||||
o = s:option(Value, "fallback_dest", "Fallback dest")
|
||||
add_v2ray_depends(o, { fallback = true })
|
||||
add_xray_depends(o, { fallback = true })
|
||||
o = s:option(Value, option_name("fallback_dest"), "Fallback dest")
|
||||
add_v2ray_depends(o, { [option_name("fallback")] = true })
|
||||
add_xray_depends(o, { [option_name("fallback")] = true })
|
||||
|
||||
o = s:option(Value, "fallback_xver", "Fallback xver")
|
||||
o = s:option(Value, option_name("fallback_xver"), "Fallback xver")
|
||||
o.default = 0
|
||||
add_v2ray_depends(o, { fallback = true })
|
||||
add_xray_depends(o, { fallback = true })
|
||||
add_v2ray_depends(o, { [option_name("fallback")] = true })
|
||||
add_xray_depends(o, { [option_name("fallback")] = true })
|
||||
]]--
|
||||
|
||||
o = s:option(DynamicList, "fallback_list", "Fallback", translate("dest,path"))
|
||||
add_v2ray_depends(o, { fallback = true })
|
||||
add_xray_depends(o, { fallback = true })
|
||||
o = s:option(DynamicList, option_name("fallback_list"), "Fallback", translate("dest,path"))
|
||||
add_v2ray_depends(o, { [option_name("fallback")] = true })
|
||||
add_xray_depends(o, { [option_name("fallback")] = true })
|
||||
|
||||
o = s:option(Flag, "bind_local", translate("Bind Local"), translate("When selected, it can only be accessed locally, It is recommended to turn on when using reverse proxies or be fallback."))
|
||||
o = s:option(Flag, option_name("bind_local"), translate("Bind Local"), translate("When selected, it can only be accessed locally, It is recommended to turn on when using reverse proxies or be fallback."))
|
||||
o.default = "0"
|
||||
add_v2ray_depends(o)
|
||||
add_xray_depends(o)
|
||||
|
||||
o = s:option(Flag, "accept_lan", translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
|
||||
o = s:option(Flag, option_name("accept_lan"), translate("Accept LAN Access"), translate("When selected, it can accessed lan , this will not be safe!"))
|
||||
o.default = "0"
|
||||
add_v2ray_depends(o)
|
||||
add_xray_depends(o)
|
||||
|
@ -476,7 +465,7 @@ for k, e in ipairs(api.get_valid_nodes()) do
|
|||
end
|
||||
end
|
||||
|
||||
o = s:option(ListValue, "outbound_node", translate("outbound node"))
|
||||
o = s:option(ListValue, option_name("outbound_node"), translate("outbound node"))
|
||||
o:value("nil", translate("Close"))
|
||||
o:value("_socks", translate("Custom Socks"))
|
||||
o:value("_http", translate("Custom HTTP"))
|
||||
|
@ -486,51 +475,58 @@ o.default = "nil"
|
|||
add_v2ray_depends(o)
|
||||
add_xray_depends(o)
|
||||
|
||||
o = s:option(Value, "outbound_node_address", translate("Address (Support Domain Name)"))
|
||||
add_v2ray_depends(o, { outbound_node = "_socks"})
|
||||
add_v2ray_depends(o, { outbound_node = "_http"})
|
||||
add_xray_depends(o, { outbound_node = "_socks"})
|
||||
add_xray_depends(o, { outbound_node = "_http"})
|
||||
o = s:option(Value, option_name("outbound_node_address"), translate("Address (Support Domain Name)"))
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
|
||||
o = s:option(Value, "outbound_node_port", translate("Port"))
|
||||
o = s:option(Value, option_name("outbound_node_port"), translate("Port"))
|
||||
o.datatype = "port"
|
||||
add_v2ray_depends(o, { outbound_node = "_socks"})
|
||||
add_v2ray_depends(o, { outbound_node = "_http"})
|
||||
add_xray_depends(o, { outbound_node = "_socks"})
|
||||
add_xray_depends(o, { outbound_node = "_http"})
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
|
||||
o = s:option(Value, "outbound_node_username", translate("Username"))
|
||||
add_v2ray_depends(o, { outbound_node = "_socks"})
|
||||
add_v2ray_depends(o, { outbound_node = "_http"})
|
||||
add_xray_depends(o, { outbound_node = "_socks"})
|
||||
add_xray_depends(o, { outbound_node = "_http"})
|
||||
o = s:option(Value, option_name("outbound_node_username"), translate("Username"))
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
|
||||
o = s:option(Value, "outbound_node_password", translate("Password"))
|
||||
o = s:option(Value, option_name("outbound_node_password"), translate("Password"))
|
||||
o.password = true
|
||||
add_v2ray_depends(o, { outbound_node = "_socks"})
|
||||
add_v2ray_depends(o, { outbound_node = "_http"})
|
||||
add_xray_depends(o, { outbound_node = "_socks"})
|
||||
add_xray_depends(o, { outbound_node = "_http"})
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_socks"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_http"})
|
||||
|
||||
o = s:option(Value, "outbound_node_iface", translate("Interface"))
|
||||
o = s:option(Value, option_name("outbound_node_iface"), translate("Interface"))
|
||||
o.default = "eth1"
|
||||
add_v2ray_depends(o, { outbound_node = "_iface"})
|
||||
add_xray_depends(o, { outbound_node = "_iface"})
|
||||
add_v2ray_depends(o, { [option_name("outbound_node")] = "_iface"})
|
||||
add_xray_depends(o, { [option_name("outbound_node")] = "_iface"})
|
||||
|
||||
o = s:option(Flag, "xray_log", translate("Log"))
|
||||
o = s:option(Flag, option_name("log"), translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
add_v2ray_depends(o)
|
||||
add_xray_depends(o)
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
|
||||
o = s:option(ListValue, "xray_loglevel", translate("Log Level"))
|
||||
o = s:option(ListValue, option_name("loglevel"), translate("Log Level"))
|
||||
o.default = "warning"
|
||||
o:value("debug")
|
||||
o:value("info")
|
||||
o:value("warning")
|
||||
o:value("error")
|
||||
add_v2ray_depends(o, { xray_log = true })
|
||||
add_xray_depends(o, { xray_log = true })
|
||||
o.cfgvalue = rm_prefix_cfgvalue
|
||||
o.write = rm_prefix_write
|
||||
add_v2ray_depends(o, { [option_name("log")] = true })
|
||||
add_xray_depends(o, { [option_name("log")] = true })
|
||||
|
||||
for key, value in pairs(s.fields) do
|
||||
if key:find(option_prefix) == 1 then
|
||||
if not s.fields[key].not_rewrite then
|
||||
s.fields[key].cfgvalue = rm_prefix_cfgvalue
|
||||
s.fields[key].write = rm_prefix_write
|
||||
s.fields[key].remove = rm_prefix_remove
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,6 +6,8 @@ if not api.is_finded("ssserver") then
|
|||
return
|
||||
end
|
||||
|
||||
local type_name = "SS-Rust"
|
||||
|
||||
local option_prefix = "ssrust_"
|
||||
|
||||
local function option_name(name)
|
||||
|
@ -18,10 +20,19 @@ local function rm_prefix_cfgvalue(self, section)
|
|||
end
|
||||
end
|
||||
local function rm_prefix_write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:set(section, self.option:sub(1 + #option_prefix), value)
|
||||
end
|
||||
end
|
||||
end
|
||||
local function rm_prefix_remove(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:del(section, self.option:sub(1 + #option_prefix))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ssrust_encrypt_method_list = {
|
||||
"plain", "none",
|
||||
|
@ -31,41 +42,43 @@ local ssrust_encrypt_method_list = {
|
|||
|
||||
-- [[ Shadowsocks Rust ]]
|
||||
|
||||
s.fields["type"]:value("SS-Rust", translate("Shadowsocks Rust"))
|
||||
s.fields["type"]:value(type_name, translate("Shadowsocks Rust"))
|
||||
|
||||
o = s:option(Value, "ssrust_port", translate("Listen Port"))
|
||||
o = s:option(Value, option_name("port"), translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "ssrust_password", translate("Password"))
|
||||
o = s:option(Value, option_name("password"), translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(ListValue, "ssrust_method", translate("Encrypt Method"))
|
||||
o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssrust_encrypt_method_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "ssrust_timeout", translate("Connection Timeout"))
|
||||
o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
|
||||
o = s:option(Flag, "ssrust_tcp_fast_open", "TCP " .. translate("Fast Open"))
|
||||
o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
|
||||
o.default = "0"
|
||||
|
||||
o = s:option(Flag, "ssrust_log", translate("Log"))
|
||||
o = s:option(Flag, option_name("log"), translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
for key, value in pairs(s.fields) do
|
||||
if key:find(option_prefix) == 1 then
|
||||
if not s.fields[key].not_rewrite then
|
||||
s.fields[key].cfgvalue = rm_prefix_cfgvalue
|
||||
s.fields[key].write = rm_prefix_write
|
||||
s.fields[key].remove = rm_prefix_remove
|
||||
end
|
||||
|
||||
local deps = s.fields[key].deps
|
||||
if #deps > 0 then
|
||||
for index, value in ipairs(deps) do
|
||||
deps[index]["type"] = "SS-Rust"
|
||||
deps[index]["type"] = type_name
|
||||
end
|
||||
else
|
||||
s.fields[key]:depends({ type = "SS-Rust" })
|
||||
s.fields[key]:depends({ type = type_name })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,6 +6,8 @@ if not api.is_finded("ss-server") then
|
|||
return
|
||||
end
|
||||
|
||||
local type_name = "SS"
|
||||
|
||||
local option_prefix = "ss_"
|
||||
|
||||
local function option_name(name)
|
||||
|
@ -18,10 +20,19 @@ local function rm_prefix_cfgvalue(self, section)
|
|||
end
|
||||
end
|
||||
local function rm_prefix_write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:set(section, self.option:sub(1 + #option_prefix), value)
|
||||
end
|
||||
end
|
||||
end
|
||||
local function rm_prefix_remove(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:del(section, self.option:sub(1 + #option_prefix))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ss_encrypt_method_list = {
|
||||
"rc4-md5", "aes-128-cfb", "aes-192-cfb", "aes-256-cfb", "aes-128-ctr",
|
||||
|
@ -34,41 +45,43 @@ local ss_encrypt_method_list = {
|
|||
|
||||
-- [[ Shadowsocks ]]
|
||||
|
||||
s.fields["type"]:value("SS", translate("Shadowsocks"))
|
||||
s.fields["type"]:value(type_name, translate("Shadowsocks"))
|
||||
|
||||
o = s:option(Value, "ss_port", translate("Listen Port"))
|
||||
o = s:option(Value, option_name("port"), translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "ss_password", translate("Password"))
|
||||
o = s:option(Value, option_name("password"), translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(ListValue, "ss_method", translate("Encrypt Method"))
|
||||
o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
|
||||
for a, t in ipairs(ss_encrypt_method_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "ss_timeout", translate("Connection Timeout"))
|
||||
o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
|
||||
o = s:option(Flag, "ss_tcp_fast_open", "TCP " .. translate("Fast Open"))
|
||||
o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
|
||||
o.default = "0"
|
||||
|
||||
o = s:option(Flag, "ss_log", translate("Log"))
|
||||
o = s:option(Flag, option_name("log"), translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
for key, value in pairs(s.fields) do
|
||||
if key:find(option_prefix) == 1 then
|
||||
if not s.fields[key].not_rewrite then
|
||||
s.fields[key].cfgvalue = rm_prefix_cfgvalue
|
||||
s.fields[key].write = rm_prefix_write
|
||||
s.fields[key].remove = rm_prefix_remove
|
||||
end
|
||||
|
||||
local deps = s.fields[key].deps
|
||||
if #deps > 0 then
|
||||
for index, value in ipairs(deps) do
|
||||
deps[index]["type"] = "SS"
|
||||
deps[index]["type"] = type_name
|
||||
end
|
||||
else
|
||||
s.fields[key]:depends({ type = "SS" })
|
||||
s.fields[key]:depends({ type = type_name })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -6,6 +6,8 @@ if not api.is_finded("ssr-server") then
|
|||
return
|
||||
end
|
||||
|
||||
local type_name = "SSR"
|
||||
|
||||
local option_prefix = "ssr_"
|
||||
|
||||
local function option_name(name)
|
||||
|
@ -18,10 +20,19 @@ local function rm_prefix_cfgvalue(self, section)
|
|||
end
|
||||
end
|
||||
local function rm_prefix_write(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:set(section, self.option:sub(1 + #option_prefix), value)
|
||||
end
|
||||
end
|
||||
end
|
||||
local function rm_prefix_remove(self, section, value)
|
||||
if s.fields["type"]:formvalue(arg[1]) == type_name then
|
||||
if self.option:find(option_prefix) == 1 then
|
||||
m:del(section, self.option:sub(1 + #option_prefix))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ssr_encrypt_method_list = {
|
||||
"none", "table", "rc2-cfb", "rc4", "rc4-md5", "rc4-md5-6", "aes-128-cfb",
|
||||
|
@ -44,55 +55,57 @@ local ssr_obfs_list = {
|
|||
|
||||
-- [[ ShadowsocksR ]]
|
||||
|
||||
s.fields["type"]:value("SSR", translate("ShadowsocksR"))
|
||||
s.fields["type"]:value(type_name, translate("ShadowsocksR"))
|
||||
|
||||
o = s:option(Value, "ssr_port", translate("Listen Port"))
|
||||
o = s:option(Value, option_name("port"), translate("Listen Port"))
|
||||
o.datatype = "port"
|
||||
|
||||
o = s:option(Value, "ssr_password", translate("Password"))
|
||||
o = s:option(Value, option_name("password"), translate("Password"))
|
||||
o.password = true
|
||||
|
||||
o = s:option(ListValue, "ssr_method", translate("Encrypt Method"))
|
||||
o = s:option(ListValue, option_name("method"), translate("Encrypt Method"))
|
||||
for a, t in ipairs(ssr_encrypt_method_list) do o:value(t) end
|
||||
|
||||
o = s:option(ListValue, "ssr_protocol", translate("Protocol"))
|
||||
o = s:option(ListValue, option_name("protocol"), translate("Protocol"))
|
||||
for a, t in ipairs(ssr_protocol_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "ssr_protocol_param", translate("Protocol_param"))
|
||||
o = s:option(Value, option_name("protocol_param"), translate("Protocol_param"))
|
||||
|
||||
o = s:option(ListValue, "ssr_obfs", translate("Obfs"))
|
||||
o = s:option(ListValue, option_name("obfs"), translate("Obfs"))
|
||||
for a, t in ipairs(ssr_obfs_list) do o:value(t) end
|
||||
|
||||
o = s:option(Value, "ssr_obfs_param", translate("Obfs_param"))
|
||||
o = s:option(Value, option_name("obfs_param"), translate("Obfs_param"))
|
||||
|
||||
o = s:option(Value, "ssr_timeout", translate("Connection Timeout"))
|
||||
o = s:option(Value, option_name("timeout"), translate("Connection Timeout"))
|
||||
o.datatype = "uinteger"
|
||||
o.default = 300
|
||||
|
||||
o = s:option(Flag, "ssr_tcp_fast_open", "TCP " .. translate("Fast Open"))
|
||||
o = s:option(Flag, option_name("tcp_fast_open"), "TCP " .. translate("Fast Open"))
|
||||
o.default = "0"
|
||||
|
||||
o = s:option(Flag, "ssr_udp_forward", translate("UDP Forward"))
|
||||
o = s:option(Flag, option_name("udp_forward"), translate("UDP Forward"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Flag, "ssr_log", translate("Log"))
|
||||
o = s:option(Flag, option_name("log"), translate("Log"))
|
||||
o.default = "1"
|
||||
o.rmempty = false
|
||||
|
||||
for key, value in pairs(s.fields) do
|
||||
if key:find(option_prefix) == 1 then
|
||||
if not s.fields[key].not_rewrite then
|
||||
s.fields[key].cfgvalue = rm_prefix_cfgvalue
|
||||
s.fields[key].write = rm_prefix_write
|
||||
s.fields[key].remove = rm_prefix_remove
|
||||
end
|
||||
|
||||
local deps = s.fields[key].deps
|
||||
if #deps > 0 then
|
||||
for index, value in ipairs(deps) do
|
||||
deps[index]["type"] = "SSR"
|
||||
deps[index]["type"] = type_name
|
||||
end
|
||||
else
|
||||
s.fields[key]:depends({ type = "SSR" })
|
||||
s.fields[key]:depends({ type = type_name })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -562,17 +562,14 @@ msgstr "劫持ICMP (PING)"
|
|||
msgid "Hijacking ICMPv6 (IPv6 PING)"
|
||||
msgstr "劫持ICMPv6 (IPv6 PING)"
|
||||
|
||||
msgid "Sniffing (V2Ray/Xray)"
|
||||
msgstr "流量嗅探 (V2ray/Xray)"
|
||||
msgid "Sniffing"
|
||||
msgstr "流量嗅探"
|
||||
|
||||
msgid "When using the V2ray/Xray shunt, must be enabled, otherwise the shunt will invalid."
|
||||
msgstr "使用 V2Ray/Xray 分流时,必须启用,否则分流将无效。"
|
||||
msgid "When using the shunt, must be enabled, otherwise the shunt will invalid."
|
||||
msgstr "使用分流时,必须启用,否则分流将无效。"
|
||||
|
||||
msgid "Sniffing Route Only (Xray)"
|
||||
msgstr "流量嗅探只供路由使用 (Xray)"
|
||||
|
||||
msgid "When enabled, the server not will resolve the domain name again."
|
||||
msgstr "启用后,服务器不会再次解析域名。"
|
||||
msgid "Sniffing Route Only"
|
||||
msgstr "流量嗅探只供路由使用"
|
||||
|
||||
msgid "TCP Proxy Way"
|
||||
msgstr "TCP代理方式"
|
||||
|
@ -1330,11 +1327,11 @@ msgstr "初始窗口大小"
|
|||
msgid "No Sniffing Lists"
|
||||
msgstr "不进行流量嗅探的域名列表"
|
||||
|
||||
msgid "Hosts added into No Sniffing Lists will not resolve again on server (Xray only)."
|
||||
msgstr "加入的域名不会再次在服务器解析(仅适用于Xray)。"
|
||||
msgid "Hosts added into No Sniffing Lists will not resolve again on server."
|
||||
msgstr "加入的域名不会再次在服务器解析。"
|
||||
|
||||
msgid "Buffer Size (Xray)"
|
||||
msgstr "缓冲区大小(Xray)"
|
||||
msgid "Buffer Size"
|
||||
msgstr "缓冲区大小"
|
||||
|
||||
msgid "Buffer size for every connection (kB)"
|
||||
msgstr "每一个连接的缓冲区大小(kB)"
|
||||
|
|
|
@ -43,6 +43,19 @@ use_nft=$(uci -q get passwall2.@global_forwarding[0].use_nft || echo "0")
|
|||
fi
|
||||
}
|
||||
|
||||
global_xray=$(uci -q get passwall2.@global_xray[0])
|
||||
[ -z "${global_xray}" ] && {
|
||||
cfgid=$(uci add passwall2 global_xray)
|
||||
uci -q set passwall2.${cfgid}.sniffing=$(uci -q get passwall2.@global_forwarding[0].sniffing || echo "1")
|
||||
uci -q set passwall2.${cfgid}.route_only=$(uci -q get passwall2.@global_forwarding[0].route_only || echo "0")
|
||||
uci -q set passwall2.${cfgid}.buffer_size=$(uci -q get passwall2.@global_forwarding[0].buffer_size || echo "")
|
||||
|
||||
uci -q delete passwall2.@global_forwarding[0].sniffing
|
||||
uci -q delete passwall2.@global_forwarding[0].route_only
|
||||
uci -q delete passwall2.@global_forwarding[0].buffer_size
|
||||
uci -q commit passwall2
|
||||
}
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
rm -rf /tmp/luci-modulecache/
|
||||
killall -HUP rpcd 2>/dev/null
|
||||
|
|
Loading…
Reference in New Issue