diff --git a/luci-app-mptcp/po/zh_Hans/mptcp.po b/luci-app-mptcp/po/zh_Hans/mptcp.po index 36a27a97..04462968 100644 --- a/luci-app-mptcp/po/zh_Hans/mptcp.po +++ b/luci-app-mptcp/po/zh_Hans/mptcp.po @@ -320,6 +320,82 @@ msgid "" "connection" msgstr "" +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:326 +msgid "All interfaces" +msgstr "所有接口" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:456 +msgid "All interfaces – combined view" +msgstr "所有接口 – 合并视图" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:457 +msgid "All interfaces overlaid, inbound and outbound separately" +msgstr "所有接口叠加显示,入站与出站分开" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:422 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:615 +msgid "Average" +msgstr "平均" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:422 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:611 +msgid "Current" +msgstr "当前" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:693 +msgid "In" +msgstr "入站" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:462 +msgid "Inbound – all interfaces" +msgstr "入站 – 所有接口" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:634 +msgid "Inbound traffic" +msgstr "入站流量" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:394 +msgid "No multipath WAN interface is currently available." +msgstr "当前没有可用的多路径 WAN 接口。" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:700 +msgid "Out" +msgstr "出站" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:468 +msgid "Outbound – all interfaces" +msgstr "出站 – 所有接口" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:640 +msgid "Outbound traffic" +msgstr "出站流量" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:422 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:619 +msgid "Peak" +msgstr "峰值" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:442 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:570 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:585 +msgid "Total" +msgstr "总计" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:404 +msgid "Total in" +msgstr "总入站" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:408 +msgid "Total out" +msgstr "总出站" + +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:540 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:541 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:673 +#: luci-app-mptcp/htdocs/luci-static/resources/view/mptcp/multipath.js:674 +msgid "minutes window, 1 second interval" +msgstr "分钟窗口,1 秒间隔" + #~ msgid "BLEST" #~ msgstr "最好的" diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 128c7a54..d46b5377 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=26.4.15 -PKG_RELEASE:=102 +PKG_RELEASE:=103 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua index 0b4496d3..4b50ab75 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/acl_config.lua @@ -555,7 +555,7 @@ o:depends({singbox_dns_mode = "udp"}) o:depends({singbox_dns_mode = "tcp"}) o = s:option(Value, "remote_dns_doh", translate("Remote DNS DoH")) -o.description = translate("Format: URL[,IP] (omit the latter if URL is an IP)") +o.description = translate("Format: URL[,IP] (optional IP to map the domain in the URL)") o:value("https://1.1.1.1/dns-query", "1.1.1.1 (CloudFlare)") o:value("https://1.1.1.2/dns-query", "1.1.1.2 (CloudFlare-Security)") o:value("https://8.8.4.4/dns-query", "8.8.4.4 (Google)") diff --git a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua index e89cdf51..2f5a8435 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua @@ -444,7 +444,7 @@ o:depends({singbox_dns_mode = "tcp"}) ---- DoH o = s:taboption("DNS", Value, "remote_dns_doh", translate("Remote DNS DoH")) -o.description = translate("Format: URL[,IP] (omit the latter if URL is an IP)") +o.description = translate("Format: URL[,IP] (optional IP to map the domain in the URL)") o.default = o.keylist[1] o:value("https://1.1.1.1/dns-query", "1.1.1.1 (CloudFlare)") o:value("https://1.1.1.2/dns-query", "1.1.1.2 (CloudFlare-Security)") diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index d7db72e6..c4c05f00 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -13,6 +13,7 @@ local version_ge_1_13_0 = api.compare_versions(local_version, ">=", "1.13.0") local GLOBAL = { DNS_SERVER = {}, + DNS_HOSTNAME = {}, VPS_EXCLUDE = {} } @@ -170,6 +171,9 @@ function gen_outbound(flag, node, tag, proxy_table) server_address = _a.hostname server_port = _a.port or 443 server_path = _a.pathname or "" + if _a.hostname and api.datatypes.hostname(_a.hostname) then + GLOBAL.DNS_HOSTNAME[_a.hostname] = true + end end else server_address = node.domain_resolver_dns @@ -1774,24 +1778,25 @@ function gen_config(var) remote_server.server_port = _a.port or 443 remote_server.path = _a.pathname or "" end - if remote_dns_doh_ip and remote_dns_doh_host ~= remote_dns_doh_ip and not api.is_ip(remote_dns_doh_host) then - local domains = {} - local hosts_server = { - tag = "hosts", - type = "hosts", - predefined = {} - } - hosts_server.predefined[remote_dns_doh_host] = remote_dns_doh_ip - table.insert(domains, remote_dns_doh_host) - remote_server_domain_resolver = "hosts" - table.insert(dns.servers, hosts_server) - table.insert(dns.rules, { - query_type = { - "A", "AAAA" - }, - domain = domains, - server = "hosts" - }) + if api.datatypes.hostname(remote_dns_doh_host) then + if remote_dns_doh_ip and remote_dns_doh_host ~= remote_dns_doh_ip and api.is_ip(remote_dns_doh_ip) then + local hosts_server = { + tag = "hosts", + type = "hosts", + predefined = {} + } + hosts_server.predefined[remote_dns_doh_host] = remote_dns_doh_ip + remote_server_domain_resolver = "hosts" + table.insert(dns.servers, hosts_server) + table.insert(dns.rules, { + query_type = { "A", "AAAA" }, + domain = { remote_dns_doh_host }, + server = "hosts" + }) + else + GLOBAL.DNS_HOSTNAME[remote_dns_doh_host] = true + remote_server_domain_resolver = "direct" + end end end @@ -1977,10 +1982,21 @@ function gen_config(var) action = "route", server = v.server.tag, disable_cache = false, - rewrite_ttl = 30, domain = v.domain, }) end + if next(GLOBAL.DNS_HOSTNAME) then + local hostname = {} + for line, _ in pairs(GLOBAL.DNS_HOSTNAME) do + table.insert(hostname, line) + end + if not dns.rules then dns.rules = {} end + table.insert(dns.rules, 1, { + query_type = { "A", "AAAA" }, + domain = hostname, + server = "direct" + }) + end if next(ech_domain) ~= nil then table.insert(dns.servers, { diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index d578aa2d..e1e591de 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -439,7 +439,6 @@ function gen_outbound(flag, node, tag, proxy_table) finalQuery = true, disableCache = false, serveStale = true, - serveExpiredTTL = 30, domains = {} } end @@ -1568,9 +1567,13 @@ function gen_config(var) local _remote_dns_host if remote_dns_doh_url and remote_dns_doh_host then - if remote_dns_doh_ip and remote_dns_doh_host ~= remote_dns_doh_ip and not api.is_ip(remote_dns_doh_host) then - dns.hosts[remote_dns_doh_host] = remote_dns_doh_ip - _remote_dns_host = remote_dns_doh_host + if api.datatypes.hostname(remote_dns_doh_host) then + if remote_dns_doh_ip and remote_dns_doh_host ~= remote_dns_doh_ip and api.is_ip(remote_dns_doh_ip) then + dns.hosts[remote_dns_doh_host] = remote_dns_doh_ip + _remote_dns_host = remote_dns_doh_host + else + GLOBAL.DNS_HOSTNAME[remote_dns_doh_host] = true + end end _remote_dns.address = remote_dns_doh_url _remote_dns.port = tonumber(remote_dns_doh_port) diff --git a/luci-app-passwall/po/zh-cn/passwall.po b/luci-app-passwall/po/zh-cn/passwall.po index 1512d3e9..f813dded 100644 --- a/luci-app-passwall/po/zh-cn/passwall.po +++ b/luci-app-passwall/po/zh-cn/passwall.po @@ -220,8 +220,8 @@ msgstr "请求协议" msgid "Remote DNS DoH" msgstr "远程 DNS DoH" -msgid "Format: URL[,IP] (omit the latter if URL is an IP)" -msgstr "格式:URL[,IP](URL 为 IP 时可省略后半部分)" +msgid "Format: URL[,IP] (optional IP to map the domain in the URL)" +msgstr "格式:URL[,IP](IP 可选,用于绑定 URL 中的域名)" msgid "Notify the DNS server when the DNS query is notified, the location of the client (cannot be a private IP address)." msgstr "用于 DNS 查询时通知 DNS 服务器,客户端所在的地理位置(不能是私有 IP 地址)。" diff --git a/luci-app-passwall/root/usr/share/passwall/utils.sh b/luci-app-passwall/root/usr/share/passwall/utils.sh index f56345a6..bdcd5014 100755 --- a/luci-app-passwall/root/usr/share/passwall/utils.sh +++ b/luci-app-passwall/root/usr/share/passwall/utils.sh @@ -142,9 +142,10 @@ get_ip_port_from() { parse_doh() { local __doh=$1 __url_var=$2 __host_var=$3 __port_var=$4 __bootstrap_var=$5 - __doh=$(echo -e "$__doh" | tr -d ' \t\n') + __doh=$(printf '%s' "$__doh" | tr -d ' \t\n') local __url=${__doh%%,*} local __bootstrap=${__doh#*,} + [ "$__bootstrap" = "$__doh" ] && __bootstrap="" local __host_port=$(lua_api "get_domain_from_url(\"${__url}\")") local __host __port if echo "${__host_port}" | grep -q '^\[.*\]:[0-9]\+$'; then diff --git a/luci-app-sqm-autorate/po/zh_Hans/sqm.po b/luci-app-sqm-autorate/po/zh_Hans/sqm.po index 45eda0b1..2e94455c 100644 --- a/luci-app-sqm-autorate/po/zh_Hans/sqm.po +++ b/luci-app-sqm-autorate/po/zh_Hans/sqm.po @@ -215,3 +215,79 @@ msgstr "" #: applications/luci-app-sqm/htdocs/luci-static/resources/view/network/sqm.js:219 msgid "default" msgstr "默认" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:75 +msgid "Autorate settings" +msgstr "自动速率设置" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:90 +msgid "Enable SQM autorate" +msgstr "启用 SQM 自动速率" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:96 +msgid "Base download speed (kbit/s) (ingress):" +msgstr "基础下载速度 (kbit/s)(入口):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:100 +msgid "Minimum download speed (kbit/s):" +msgstr "最小下载速度 (kbit/s):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:105 +msgid "Maximum download speed (kbit/s):" +msgstr "最大下载速度 (kbit/s):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:110 +msgid "Base upload speed (kbit/s) (egress):" +msgstr "基础上传速度 (kbit/s)(出口):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:114 +msgid "Minimum upload speed (kbit/s):" +msgstr "最小上传速度 (kbit/s):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:119 +msgid "Maximum upload speed (kbit/s):" +msgstr "最大上传速度 (kbit/s):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:136 +msgid "Must be set to cake if autorate is used." +msgstr "如果使用自动速率,必须设置为 cake。" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:251 +msgid "Output monitoring lines showing processing stats" +msgstr "输出显示处理统计信息的监控行" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:255 +msgid "Output monitoring lines showing cake bandwidth changes" +msgstr "输出显示 cake 带宽变化的监控行" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:259 +msgid "Debug" +msgstr "调试" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:263 +msgid "Reflector ping interval in seconds:" +msgstr "反射器 Ping 间隔(秒):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:267 +msgid "Pingers numbers:" +msgstr "Ping 探测器数量:" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:271 +msgid "delay threshold in ms:" +msgstr "延迟阈值(毫秒):" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:275 +msgid "Sleep functionnality" +msgstr "休眠功能" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:279 +msgid "Threshold in Kbit/s below which dl/ul is considered idle" +msgstr "下载/上传速率低于此阈值(Kbit/s)时视为空闲" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:283 +msgid "Time threshold to put pingers to sleep on substained dl/ul achieved rate < idle_threshold" +msgstr "当持续下载/上传速率低于空闲阈值时,使 Ping 探测器休眠的时间阈值" + +#: luci-app-sqm-autorate/htdocs/luci-static/resources/view/network/sqm.js:287 +msgid "Number of seconds to wait on startup:" +msgstr "启动时等待的秒数:" diff --git a/teleproxy/Makefile b/teleproxy/Makefile index 51016da0..b3cf1f34 100644 --- a/teleproxy/Makefile +++ b/teleproxy/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=teleproxy PKG_VERSION:=4.12.2 -PKG_RELEASE:=6 +PKG_RELEASE:=7 PKG_MAINTAINER:=Kosntantine Shevlakov PKG_LICENSE:=GPLv2 diff --git a/teleproxy/files/teleproxy.defaults b/teleproxy/files/teleproxy.defaults index 585f301e..766cb273 100644 --- a/teleproxy/files/teleproxy.defaults +++ b/teleproxy/files/teleproxy.defaults @@ -1,8 +1,8 @@ #!/bin/sh # generate secret key -if uci -q get teleproxy.default.secret >/dev/null || [ -z "$(uci get teleproxy.default.secret)" ]; then +[ -n "$(uci -q get teleproxy.default.secret)" ] || { #SECRET=$(dd if=/dev/urandom bs=16 count=1 2>/dev/null | hexdump -v -e '16/1 "%02x"') SECRET=$(/usr/bin/teleproxy generate-secret) uci set teleproxy.default.secret="$SECRET" uci commit teleproxy -fi +}