diff --git a/daed/Makefile b/daed/Makefile index a3b5749..221a8a2 100644 --- a/daed/Makefile +++ b/daed/Makefile @@ -5,10 +5,10 @@ include $(TOPDIR)/rules.mk PKG_NAME:=daed -PKG_VERSION:=2025.07.23 +PKG_VERSION:=2025.08.24 DAED_VERSION:=daed-c3588a9 WING_VERSION:=wing-6df3da2 -CORE_VERSION:=core-358f459 +CORE_VERSION:=core-1228e82 WING_HASH_SHORT:=$(shell echo $(WING_VERSION) | cut -d- -f2) CORE_HASH_SHORT:=$(shell echo $(CORE_VERSION) | cut -d- -f2) PKG_RELEASE:=1 diff --git a/dns2socks-rust/Makefile b/dns2socks-rust/Makefile index 43c3ea0..f072966 100644 --- a/dns2socks-rust/Makefile +++ b/dns2socks-rust/Makefile @@ -9,12 +9,10 @@ PKG_NAME:=dns2socks-rust PKG_VERSION:=0.2.1 PKG_RELEASE:=1 -PKG_SOURCE_PROTO:=git PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=https://github.com/tun2proxy/dns2socks.git -PKG_SOURCE_DATE:=2025-08-18 -PKG_SOURCE_VERSION:=a23fe67ff4e2a218fcd4726055514c8c2b5299c9 -PKG_MIRROR_HASH:=7d2829cc0da6e9eacc5ed97f51f37ee0ce1ea1a10f38f1e4d2a30ae80d237289 +PKG_SOURCE_URL:=https://codeload.github.com/tun2proxy/dns2socks/tar.gz/v$(PKG_VERSION)? +PKG_HASH:=c7e9cc18f79edf421012dd9f7f915df8270be5b77dfd7ea8ac4513c32965ba4b +PKG_BUILD_DIR:=$(BUILD_DIR)/dns2socks-$(PKG_VERSION) PKG_MAINTAINER:=Zxlhhyccc PKG_LICENSE:=MIT diff --git a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js index 35b569d..2f25795 100644 --- a/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js +++ b/luci-app-homeproxy/htdocs/luci-static/resources/view/homeproxy/node.js @@ -1091,10 +1091,6 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o.depends('tls', '1'); 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'), _('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'); @@ -1123,7 +1119,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o.value('random'); o.value('randomized'); o.value('safari'); - o.depends({'tls': '1', 'type': /^((?!hysteria2?$).)+$/}); + o.depends({'tls': '1', 'type': /^((?!hysteria2?|tuic$).)+$/}); o.validate = function(section_id, value) { if (section_id) { let tls_reality = this.map.findElement('id', 'cbid.homeproxy.%s.tls_reality'.format(section_id)).firstElementChild; diff --git a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc index 68fe43f..26ada37 100755 --- a/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc +++ b/luci-app-homeproxy/root/etc/homeproxy/scripts/generate_client.uc @@ -301,7 +301,6 @@ function generate_outbound(node) { certificate_path: node.tls_cert_path, ech: (node.tls_ech === '1') ? { enabled: true, - pq_signature_schemes_enabled: strToBool(node.tls_ech_enable_pqss), config: node.tls_ech_config, config_path: node.tls_ech_config_path } : null, diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua index 1811aa3..6f5f63e 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/node_list.lua @@ -173,6 +173,8 @@ o.cfgvalue = function(t, n) protocol = "HY2" elseif protocol == "anytls" then protocol = "AnyTLS" + elseif protocol == "ssh" then + protocol = "SSH" else protocol = protocol:gsub("^%l",string.upper) end diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua index 86d9be4..a393f3a 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/type/sing-box.lua @@ -59,6 +59,7 @@ end if version_ge_1_12_0 then o:value("anytls", "AnyTLS") end +o:value("ssh", "SSH") o:value("_urltest", translate("URLTest")) o:value("_shunt", translate("Shunt")) o:value("_iface", translate("Custom Interface")) @@ -249,6 +250,7 @@ end o = s:option(Value, _n("username"), translate("Username")) o:depends({ [_n("protocol")] = "http" }) o:depends({ [_n("protocol")] = "socks" }) +o:depends({ [_n("protocol")] = "ssh" }) o = s:option(Value, _n("password"), translate("Password")) o.password = true @@ -258,6 +260,7 @@ o:depends({ [_n("protocol")] = "shadowsocks" }) o:depends({ [_n("protocol")] = "trojan" }) o:depends({ [_n("protocol")] = "tuic" }) o:depends({ [_n("protocol")] = "anytls" }) +o:depends({ [_n("protocol")] = "ssh" }) o = s:option(ListValue, _n("security"), translate("Encrypt Method")) 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"}) 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.default = 0 o:depends({ [_n("protocol")] = "vmess" }) diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua index 2515f57..4f7ff8a 100644 --- a/luci-app-passwall/luasrc/passwall/api.lua +++ b/luci-app-passwall/luasrc/passwall/api.lua @@ -474,6 +474,8 @@ function get_valid_nodes() protocol = "HY2" elseif protocol == "anytls" then protocol = "AnyTLS" + elseif protocol == "ssh" then + protocol = "SSH" else protocol = protocol:gsub("^%l",string.upper) end @@ -520,6 +522,8 @@ function get_node_remarks(n) protocol = "HY2" elseif protocol == "anytls" then protocol = "AnyTLS" + elseif protocol == "ssh" then + protocol = "SSH" else protocol = protocol:gsub("^%l",string.upper) end diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index f19e023..a05fb27 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -478,6 +478,18 @@ function gen_outbound(flag, node, tag, proxy_table) } 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 for key, value in pairs(protocol_table) do result[key] = value diff --git a/luci-app-passwall/po/zh-cn/passwall.po b/luci-app-passwall/po/zh-cn/passwall.po index 0e0ecfd..112f2d8 100644 --- a/luci-app-passwall/po/zh-cn/passwall.po +++ b/luci-app-passwall/po/zh-cn/passwall.po @@ -1953,3 +1953,21 @@ msgstr "可以通过输入 GeoIP/Geosite,提取它们所包含的域名/IP。" msgid "Use the GeoIP/Geosite query function to verify if the entered Geo rules are correct." 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 "如留空,则使用随机版本。"