From 76860e876d302a0c72bcae30c159610665d0d706 Mon Sep 17 00:00:00 2001 From: CN_SZTL Date: Wed, 12 Aug 2020 14:15:46 +0800 Subject: [PATCH] luci-app-passwall: bump to 3.9-35 --- package/lienol/luci-app-passwall/Makefile | 4 +- .../model/cbi/passwall/api/gen_trojan.lua | 2 +- .../model/cbi/passwall/api/gen_v2ray.lua | 12 +-- .../luasrc/model/cbi/passwall/node_config.lua | 12 +-- .../model/cbi/passwall/node_subscribe.lua | 2 +- .../model/cbi/passwall/server/api/app.lua | 2 +- .../model/cbi/passwall/server/api/ssr.lua | 4 +- .../model/cbi/passwall/server/api/trojan.lua | 2 +- .../model/cbi/passwall/server/api/v2ray.lua | 33 +++---- .../luasrc/model/cbi/passwall/server/user.lua | 95 ++++++++++++++----- .../luci-app-passwall/po/zh-cn/passwall.po | 21 ++-- 11 files changed, 122 insertions(+), 67 deletions(-) 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 "中转到此节点"