update 2025-08-25 09:23:01

This commit is contained in:
actions-user 2025-08-25 09:23:01 +08:00
parent 2c20f43520
commit e4e07d79b6
9 changed files with 63 additions and 13 deletions

View File

@ -5,10 +5,10 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=daed PKG_NAME:=daed
PKG_VERSION:=2025.07.23 PKG_VERSION:=2025.08.24
DAED_VERSION:=daed-c3588a9 DAED_VERSION:=daed-c3588a9
WING_VERSION:=wing-6df3da2 WING_VERSION:=wing-6df3da2
CORE_VERSION:=core-358f459 CORE_VERSION:=core-1228e82
WING_HASH_SHORT:=$(shell echo $(WING_VERSION) | cut -d- -f2) WING_HASH_SHORT:=$(shell echo $(WING_VERSION) | cut -d- -f2)
CORE_HASH_SHORT:=$(shell echo $(CORE_VERSION) | cut -d- -f2) CORE_HASH_SHORT:=$(shell echo $(CORE_VERSION) | cut -d- -f2)
PKG_RELEASE:=1 PKG_RELEASE:=1

View File

@ -9,12 +9,10 @@ PKG_NAME:=dns2socks-rust
PKG_VERSION:=0.2.1 PKG_VERSION:=0.2.1
PKG_RELEASE:=1 PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/tun2proxy/dns2socks.git PKG_SOURCE_URL:=https://codeload.github.com/tun2proxy/dns2socks/tar.gz/v$(PKG_VERSION)?
PKG_SOURCE_DATE:=2025-08-18 PKG_HASH:=c7e9cc18f79edf421012dd9f7f915df8270be5b77dfd7ea8ac4513c32965ba4b
PKG_SOURCE_VERSION:=a23fe67ff4e2a218fcd4726055514c8c2b5299c9 PKG_BUILD_DIR:=$(BUILD_DIR)/dns2socks-$(PKG_VERSION)
PKG_MIRROR_HASH:=7d2829cc0da6e9eacc5ed97f51f37ee0ce1ea1a10f38f1e4d2a30ae80d237289
PKG_MAINTAINER:=Zxlhhyccc <zxlhhyccc@gmail.com> PKG_MAINTAINER:=Zxlhhyccc <zxlhhyccc@gmail.com>
PKG_LICENSE:=MIT PKG_LICENSE:=MIT

View File

@ -1091,10 +1091,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o.depends('tls', '1'); o.depends('tls', '1');
o.modalonly = true; o.modalonly = true;
o = s.option(form.Flag, 'tls_ech_enable_pqss', _('Enable PQ signature schemes'));
o.depends('tls_ech', '1');
o.modalonly = true;
o = s.option(form.Value, 'tls_ech_config_path', _('ECH config path'), o = s.option(form.Value, 'tls_ech_config_path', _('ECH config path'),
_('The path to the ECH config, in PEM format. If empty, load from DNS will be attempted.')); _('The path to the ECH config, in PEM format. If empty, load from DNS will be attempted.'));
o.value('/etc/homeproxy/certs/client_ech_conf.pem'); o.value('/etc/homeproxy/certs/client_ech_conf.pem');
@ -1123,7 +1119,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) {
o.value('random'); o.value('random');
o.value('randomized'); o.value('randomized');
o.value('safari'); o.value('safari');
o.depends({'tls': '1', 'type': /^((?!hysteria2?$).)+$/}); o.depends({'tls': '1', 'type': /^((?!hysteria2?|tuic$).)+$/});
o.validate = function(section_id, value) { o.validate = function(section_id, value) {
if (section_id) { if (section_id) {
let tls_reality = this.map.findElement('id', 'cbid.homeproxy.%s.tls_reality'.format(section_id)).firstElementChild; let tls_reality = this.map.findElement('id', 'cbid.homeproxy.%s.tls_reality'.format(section_id)).firstElementChild;

View File

@ -301,7 +301,6 @@ function generate_outbound(node) {
certificate_path: node.tls_cert_path, certificate_path: node.tls_cert_path,
ech: (node.tls_ech === '1') ? { ech: (node.tls_ech === '1') ? {
enabled: true, enabled: true,
pq_signature_schemes_enabled: strToBool(node.tls_ech_enable_pqss),
config: node.tls_ech_config, config: node.tls_ech_config,
config_path: node.tls_ech_config_path config_path: node.tls_ech_config_path
} : null, } : null,

View File

@ -173,6 +173,8 @@ o.cfgvalue = function(t, n)
protocol = "HY2" protocol = "HY2"
elseif protocol == "anytls" then elseif protocol == "anytls" then
protocol = "AnyTLS" protocol = "AnyTLS"
elseif protocol == "ssh" then
protocol = "SSH"
else else
protocol = protocol:gsub("^%l",string.upper) protocol = protocol:gsub("^%l",string.upper)
end end

View File

@ -59,6 +59,7 @@ end
if version_ge_1_12_0 then if version_ge_1_12_0 then
o:value("anytls", "AnyTLS") o:value("anytls", "AnyTLS")
end end
o:value("ssh", "SSH")
o:value("_urltest", translate("URLTest")) o:value("_urltest", translate("URLTest"))
o:value("_shunt", translate("Shunt")) o:value("_shunt", translate("Shunt"))
o:value("_iface", translate("Custom Interface")) o:value("_iface", translate("Custom Interface"))
@ -249,6 +250,7 @@ end
o = s:option(Value, _n("username"), translate("Username")) o = s:option(Value, _n("username"), translate("Username"))
o:depends({ [_n("protocol")] = "http" }) o:depends({ [_n("protocol")] = "http" })
o:depends({ [_n("protocol")] = "socks" }) o:depends({ [_n("protocol")] = "socks" })
o:depends({ [_n("protocol")] = "ssh" })
o = s:option(Value, _n("password"), translate("Password")) o = s:option(Value, _n("password"), translate("Password"))
o.password = true o.password = true
@ -258,6 +260,7 @@ o:depends({ [_n("protocol")] = "shadowsocks" })
o:depends({ [_n("protocol")] = "trojan" }) o:depends({ [_n("protocol")] = "trojan" })
o:depends({ [_n("protocol")] = "tuic" }) o:depends({ [_n("protocol")] = "tuic" })
o:depends({ [_n("protocol")] = "anytls" }) o:depends({ [_n("protocol")] = "anytls" })
o:depends({ [_n("protocol")] = "ssh" })
o = s:option(ListValue, _n("security"), translate("Encrypt Method")) o = s:option(ListValue, _n("security"), translate("Encrypt Method"))
for a, t in ipairs(security_list) do o:value(t) end for a, t in ipairs(security_list) do o:value(t) end
@ -413,6 +416,24 @@ if singbox_tags:find("with_quic") then
o:depends({ [_n("protocol")] = "hysteria2"}) o:depends({ [_n("protocol")] = "hysteria2"})
end end
-- [[ SSH config start ]] --
o = s:option(Value, _n("ssh_priv_key"), translate("Private Key"))
o:depends({ [_n("protocol")] = "ssh" })
o = s:option(Value, _n("ssh_priv_key_pp"), translate("Private Key Passphrase"))
o.password = true
o:depends({ [_n("protocol")] = "ssh" })
o = s:option(DynamicList, _n("ssh_host_key"), translate("Host Key"), translate("Accept any if empty."))
o:depends({ [_n("protocol")] = "ssh" })
o = s:option(DynamicList, _n("ssh_host_key_algo"), translate("Host Key Algorithms"))
o:depends({ [_n("protocol")] = "ssh" })
o = s:option(Value, _n("ssh_client_version"), translate("Client Version"), translate("Random version will be used if empty."))
o:depends({ [_n("protocol")] = "ssh" })
-- [[ SSH config end ]] --
o = s:option(Flag, _n("tls"), translate("TLS")) o = s:option(Flag, _n("tls"), translate("TLS"))
o.default = 0 o.default = 0
o:depends({ [_n("protocol")] = "vmess" }) o:depends({ [_n("protocol")] = "vmess" })

View File

@ -474,6 +474,8 @@ function get_valid_nodes()
protocol = "HY2" protocol = "HY2"
elseif protocol == "anytls" then elseif protocol == "anytls" then
protocol = "AnyTLS" protocol = "AnyTLS"
elseif protocol == "ssh" then
protocol = "SSH"
else else
protocol = protocol:gsub("^%l",string.upper) protocol = protocol:gsub("^%l",string.upper)
end end
@ -520,6 +522,8 @@ function get_node_remarks(n)
protocol = "HY2" protocol = "HY2"
elseif protocol == "anytls" then elseif protocol == "anytls" then
protocol = "AnyTLS" protocol = "AnyTLS"
elseif protocol == "ssh" then
protocol = "SSH"
else else
protocol = protocol:gsub("^%l",string.upper) protocol = protocol:gsub("^%l",string.upper)
end end

View File

@ -478,6 +478,18 @@ function gen_outbound(flag, node, tag, proxy_table)
} }
end end
if node.protocol == "ssh" then
protocol_table = {
user = (node.username and node.username ~= "") and node.username or "root",
password = (node.password and node.password ~= "") and node.password or "",
private_key = node.ssh_priv_key,
private_key_passphrase = node.ssh_priv_key_pp,
host_key = node.ssh_host_key,
host_key_algorithms = node.ssh_host_key_algo,
client_version = node.ssh_client_version
}
end
if protocol_table then if protocol_table then
for key, value in pairs(protocol_table) do for key, value in pairs(protocol_table) do
result[key] = value result[key] = value

View File

@ -1953,3 +1953,21 @@ msgstr "可以通过输入 GeoIP/Geosite提取它们所包含的域名/IP。"
msgid "Use the GeoIP/Geosite query function to verify if the entered Geo rules are correct." msgid "Use the GeoIP/Geosite query function to verify if the entered Geo rules are correct."
msgstr "利用 GeoIP/Geosite 查询功能,可以验证输入的 Geo 规则是否正确。" msgstr "利用 GeoIP/Geosite 查询功能,可以验证输入的 Geo 规则是否正确。"
msgid "Private Key Passphrase"
msgstr "私钥指纹"
msgid "Host Key"
msgstr "主机密钥"
msgid "Accept any if empty."
msgstr "留空则不校验。"
msgid "Host Key Algorithms"
msgstr "主机密钥算法"
msgid "Client Version"
msgstr "客户端版本"
msgid "Random version will be used if empty."
msgstr "如留空,则使用随机版本。"