diff --git a/package/lienol/luci-app-passwall/Makefile b/package/lienol/luci-app-passwall/Makefile
index 38fbc8bee1..5b4c6632ad 100644
--- a/package/lienol/luci-app-passwall/Makefile
+++ b/package/lienol/luci-app-passwall/Makefile
@@ -7,8 +7,8 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=luci-app-passwall
PKG_VERSION:=3.9
-PKG_RELEASE:=34
-PKG_DATE:=20200811
+PKG_RELEASE:=35
+PKG_DATE:=20200812
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_trojan.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_trojan.lua
index e5c0f8cf36..c8fd459899 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_trojan.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_trojan.lua
@@ -25,7 +25,7 @@ local trojan = {
sni = node.tls_serverName,
alpn = {"h2", "http/1.1"},
reuse_session = true,
- session_ticket = (node.tls_sessionTicket == "1") and true or false,
+ session_ticket = (node.tls_sessionTicket and node.tls_sessionTicket == "1") and true or false,
curves = ""
},
udp_timeout = 60,
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua
index 43c796b5a6..e5e9278cda 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/api/gen_v2ray.lua
@@ -41,6 +41,11 @@ local function gen_outbound(node, tag)
end
node.stream_security = "none"
end
+
+ if node.transport == "mkcp" or node.transport == "ds" or node.transport == "quic" then
+ node.stream_security = "none"
+ end
+
result = {
tag = tag,
protocol = node.protocol,
@@ -106,7 +111,7 @@ local function gen_outbound(node, tag)
alterId = tonumber(node.alter_id),
level = node.level and tonumber(node.level) or 0,
security = node.security,
- encryption = node.encryption
+ encryption = node.encryption or "none"
}
}
}
@@ -126,11 +131,6 @@ local function gen_outbound(node, tag)
}
end
- if node.transport == "mkcp" or node.transport == "ds" or node.transport == "quic" then
- result.streamSettings.security = "none"
- result.streamSettings.tlsSettings = nil
- end
-
return result
end
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_config.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_config.lua
index c17db4ca5a..8d40222c8b 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_config.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_config.lua
@@ -244,9 +244,9 @@ security = s:option(ListValue, "security", translate("Encrypt Method"))
for a, t in ipairs(security_list) do security:value(t) end
security:depends("protocol", "vmess")
-security = s:option(Value, "encryption", translate("Encrypt Method"))
-security.default = "none"
-security:depends("protocol", "vless")
+encryption = s:option(Value, "encryption", translate("Encrypt Method"))
+encryption.default = "none"
+encryption:depends("protocol", "vless")
v_ss_encrypt_method = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method"))
for a, t in ipairs(v_ss_encrypt_method_list) do v_ss_encrypt_method:value(t) end
@@ -357,7 +357,7 @@ level.default = 1
level:depends("protocol", "vmess")
level:depends("protocol", "vless")
-stream_security = s:option(ListValue, "stream_security", translate("Transport Layer Encryption"), translate('Whether or not transport layer encryption is enabled, the supported options are "none" for unencrypted (default) and "TLS" for using TLS.'))
+stream_security = s:option(ListValue, "stream_security", translate("Transport Layer Encryption"), translate('Whether or not transport layer encryption is enabled, the supported options are "none" for unencrypted and "TLS" for using TLS.'))
stream_security:value("none", "none")
stream_security:value("tls", "tls")
stream_security.default = "tls"
@@ -370,7 +370,7 @@ stream_security:depends("type", "Trojan-Plus")
stream_security:depends("type", "Trojan-Go")
stream_security.validate = function(self, value)
if value == "none" and (type:formvalue(arg[1]) == "Trojan" or type:formvalue(arg[1]) == "Trojan-Plus") then
- return nil, translate("'none' not supported for original Trojan.")
+ return nil, translate("'none' not supported for original Trojan, please choose 'tls'.")
end
return value
end
@@ -389,7 +389,7 @@ trojan_force_fp:depends({ type = "Trojan-Go", stream_security = "tls" })
tls_serverName = s:option(Value, "tls_serverName", translate("Domain"))
tls_serverName:depends("stream_security", "tls")
-tls_allowInsecure = s:option(Flag, "tls_allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, V2Ray does not check the validity of the TLS certificate provided by the remote host."))
+tls_allowInsecure = s:option(Flag, "tls_allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
tls_allowInsecure.default = "0"
tls_allowInsecure:depends("stream_security", "tls")
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_subscribe.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_subscribe.lua
index 37879ba92a..3cd6757bf9 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_subscribe.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/node_subscribe.lua
@@ -57,7 +57,7 @@ o = s:option(Flag, "filter_keyword_discarded", translate("Filter keyword discard
o.default = "1"
o.rmempty = false
-o = s:option(Flag, "allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, V2Ray does not check the validity of the TLS certificate provided by the remote host by default."))
+o = s:option(Flag, "allowInsecure", translate("allowInsecure"), translate("Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."))
o.default = "1"
o.rmempty = false
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua
index 20c6e0b18b..68dcb76a17 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/app.lua
@@ -89,7 +89,7 @@ local function start()
config = require("luci.model.cbi.passwall.server.api.trojan").gen_config(user)
bin = ln_start(_api.get_trojan_go_path(), "trojan-go", "-config " .. config_file)
elseif type == "Brook" then
- local brook_protocol = user.brook_protocol
+ local brook_protocol = user.protocol
local brook_password = user.password
bin = ln_start(_api.get_brook_path(), "brook_" .. id, string.format("%s -l :%s -p %s", brook_protocol, port, brook_password))
end
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/ssr.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/ssr.lua
index a00dd0fb23..24f9931af1 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/ssr.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/ssr.lua
@@ -6,8 +6,8 @@ function gen_config(user)
config.password = user.password
config.timeout = tonumber(user.timeout)
config.fast_open = (user.tcp_fast_open and user.tcp_fast_open == "true") and true or false
- config.method = user.ssr_encrypt_method
- config.protocol = user.ssr_protocol
+ config.method = user.method
+ config.protocol = user.protocol
config.protocol_param = user.protocol_param
config.obfs = user.obfs
config.obfs_param = user.obfs_param
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/trojan.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/trojan.lua
index 1f8df594af..2b5a6e145b 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/trojan.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/trojan.lua
@@ -8,7 +8,7 @@ function gen_config(user)
local_port = tonumber(user.port),
remote_addr = (user.remote_enable == "1" and user.remote_address) and user.remote_address or nil,
remote_port = (user.remote_enable == "1" and user.remote_port) and tonumber(user.remote_port) or nil,
- password = user.type == "Trojan-Go" and user.passwords or { user.password },
+ password = user.type == "Trojan-Go" and user.uuid or { user.password },
log_level = 1,
ssl = (user.stream_security == nil or user.stream_security == "tls") and {
cert = user.tls_certificateFile,
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua
index 73bad155a7..fa149de89d 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/api/v2ray.lua
@@ -8,17 +8,20 @@ function gen_config(user)
{protocol = "freedom", tag = "direct"}, {protocol = "blackhole", tag = "blocked"}
}
- if user.protocol == "vmess" then
- if user.vmess_id then
+ if user.protocol == "vmess" or user.protocol == "vless" then
+ if user.uuid then
local clients = {}
- for i = 1, #user.vmess_id do
+ for i = 1, #user.uuid do
clients[i] = {
- id = user.vmess_id[i],
+ id = user.uuid[i],
level = tonumber(user.level),
alterId = tonumber(user.alter_id)
}
end
- settings = {clients = clients}
+ settings = {
+ clients = clients,
+ decryption = user.decryption or "none"
+ }
end
elseif user.protocol == "socks" then
settings = {
@@ -73,9 +76,12 @@ function gen_config(user)
if user.transit_node and user.transit_node ~= "nil" then
local node = ucic:get_all("passwall", user.transit_node)
if node and node ~= "nil" and node.type and node.type == "V2ray" then
+ if node.transport == "mkcp" or node.transport == "ds" or node.transport == "quic" then
+ node.stream_security = "none"
+ end
local transit_node = {
tag = "transit",
- protocol = node.protocol or "vmess",
+ protocol = node.protocol,
mux = {
enabled = (node.mux == "1") and true or false,
concurrency = (node.mux_concurrency) and tonumber(node.mux_concurrency) or 8
@@ -128,16 +134,17 @@ function gen_config(user)
} or nil
},
settings = {
- vnext = (node.protocol == "vmess") and {
+ vnext = (node.protocol == "vmess" or node.protocol == "vless") and {
{
address = node.address,
port = tonumber(node.port),
users = {
{
- id = node.vmess_id,
+ id = node.uuid,
alterId = tonumber(node.alter_id),
- level = tonumber(node.level),
- security = node.security
+ level = node.level and tonumber(node.level) or 0,
+ security = node.security,
+ encryption = node.encryption or "none"
}
}
}
@@ -160,12 +167,6 @@ function gen_config(user)
} or nil
}
}
-
- if node.transport == "mkcp" or node.transport == "ds" or node.transport == "quic" then
- transit_node.streamSettings.security = "none"
- transit_node.streamSettings.tlsSettings = nil
- end
-
table.insert(outbounds, 1, transit_node)
end
end
diff --git a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua
index f40e748828..f6f0e1972e 100644
--- a/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua
+++ b/package/lienol/luci-app-passwall/luasrc/model/cbi/passwall/server/user.lua
@@ -39,10 +39,10 @@ local encrypt_methods_ss_aead = {
"aes-256-gcm",
}
-map = Map("passwall_server", translate("Server Config"))
-map.redirect = d.build_url("admin", "services", "passwall", "server")
+m = Map("passwall_server", translate("Server Config"))
+m.redirect = d.build_url("admin", "services", "passwall", "server")
-s = map:section(NamedSection, arg[1], "user", "")
+s = m:section(NamedSection, arg[1], "user", "")
s.addremove = false
s.dynamic = false
@@ -81,6 +81,7 @@ end
protocol = s:option(ListValue, "protocol", translate("Protocol"))
protocol:value("vmess", "Vmess")
+protocol:value("vless", "VLESS")
protocol:value("http", "HTTP")
protocol:value("socks", "Socks")
protocol:value("shadowsocks", "Shadowsocks")
@@ -92,6 +93,12 @@ brook_protocol = s:option(ListValue, "brook_protocol", translate("Brook Protocol
brook_protocol:value("server", "Brook")
brook_protocol:value("wsserver", "WebSocket")
brook_protocol:depends("type", "Brook")
+function brook_protocol.cfgvalue(self, section)
+ return m:get(section, "protocol")
+end
+function brook_protocol.write(self, section, value)
+ m:set(section, "protocol", value)
+end
brook_tls = s:option(Flag, "brook_tls", translate("Use TLS"))
brook_tls:depends("brook_protocol", "wsserver")
@@ -115,20 +122,29 @@ password:depends({ type = "V2ray", protocol = "socks" })
password:depends({ type = "V2ray", protocol = "shadowsocks" })
password:depends({ type = "V2ray", protocol = "mtproto" })
-passwords = s:option(DynamicList, "passwords", translate("Password"))
-for i = 1, 3 do
- local uuid = luci.sys.exec("echo -n $(cat /proc/sys/kernel/random/uuid)")
- passwords:value(uuid)
-end
-passwords:depends("type", "Trojan-Go")
+decryption = s:option(Value, "decryption", translate("Encrypt Method"))
+decryption.default = "none"
+decryption:depends("protocol", "vless")
ssr_encrypt_method = s:option(ListValue, "ssr_encrypt_method", translate("Encrypt Method"))
for a, t in ipairs(ssr_encrypt_method_list) do ssr_encrypt_method:value(t) end
ssr_encrypt_method:depends("type", "SSR")
+function ssr_encrypt_method.cfgvalue(self, section)
+ return m:get(section, "method")
+end
+function ssr_encrypt_method.write(self, section, value)
+ m:set(section, "method", value)
+end
v_ss_encrypt_method = s:option(ListValue, "v_ss_encrypt_method", translate("Encrypt Method"))
for a, t in ipairs(v_ss_encrypt_method_list) do v_ss_encrypt_method:value(t) end
v_ss_encrypt_method:depends("protocol", "shadowsocks")
+function v_ss_encrypt_method.cfgvalue(self, section)
+ return m:get(section, "method")
+end
+function v_ss_encrypt_method.write(self, section, value)
+ m:set(section, "method", value)
+end
ss_network = s:option(ListValue, "ss_network", translate("Transport"))
ss_network.default = "tcp,udp"
@@ -137,16 +153,28 @@ ss_network:value("udp", "UDP")
ss_network:value("tcp,udp", "TCP,UDP")
ss_network:depends("protocol", "shadowsocks")
-ss_ota = s:option(Flag, "ss_ota", translate("OTA"), translate("When OTA is enabled, V2Ray will reject connections that are not OTA enabled. This option is invalid when using AEAD encryption."))
+ss_ota = s:option(Flag, "ss_ota", translate("OTA"), translate("When OTA is enabled, a connection that is not OTA enabled is rejected. This option is invalid when using AEAD encryption."))
ss_ota.default = "0"
ss_ota:depends("protocol", "shadowsocks")
+function ss_ota.cfgvalue(self, section)
+ return m:get(section, "ota")
+end
+function ss_ota.write(self, section, value)
+ m:set(section, "ota", value)
+end
ssr_protocol = s:option(ListValue, "ssr_protocol", translate("Protocol"))
for a, t in ipairs(ssr_protocol_list) do ssr_protocol:value(t) end
ssr_protocol:depends("type", "SSR")
+function ssr_protocol.cfgvalue(self, section)
+ return m:get(section, "protocol")
+end
+function ssr_protocol.write(self, section, value)
+ m:set(section, "protocol", value)
+end
-ssr_protocol_param = s:option(Value, "protocol_param", translate("Protocol_param"))
-ssr_protocol_param:depends("type", "SSR")
+protocol_param = s:option(Value, "protocol_param", translate("Protocol_param"))
+protocol_param:depends("type", "SSR")
obfs = s:option(ListValue, "obfs", translate("Obfs"))
for a, t in ipairs(ssr_obfs_list) do obfs:value(t) end
@@ -173,12 +201,13 @@ udp_forward.default = "1"
udp_forward.rmempty = false
udp_forward:depends("type", "SSR")
-vmess_id = s:option(DynamicList, "vmess_id", translate("ID"))
+uuid = s:option(DynamicList, "uuid", translate("ID"))
for i = 1, 3 do
- local uuid = luci.sys.exec("echo -n $(cat /proc/sys/kernel/random/uuid)")
- vmess_id:value(uuid)
+ uuid:value(api.gen_uuid())
end
-vmess_id:depends({ type = "V2ray", protocol = "vmess" })
+uuid:depends({ type = "V2ray", protocol = "vmess" })
+uuid:depends({ type = "V2ray", protocol = "vless" })
+uuid:depends("type", "Trojan-Go")
alter_id = s:option(Value, "alter_id", translate("Alter ID"))
alter_id.default = 16
@@ -187,15 +216,16 @@ alter_id:depends({ type = "V2ray", protocol = "vmess" })
level = s:option(Value, "level", translate("User Level"))
level.default = 1
level:depends({ type = "V2ray", protocol = "vmess" })
+level:depends({ type = "V2ray", protocol = "vless" })
level:depends({ type = "V2ray", protocol = "shadowsocks" })
level:depends({ type = "V2ray", protocol = "mtproto" })
-stream_security = s:option(ListValue, "stream_security", translate("Transport Layer Encryption"), translate('Whether or not transport layer encryption is enabled, the supported options are "none" for unencrypted (default) and "TLS" for using TLS.'))
+stream_security = s:option(ListValue, "stream_security", translate("Transport Layer Encryption"), translate('Whether or not transport layer encryption is enabled, the supported options are "none" for unencrypted and "TLS" for using TLS.'))
stream_security:value("none", "none")
stream_security:value("tls", "tls")
-stream_security.default = "tls"
-stream_security:depends({ type = "V2ray", protocol = "vmess", transport = "ws" })
-stream_security:depends({ type = "V2ray", protocol = "vmess", transport = "h2" })
+stream_security.default = "none"
+stream_security:depends({ type = "V2ray", protocol = "vmess" })
+stream_security:depends({ type = "V2ray", protocol = "vless" })
stream_security:depends({ type = "V2ray", protocol = "socks" })
stream_security:depends({ type = "V2ray", protocol = "shadowsocks" })
stream_security:depends("type", "Trojan")
@@ -203,7 +233,7 @@ stream_security:depends("type", "Trojan-Plus")
stream_security:depends("type", "Trojan-Go")
stream_security.validate = function(self, value)
if value == "none" and (type:formvalue(arg[1]) == "Trojan" or type:formvalue(arg[1]) == "Trojan-Plus") then
- return nil, translate("'none' not supported for original Trojan.")
+ return nil, translate("'none' not supported for original Trojan, please choose 'tls'.")
end
return value
end
@@ -234,6 +264,7 @@ transport:value("h2", "HTTP/2")
transport:value("ds", "DomainSocket")
transport:value("quic", "QUIC")
transport:depends({ type = "V2ray", protocol = "vmess" })
+transport:depends({ type = "V2ray", protocol = "vless" })
transport:depends({ type = "V2ray", protocol = "socks" })
transport:depends({ type = "V2ray", protocol = "shadowsocks" })
@@ -366,6 +397,26 @@ quic_guise = s:option(ListValue, "quic_guise", translate("Camouflage Type"))
for a, t in ipairs(header_type_list) do quic_guise:value(t) end
quic_guise:depends("transport", "quic")
+-- [[ VLESS Fallback部分 ]]--
+--[[
+fallback = s:option(Flag, "fallback", translate("Fallback"))
+fallback:depends({ type = "V2ray", protocol = "vless", transport = "tcp", stream_security = "tls" })
+
+fallback_addr = s:option(Value, "fallback_addr", "Fallback" .. translate("Address (Support Domain Name)"))
+fallback_addr:depends("fallback", "1")
+
+fallback_port = s:option(Value, "fallback_port", "Fallback" .. translate("Port"))
+fallback_port.datatype = "port"
+fallback_port:depends("fallback", "1")
+
+fallback_unix = s:option(Value, "fallback_unix", "Fallback UNIX domain socket", translate("UNIX domain socket, absolute path, you can add @ at the beginning to represent abstract, and it is empty by default. If this value is filled in, addr and port will be ignored."))
+fallback_unix:depends("fallback", "1")
+
+fallback_xver = s:option(Value, "fallback_xver", "Fallback xver")
+fallback_xver.default = 0
+fallback_xver:depends("fallback", "1")
+]]--
+
remote_enable = s:option(Flag, "remote_enable", translate("Enable Remote"), translate("You can forward to Nginx/Caddy/V2ray WebSocket and more."))
remote_enable.default = "1"
remote_enable.rmempty = false
@@ -422,4 +473,4 @@ accept_lan.default = "0"
accept_lan.rmempty = false
accept_lan:depends("type", "V2ray")
-return map
+return m
diff --git a/package/lienol/luci-app-passwall/po/zh-cn/passwall.po b/package/lienol/luci-app-passwall/po/zh-cn/passwall.po
index 4bbcd2852f..240a65c0b5 100644
--- a/package/lienol/luci-app-passwall/po/zh-cn/passwall.po
+++ b/package/lienol/luci-app-passwall/po/zh-cn/passwall.po
@@ -733,9 +733,6 @@ msgstr "关键字丢弃"
msgid "When checked, the keywords in the list are discarded. Otherwise, it is not discarded."
msgstr "当勾选时,将丢弃包含列表里的关键字的节点。否则,将保留列表的关键字的节点(反过来)。"
-msgid "Whether unsafe connections are allowed. When checked, V2Ray does not check the validity of the TLS certificate provided by the remote host by default."
-msgstr "是否允许不安全连接。当勾选时,缺省情况下客户端不会检查远端主机所提供的 TLS 证书的有效性。"
-
msgid "Add"
msgstr "添加"
@@ -862,14 +859,17 @@ msgstr "伪装类型"
msgid "Transport Layer Encryption"
msgstr "传输层加密"
-msgid "Whether or not transport layer encryption is enabled, the supported options are \"none\" for unencrypted (default) and \"TLS\" for using TLS."
-msgstr "是否启入传输层加密,支持的选项有 \"none\" 表示不加密(默认值),\"tls\" 表示使用 TLS。"
+msgid "Whether or not transport layer encryption is enabled, the supported options are \"none\" for unencrypted and \"TLS\" for using TLS."
+msgstr "是否启入传输层加密,支持的选项有 \"none\" 表示不加密,\"tls\" 表示使用 TLS。"
+
+msgid "'none' not supported for original Trojan, please choose 'tls'."
+msgstr "原版Trojan不支持'none',请选择TLS。"
msgid "Domain"
msgstr "域名"
-msgid "Whether unsafe connections are allowed. When checked, V2Ray does not check the validity of the TLS certificate provided by the remote host."
-msgstr "是否允许不安全连接。当勾选时,V2Ray 不会检查远端主机所提供的 TLS 证书的有效性。"
+msgid "Whether unsafe connections are allowed. When checked, Certificate validation will be skipped."
+msgstr "是否允许不安全连接。当勾选时,将跳过证书验证。"
msgid "
none: default, no masquerade, data sent is packets with no characteristics.
srtp: disguised as an SRTP packet, it will be recognized as video call data (such as FaceTime).
utp: packets disguised as uTP will be recognized as bittorrent downloaded data.
wechat-video: packets disguised as WeChat video calls.
dtls: disguised as DTLS 1.2 packet.
wireguard: disguised as a WireGuard packet. (not really WireGuard protocol)"
msgstr "
none:默认值,不进行伪装,发送的数据是没有特征的数据包。
srtp:伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime)。
utp:伪装成 uTP 数据包,会被识别为 BT 下载数据。
wechat-video:伪装成微信视频通话的数据包。
dtls:伪装成 DTLS 1.2 数据包。
wireguard:伪装成 WireGuard 数据包。(并不是真正的 WireGuard 协议)"
@@ -877,6 +877,9 @@ msgstr "
none:默认值,不进行伪装,发送的数据是没有特
msgid "A legal file path. This file must not exist before running V2Ray."
msgstr "一个合法的文件路径。在运行 V2Ray 之前,这个文件必须不存在。"
+msgid "UNIX domain socket, absolute path, you can add @ at the beginning to represent abstract, and it is empty by default. If this value is filled in, addr and port will be ignored."
+msgstr "UNIX domain socket,绝对路径,可在开头加 @ 代表 abstract,默认为空。若填写了该值,addr 和 port 将被忽略。"
+
msgid "TCP Open Socks"
msgstr "开启Socks"
@@ -919,8 +922,8 @@ msgstr "隐藏菜单方法,地址栏输入例:"
msgid "After the hidden to the display, input example in the address bar:"
msgstr "当你隐藏后想再次显示,地址栏输入例:"
-msgid "When OTA is enabled, V2Ray will reject connections that are not OTA enabled. This option is invalid when using AEAD encryption."
-msgstr "开启 OTA 后,V2Ray 会拒绝未启用 OTA 的连接。当使用 AEAD 加密时,该选项无效。"
+msgid "When OTA is enabled, a connection that is not OTA enabled is rejected. This option is invalid when using AEAD encryption."
+msgstr "开启 OTA 后,将拒绝未启用 OTA 的连接。当使用 AEAD 加密时,该选项无效。"
msgid "transit node"
msgstr "中转到此节点"