luci-app-passwall: bump to 3.9-35

This commit is contained in:
CN_SZTL 2020-08-12 14:15:46 +08:00
parent 099c58a2e1
commit 76860e876d
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
11 changed files with 122 additions and 67 deletions

View File

@ -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)

View File

@ -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,

View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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

View File

@ -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

View File

@ -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 "<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)"
msgstr "<br />none默认值不进行伪装发送的数据是没有特征的数据包。<br />srtp伪装成 SRTP 数据包,会被识别为视频通话数据(如 FaceTime。<br />utp伪装成 uTP 数据包,会被识别为 BT 下载数据。<br />wechat-video伪装成微信视频通话的数据包。<br />dtls伪装成 DTLS 1.2 数据包。<br />wireguard伪装成 WireGuard 数据包。(并不是真正的 WireGuard 协议)"
@ -877,6 +877,9 @@ msgstr "<br />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 "中转到此节点"