diff --git a/docker/Makefile b/docker/Makefile index a1e80568..b6ffa686 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -1,12 +1,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=docker -PKG_VERSION:=29.5.0 +PKG_VERSION:=29.5.1 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/docker/cli/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=df1d83df1ffd4045e0a514ef4ea9e2dcb75cd57d6da48d02fd34c25ccbc3e49d +PKG_HASH:=de3cdd74a66f4cfe843983e4ca8d2133cf5eecc8ad8b5450cec0b7ccd59f921d PKG_BUILD_DIR:=$(BUILD_DIR)/cli-$(PKG_VERSION) PKG_GIT_SHORT_COMMIT:=$(shell $(CURDIR)/git-short-commit.sh 'github.com/docker/cli' 'v$(PKG_VERSION)' '$(TMP_DIR)/git-short-commit/$(PKG_NAME)-$(PKG_VERSION)') diff --git a/dockerd/Makefile b/dockerd/Makefile index ea35a2ef..c73ef194 100644 --- a/dockerd/Makefile +++ b/dockerd/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dockerd -PKG_VERSION:=29.5.0 +PKG_VERSION:=29.5.1 PKG_RELEASE:=1 PKG_LICENSE:=Apache-2.0 PKG_LICENSE_FILES:=LICENSE @@ -10,7 +10,7 @@ PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_GIT_URL:=github.com/moby/moby PKG_GIT_REF:=docker-v$(PKG_VERSION) PKG_SOURCE_URL:=https://codeload.$(PKG_GIT_URL)/tar.gz/$(PKG_GIT_REF)? -PKG_HASH:=406f6ba2f369e384e39bebe837859a888413dd71608ace7a9b0dc7d550dbd570 +PKG_HASH:=26646ad2a39a41ecdc85261f32c491188c995f95130f487332b4c64afaf4cdb4 PKG_GIT_SHORT_COMMIT:=$(shell $(CURDIR)/git-short-commit.sh '$(PKG_GIT_URL)' '$(PKG_GIT_REF)' '$(TMP_DIR)/git-short-commit/$(PKG_NAME)-$(PKG_VERSION)') PKG_MAINTAINER:=Gerard Ryan diff --git a/luci-app-passwall/luasrc/passwall/util_hysteria2.lua b/luci-app-passwall/luasrc/passwall/util_hysteria2.lua index d6be50df..98127324 100644 --- a/luci-app-passwall/luasrc/passwall/util_hysteria2.lua +++ b/luci-app-passwall/luasrc/passwall/util_hysteria2.lua @@ -67,11 +67,7 @@ function gen_config(var) server_host = api.get_ipv6_full(server_host) end - local server = server_host .. (server_port and ":" .. server_port or "") - - if node.hysteria2_hop then - server = server .. (server_port and "," or ":") .. string.gsub(node.hysteria2_hop, ":", "-") - end + local server = server_host .. ":" .. ((server_port or "") .. "," .. (node.hysteria2_hop or "")):gsub("^[%s,]+", ""):gsub("[%s,]+$", ""):gsub(":", "-") local config = { server = (function() diff --git a/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm b/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm index f4530ae6..77f77c5b 100644 --- a/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm +++ b/luci-app-passwall/luasrc/view/passwall/node_list/node_list.htm @@ -956,7 +956,7 @@ table td, .table .td { var newDom = node_template.cloneNode(true); newDom.classList.add("cbi-rowstyle-" + (i % 2 + 1)); var innerHTML = newDom.innerHTML; - if (auto_detection_time != "icmp" && o["address"] && o["port"]) { + if (auto_detection_time != "icmp" && o["address"]) { innerHTML = innerHTML.split("{{ping}}").join('<%:Test%>'); } else { innerHTML = innerHTML.split("{{ping}}").join('---'); @@ -976,11 +976,13 @@ table td, .table .td { innerHTML = innerHTML.split("{{group}}").join(o["group"] || ""); let node_remarks = get_remarks_name(o); if (show_node_info == "1") { - if (o["address"] && o["port"]) { + let _port = o["port"] || o["hysteria_hop"] || o["hysteria2_hop"]; + if (_port) _port = _port.replace(/:/g, '-'); + if (o["address"] && _port) { let _address = o["address"] if (o["full_address"]) _address = o["full_address"] - node_remarks += "
" + _address + ":" + o["port"] + node_remarks += "
" + _address + ":" + _port } } innerHTML = innerHTML.split("{{remarks}}").join(node_remarks); diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh index a2d742a7..7647f741 100755 --- a/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/luci-app-passwall/root/usr/share/passwall/app.sh @@ -374,7 +374,7 @@ run_socks() { fi fi - if [ -n "${error_msg}" ] && [ "$(config_n_get $node hysteria2_realms)" = "1" ]; then + if [ -n "${error_msg}" ] && ([ -n "$(config_n_get $node hysteria_hop)" ] || [ -n "$(config_n_get $node hysteria2_hop)" ] || [ "$(config_n_get $node hysteria2_realms)" = "1" ]); then unset error_msg fi diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index cb2f0820..a5536db4 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 -PKG_VERSION:=26.5.18 +PKG_VERSION:=26.5.19 PKG_RELEASE:=1 PKG_PO_VERSION:=$(PKG_VERSION) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua index 26969a45..cfb5fb61 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/sing-box.lua @@ -865,17 +865,21 @@ if not load_shunt_options then if not (load_iface_options or load_urltest_options) then -- Special node cannot be use pre-proxy. o:value("1", translate("Preproxy Node")) + o:value("3", translate("Outbound Interface")) end o:value("2", translate("Landing Node")) - o:depends({ [_n("hysteria2_realms")] = false }) o1 = s:option(ListValue, _n("preproxy_node"), translate("Preproxy Node"), translate("Only support a layer of proxy.")) - o1:depends({ [_n("chain_proxy")] = "1" }) + o1:depends({ [_n("chain_proxy")] = "1", [_n("hysteria2_realms")] = false }) o1.template = appname .. "/cbi/nodes_listvalue" o1.group = {} + o3 = s:option(Value, _n("outbound_iface"), translate("Outbound Interface")) + o3.default = "eth1" + o3:depends({ [_n("chain_proxy")] = "3" }) + o2 = s:option(ListValue, _n("to_node"), translate("Landing Node"), translate("Only support a layer of proxy.")) - o2:depends({ [_n("chain_proxy")] = "2" }) + o2:depends({ [_n("chain_proxy")] = "2", [_n("hysteria2_realms")] = false }) o2.template = appname .. "/cbi/nodes_listvalue" o2.group = {} diff --git a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua index 23fac98a..7075dd11 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua @@ -64,11 +64,7 @@ function gen_config(var) server_host = api.get_ipv6_full(server_host) end - local server = server_host .. (server_port and ":" .. server_port or "") - - if node.hysteria2_hop then - server = server .. (server_port and "," or ":") .. string.gsub(node.hysteria2_hop, ":", "-") - end + local server = server_host .. ":" .. ((server_port or "") .. "," .. (node.hysteria2_hop or "")):gsub("^[%s,]+", ""):gsub("[%s,]+$", ""):gsub(":", "-") local config = { server = (function() diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index dad25b00..8080b147 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -1479,6 +1479,10 @@ function gen_config(var) end end end + if node.chain_proxy == "3" and node.outbound_iface then + outbound.detour = nil + outbound.bind_interface = node.outbound_iface + end return default_outTag, last_insert_outbound end @@ -1810,6 +1814,10 @@ function gen_config(var) tag = "local" }) + route.default_domain_resolver = { + server = "local" + } + if direct_dns_udp_server then table.insert(dns.servers, { tag = "direct", @@ -2161,16 +2169,12 @@ function gen_config(var) type = "direct", tag = "direct", routing_mark = 255, - domain_resolver = { - server = "local", - strategy = "prefer_ipv6" - } }) for index, value in ipairs(config.outbounds) do if not value["_flag_proxy_tag"] and not value.detour and value["_id"] and value.server and value.server_port and not no_run then sys.call(string.format("echo '%s' >> %s", value["_id"], api.TMP_PATH .. "/direct_node_list")) end - if not value.detour and value.server then + if not value.detour and not value.bind_interface and value.server then value.detour = "direct" end if (value.server and not api.datatypes.hostname(value.server)) and not value.realm then @@ -2325,10 +2329,6 @@ function gen_front_dns_config(var) type = "direct", tag = "direct", routing_mark = 255, - domain_resolver = { - server = "direct", - strategy = direct_strategy - } }) local direct_dns_shunt = uci:get(appname, "@global[0]", "direct_dns_shunt") or "" @@ -2398,6 +2398,10 @@ function gen_front_dns_config(var) domain = node_domain }) end + route.default_domain_resolver = { + server = "direct", + strategy = direct_strategy + } end if default_dns_udp_server then diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm b/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm index 2fdb2bcd..115186f4 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_list/node_list.htm @@ -875,6 +875,8 @@ table td, .table .td { p = "URLTest"; } else if (protocol == "_shunt") { p = "<%:Shunt%>"; + } else if (protocol == "_iface") { + p = "<%:Interface%>"; } else if (protocol == "vmess") { p = "VMess"; } else if (protocol == "vless") { @@ -957,7 +959,7 @@ table td, .table .td { var newDom = node_template.cloneNode(true); newDom.classList.add("cbi-rowstyle-" + (i % 2 + 1)); var innerHTML = newDom.innerHTML; - if (auto_detection_time != "icmp" && o["address"] && o["port"]) { + if (auto_detection_time != "icmp" && o["address"]) { innerHTML = innerHTML.split("{{ping}}").join('<%:Test%>'); } else { innerHTML = innerHTML.split("{{ping}}").join('---'); @@ -976,11 +978,13 @@ table td, .table .td { innerHTML = innerHTML.split("{{group}}").join(o["group"] || ""); let node_remarks = get_remarks_name(o); if (show_node_info == "1") { - if (o["address"] && o["port"]) { + let _port = o["port"] || o["hysteria_hop"] || o["hysteria2_hop"]; + if (_port) _port = _port.replace(/:/g, '-'); + if (o["address"] && _port) { let _address = o["address"] if (o["full_address"]) _address = o["full_address"] - node_remarks += "
" + _address + ":" + o["port"] + node_remarks += "
" + _address + ":" + _port } } innerHTML = innerHTML.split("{{remarks}}").join(node_remarks); diff --git a/luci-app-passwall2/po/fa/passwall2.po b/luci-app-passwall2/po/fa/passwall2.po index 08faf7ad..bd98dfe7 100644 --- a/luci-app-passwall2/po/fa/passwall2.po +++ b/luci-app-passwall2/po/fa/passwall2.po @@ -1788,6 +1788,9 @@ msgstr "فقط گره‌های نوع Xray یا Sing-box پشتیبانی می msgid "Chain Proxy" msgstr "پروکسی زنجیره‌ای" +msgid "Outbound Interface" +msgstr "رابط خروجی" + msgid "Landing Node" msgstr "گره فرود (Landing Node)" diff --git a/luci-app-passwall2/po/ru/passwall2.po b/luci-app-passwall2/po/ru/passwall2.po index f871b6e3..3e814ff5 100644 --- a/luci-app-passwall2/po/ru/passwall2.po +++ b/luci-app-passwall2/po/ru/passwall2.po @@ -1789,6 +1789,9 @@ msgstr "Поддерживаются только узлы типа Xray или msgid "Chain Proxy" msgstr "Цепочка прокси" +msgid "Outbound Interface" +msgstr "Исходящий интерфейс" + msgid "Landing Node" msgstr "Сервер выхода" diff --git a/luci-app-passwall2/po/zh-cn/passwall2.po b/luci-app-passwall2/po/zh-cn/passwall2.po index 4878542a..36492fcb 100644 --- a/luci-app-passwall2/po/zh-cn/passwall2.po +++ b/luci-app-passwall2/po/zh-cn/passwall2.po @@ -1774,6 +1774,9 @@ msgstr "仅支持 Xray 或 Sing-box 类型节点。" msgid "Chain Proxy" msgstr "链式代理" +msgid "Outbound Interface" +msgstr "出站接口" + msgid "Landing Node" msgstr "落地节点" diff --git a/luci-app-passwall2/po/zh-tw/passwall2.po b/luci-app-passwall2/po/zh-tw/passwall2.po index fceb5479..ab40100e 100644 --- a/luci-app-passwall2/po/zh-tw/passwall2.po +++ b/luci-app-passwall2/po/zh-tw/passwall2.po @@ -1780,6 +1780,9 @@ msgstr "僅支援 Xray 或 Sing-box 類型節點。" msgid "Chain Proxy" msgstr "鏈式代理" +msgid "Outbound Interface" +msgstr "出站接口" + msgid "Landing Node" msgstr "落地節點" diff --git a/luci-app-passwall2/root/usr/share/passwall2/app.sh b/luci-app-passwall2/root/usr/share/passwall2/app.sh index d4b0cb03..75dff526 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/app.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/app.sh @@ -386,7 +386,7 @@ run_socks() { fi fi - if [ -n "${error_msg}" ] && [ "$(config_n_get $node hysteria2_realms)" = "1" ]; then + if [ -n "${error_msg}" ] && ([ -n "$(config_n_get $node hysteria_hop)" ] || [ -n "$(config_n_get $node hysteria2_hop)" ] || [ "$(config_n_get $node hysteria2_realms)" = "1" ]); then unset error_msg fi diff --git a/luci-app-passwall2/root/usr/share/passwall2/test.sh b/luci-app-passwall2/root/usr/share/passwall2/test.sh index d23bceea..cd1084e9 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/test.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/test.sh @@ -49,6 +49,7 @@ url_test_node() { local _tmp_port=$(get_new_port 48900 tcp,udp) NO_REC_PROCESS=1 /usr/share/${CONFIG}/app.sh run_socks flag="url_test_${node_id}" node=${node_id} bind=127.0.0.1 socks_port=${_tmp_port} config_file=url_test_${node_id}.json sleep 2s + local curlx="socks5h://127.0.0.1:${_tmp_port}" local probeUrl=$(config_t_get global_other url_test_url https://www.google.com/generate_204) result=$(curl --connect-timeout 3 --max-time 5 -o /dev/null -I -skL -w "%{http_code}:%{time_pretransfer}" -x ${curlx} "${probeUrl}") # End the SS plugin process diff --git a/v2ray-core/Makefile b/v2ray-core/Makefile index c625104f..489a891a 100644 --- a/v2ray-core/Makefile +++ b/v2ray-core/Makefile @@ -5,12 +5,12 @@ include $(TOPDIR)/rules.mk PKG_NAME:=v2ray-core -PKG_VERSION:=5.51.0 +PKG_VERSION:=5.51.2 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/v2fly/v2ray-core/tar.gz/v$(PKG_VERSION)? -PKG_HASH:=72d12ea2f4ffb4554a3cbf1341626a23fa075a0fe4ffdfee0b2490ca1eae420d +PKG_HASH:=7316dd294af15b9c92ba7db09fb274aacec919d18e45a594305c8d8b020bcb50 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE