From 55924a616541771b67cd77f388be052c62951990 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 1 May 2026 20:23:08 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=B6=20Sync=202026-05-01=2020:23:08?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ddns-go/Makefile | 4 +- luci-app-mosdns/Makefile | 4 +- .../resources/view/mosdns/basic.js | 2 +- .../resources/view/mosdns/update.js | 81 +- luci-app-mosdns/po/templates/mosdns.pot | 1280 +++++++------- luci-app-mosdns/po/zh_Hans/mosdns.po | 1500 +++++++++-------- luci-app-mosdns/root/etc/config/mosdns | 1 + luci-app-mosdns/root/etc/init.d/mosdns | 4 +- .../root/usr/share/mosdns/mosdns.uc | 29 +- .../usr/share/rpcd/acl.d/luci-app-mosdns.json | 4 +- .../root/usr/share/rpcd/ucode/luci.mosdns | 29 + luci-app-passwall/Makefile | 2 +- .../model/cbi/passwall/client/acl_config.lua | 2 +- .../model/cbi/passwall/client/global.lua | 2 +- .../luasrc/passwall/util_sing-box.lua | 3 +- .../luasrc/passwall/util_xray.lua | 3 +- .../root/usr/share/passwall/app.sh | 28 +- luci-app-passwall2/Makefile | 4 +- .../cbi/passwall2/client/shunt_rules.lua | 1 + .../cbi/passwall2/client/type/hysteria2.lua | 1 - .../model/cbi/passwall2/client/type/ray.lua | 7 +- .../model/cbi/passwall2/server/type/ray.lua | 5 + luci-app-passwall2/luasrc/passwall2/api.lua | 24 +- .../luasrc/passwall2/util_hysteria2.lua | 2 +- .../luasrc/passwall2/util_xray.lua | 14 +- .../luasrc/view/passwall2/global/footer.htm | 20 +- .../luasrc/view/passwall2/haproxy/js.htm | 37 +- .../view/passwall2/include/shunt_options.htm | 4 +- .../passwall2/node_config/link_share_man.htm | 21 +- .../view/passwall2/node_subscribe/js.htm | 6 + luci-app-passwall2/po/fa/passwall2.po | 12 + luci-app-passwall2/po/ru/passwall2.po | 12 + luci-app-passwall2/po/zh-cn/passwall2.po | 12 + luci-app-passwall2/po/zh-tw/passwall2.po | 12 + luci-app-passwall2/root/etc/init.d/passwall2 | 9 + .../root/usr/share/passwall2/haproxy_check.sh | 2 +- .../root/usr/share/passwall2/iptables.sh | 18 +- .../root/usr/share/passwall2/nftables.sh | 11 +- .../root/usr/share/passwall2/rule_update.lua | 30 + .../usr/share/passwall2/socks_auto_switch.sh | 14 +- .../root/usr/share/passwall2/subscribe.lua | 79 +- .../root/usr/share/passwall2/utils.sh | 30 + mosdns/Makefile | 2 +- .../207-add-adblock_set-database-plugin.patch | 427 +++++ 44 files changed, 2280 insertions(+), 1514 deletions(-) create mode 100644 mosdns/patches/207-add-adblock_set-database-plugin.patch diff --git a/ddns-go/Makefile b/ddns-go/Makefile index 65ec8938c..217edf023 100644 --- a/ddns-go/Makefile +++ b/ddns-go/Makefile @@ -5,8 +5,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=ddns-go -PKG_VERSION:=6.16.13 -PKG_RELEASE:=11 +PKG_VERSION:=6.17.0 +PKG_RELEASE:=12 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/jeessy2/ddns-go/tar.gz/v$(PKG_VERSION)? diff --git a/luci-app-mosdns/Makefile b/luci-app-mosdns/Makefile index 8f78bfb74..6365a2dc5 100644 --- a/luci-app-mosdns/Makefile +++ b/luci-app-mosdns/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-mosdns -PKG_VERSION:=1.7.1 -PKG_RELEASE:=5 +PKG_VERSION:=1.7.2 +PKG_RELEASE:=6 LUCI_TITLE:=LuCI Support for mosdns LUCI_PKGARCH:=all diff --git a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js index 1c9c0bd09..0425528c7 100644 --- a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js +++ b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js @@ -356,7 +356,7 @@ return view.extend({ o.default = false; o = s.taboption('advanced', form.DynamicList, 'ad_source', _('ADblock Source'), - _('When using custom rule sources, please use rule types supported by MosDNS (domain lists).') + + _('When using custom rule sources, please use rule types supported by MosDNS (domain list or AdGuardHome rules).') + '
' + _('Support for local files, such as: file:///var/mosdns/example.txt')); o.depends('adblock', '1'); diff --git a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js index 5cdb48773..4d5867d72 100644 --- a/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js +++ b/luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js @@ -3,25 +3,80 @@ 'require fs'; 'require ui'; 'require view'; +'require rpc'; + +var callStartUpdate = rpc.declare({ + object: 'luci.mosdns', + method: 'start_update', + expect: { '': {} } +}); + +var callGetUpdateLog = rpc.declare({ + object: 'luci.mosdns', + method: 'get_update_log', + expect: { '': {} } +}); return view.extend({ handleUpdate: function () { - ui.showModal(_('Updating...'), [ + var logTextarea = E('textarea', { + 'class': 'cbi-input-textarea', + 'readonly': 'readonly', + 'style': 'width: 100%; height: 300px; font-family: monospace; font-size: 12px; margin-top: 10px;', + 'placeholder': _('Starting update...') + }); + + var closeButton = E('button', { + 'class': 'btn', + 'style': 'display: none;', + 'click': ui.hideModal + }, _('Close')); + + ui.showModal(_('Updating Database...'), [ E('p', { 'class': 'spinning' }, _('Please wait, this may take a few moments...')), + logTextarea, + E('div', { 'class': 'right' }, [ closeButton ]) ]); - return fs.exec('/usr/share/mosdns/mosdns.uc', ['update']) - .then(function (res) { - ui.hideModal(); - if (res.code === 0) { - ui.addNotification(null, E('p', _('Update success')), 'info'); - } else { - ui.addNotification(null, E('p', res.stderr + '
' + res.stdout), 'warn'); - ui.addNotification(null, E('p', _('Update failed, Please check the network status')), 'error'); + + var pollLog = function() { + return callGetUpdateLog().then(function(res) { + if (res && res.log) { + logTextarea.value = res.log; + logTextarea.scrollTop = logTextarea.scrollHeight; + + if (res.log.match(/UPDATE_FINISHED/)) { + ui.hideModal(); + ui.addNotification(null, E('p', _('Update success')), 'info'); + return false; + } + + if (res.log.match(/Another update is already in progress/)) { + ui.hideModal(); + ui.addNotification(null, E('p', _('Another update is already in progress.')), 'warn'); + return false; + } } - }).catch(function (e) { - ui.hideModal(); - ui.addNotification(null, E('p', _('Update failed: %s').format(e.message)), 'error'); + return true; }); + }; + + return callStartUpdate().then(function(res) { + if (res.success) { + var interval = window.setInterval(function() { + pollLog().then(function(continuePolling) { + if (!continuePolling) { + window.clearInterval(interval); + } + }); + }, 1000); + } else { + ui.hideModal(); + ui.addNotification(null, E('p', res.error || _('Failed to start update.')), 'error'); + } + }).catch(function(e) { + ui.hideModal(); + ui.addNotification(null, E('p', _('Update failed: %s').format(e.message)), 'error'); + }); }, render: function () { @@ -61,7 +116,7 @@ return view.extend({ o.value('geoip', _('Full')); o.value('geoip-only-cn-private', _('Little')); o.rmempty = false; - o.default = 'geoip'; + o.default = 'geoip-only-cn-private'; o = s.option(form.Value, 'github_proxy', _('GitHub Proxy'), _('Update data files with GitHub Proxy, leave blank to disable proxy downloads.')); diff --git a/luci-app-mosdns/po/templates/mosdns.pot b/luci-app-mosdns/po/templates/mosdns.pot index dd4f165c4..80d8a32b6 100644 --- a/luci-app-mosdns/po/templates/mosdns.pot +++ b/luci-app-mosdns/po/templates/mosdns.pot @@ -1,471 +1,464 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-03-20 09:23+0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" +msgstr "Content-Type: text/plain; charset=UTF-8" -#: htdocs/luci-static/resources/view/mosdns/basic.js:31 -#: htdocs/luci-static/resources/view/mosdns/basic.js:33 -#: htdocs/luci-static/resources/view/mosdns/basic.js:110 -#: htdocs/luci-static/resources/view/mosdns/logs.js:70 -msgid "MosDNS" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:31 -msgid "RUNNING" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:33 -msgid "NOT RUNNING" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:95 -msgid "Flushing DNS Cache Success." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:97 -msgid "Flushing DNS Cache Failed, Please check if MosDNS is running." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:111 -msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:133 -msgid "Collecting data..." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:139 -msgid "Basic Options" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:140 -msgid "Advanced Options" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:141 -msgid "Cloudflare Options" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:142 -msgid "API Options" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:143 -msgid "GeoData Export" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:146 -#: htdocs/luci-static/resources/view/mosdns/basic.js:370 -msgid "Enabled" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:150 -msgid "Config File" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:151 -msgid "Default Config" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:152 -msgid "Custom Config" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:155 -msgid "Listen Port" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:160 -msgid "Listen Address" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:164 -msgid "Log Level" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:165 -msgid "Debug" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:166 -msgid "Info" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:167 -msgid "Warning" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:168 -msgid "Error" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:172 -msgid "Log File" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:177 -msgid "DNS Forward" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:177 -msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:181 -msgid "DNS redirect" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:181 -msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:186 -msgid "China DNS prefer IPv4" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:187 -msgid "" -"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is " -"not affected when the destination is IPv6 only" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:191 -msgid "Remote DNS prefer IPv4" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:192 -msgid "" -"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack " -"addresses, and is not affected when the destination is IPv6 only" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:196 -msgid "Custom China DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:196 -msgid "Follow WAN interface DNS if not enabled" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:200 -msgid "Apple domains optimization" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:201 -msgid "" -"For Apple domains equipped with Chinese mainland CDN, always responsive to " -"Chinese CDN IP addresses" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:205 -msgid "China DNS server" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:206 -#: htdocs/luci-static/resources/view/mosdns/basic.js:254 -msgid "Tencent Public DNS (119.29.29.29)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:207 -#: htdocs/luci-static/resources/view/mosdns/basic.js:255 -msgid "Tencent Public DNS (119.28.28.28)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:208 -#: htdocs/luci-static/resources/view/mosdns/basic.js:256 -msgid "Aliyun Public DNS (223.5.5.5)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:209 -#: htdocs/luci-static/resources/view/mosdns/basic.js:257 -msgid "Aliyun Public DNS (223.6.6.6)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:210 -msgid "TrafficRoute Public DNS (180.184.1.1)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:211 -msgid "TrafficRoute Public DNS (180.184.2.2)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:212 -#: htdocs/luci-static/resources/view/mosdns/basic.js:258 -msgid "Xinfeng Public DNS (114.114.114.114)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:213 -#: htdocs/luci-static/resources/view/mosdns/basic.js:259 -msgid "Xinfeng Public DNS (114.114.115.115)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:214 -#: htdocs/luci-static/resources/view/mosdns/basic.js:260 -msgid "Baidu Public DNS (180.76.76.76)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:215 -msgid "Tencent Public DNS (DNS over HTTPS)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:216 -msgid "Aliyun Public DNS (DNS over QUIC)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:217 -msgid "Aliyun Public DNS (DNS over HTTPS)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:218 -msgid "Aliyun Public DNS (DNS over HTTP/3)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:219 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:219 msgid "360 Public DNS (DNS over HTTPS)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:223 -msgid "Remote DNS server" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:358 +msgid "ADblock Source" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:224 -#: htdocs/luci-static/resources/view/mosdns/basic.js:241 -#: htdocs/luci-static/resources/view/mosdns/basic.js:262 -msgid "CloudFlare Public DNS (1.1.1.1)" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:399 +msgid "API Listen port" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:225 -#: htdocs/luci-static/resources/view/mosdns/basic.js:242 -msgid "CloudFlare Public DNS (1.0.0.1)" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:142 +msgid "API Options" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:226 -#: htdocs/luci-static/resources/view/mosdns/basic.js:243 -#: htdocs/luci-static/resources/view/mosdns/basic.js:261 -msgid "Google Public DNS (8.8.8.8)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:227 -#: htdocs/luci-static/resources/view/mosdns/basic.js:244 -msgid "Google Public DNS (8.8.4.4)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:228 -#: htdocs/luci-static/resources/view/mosdns/basic.js:245 -msgid "Quad9 Public DNS (9.9.9.9)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:229 -#: htdocs/luci-static/resources/view/mosdns/basic.js:246 -msgid "Quad9 Public DNS (149.112.112.112)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:230 -#: htdocs/luci-static/resources/view/mosdns/basic.js:247 -msgid "Cisco Public DNS (208.67.222.222)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:231 -#: htdocs/luci-static/resources/view/mosdns/basic.js:248 -msgid "Cisco Public DNS (208.67.220.220)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:235 -msgid "Custom Stream Media DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:236 -msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:240 -msgid "Streaming Media DNS server" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:252 -msgid "Bootstrap DNS servers" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:253 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:31 msgid "" -"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT " -"resolvers you specify as upstreams" +"Added domain names always permit resolution using 'local DNS' with the " +"highest priority (one domain per line, supports domain matching rules)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:267 -msgid "Concurrent" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:268 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:121 msgid "" -"DNS query request concurrency, The number of upstream DNS servers that are " -"allowed to initiate requests at the same time" +"Added domain names will always use 'Local DNS' for resolution, with a forced " +"TTL of 5 seconds, and results will not be cached (one domain per line, " +"supports domain matching rules)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:273 -msgid "Idle Timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:274 -msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:279 -msgid "TCP/DoT Connection Multiplexing" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:280 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:91 msgid "" -"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode" +"Added domain names will always use 'Remote DNS' for resolution (one domain " +"per line, supports domain matching rules)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:285 -msgid "Disable TLS Certificate" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:286 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:61 msgid "" -"Disable TLS Servers certificate validation, Can be useful if system CA " -"certificate expires or the system time is out of order" +"Added domain names will block DNS resolution (one domain per line, supports " +"domain matching rules)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:292 -msgid "Enable EDNS client subnet" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:297 -msgid "IP Address" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:298 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:211 msgid "" -"Please provide the IP address you use when accessing foreign websites. This " -"IP subnet (0/24) will be used as the ECS address for Remote / Streaming " -"Media DNS requests" +"Added domain names will block PTR requests (one domain per line, supports " +"domain matching rules)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:299 -msgid "" -"This feature is typically used when using a self-built DNS server as an " -"Remote / Streaming Media DNS upstream (requires support from the upstream " -"server)" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:140 +msgid "Advanced Options" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:303 -msgid "Prevent DNS Leaks" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:208 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:256 +msgid "Aliyun Public DNS (223.5.5.5)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:304 -msgid "Enable this option fallback policy forces forwarding to remote DNS" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:209 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:257 +msgid "Aliyun Public DNS (223.6.6.6)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:309 -msgid "Enable DNS Cache" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:218 +msgid "Aliyun Public DNS (DNS over HTTP/3)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:314 -msgid "DNS Cache Size" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:217 +msgid "Aliyun Public DNS (DNS over HTTPS)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:319 -msgid "Lazy Cache TTL" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:216 +msgid "Aliyun Public DNS (DNS over QUIC)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:320 -msgid "" -"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0." +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:55 +msgid "Another update is already in progress." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:325 -msgid "Cache Dump" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:200 +msgid "Apple domains optimization" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:326 -msgid "Save the cache locally and reload the cache dump on the next startup" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:332 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:332 msgid "Auto Save Cache Interval" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:337 -msgid "Minimum TTL" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:338 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:86 msgid "" -"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating " -"no modification" +"Automatically update GeoIP and GeoSite databases as well as ad filtering " +"rules through scheduled tasks." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:343 -msgid "Maximum TTL" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:214 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:260 +msgid "Baidu Public DNS (180.76.76.76)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:344 -msgid "" -"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating " -"no modification" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:139 +msgid "Basic Options" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:349 -msgid "Disable RR Type 65 (HTTPS/SVCB)" +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:14 +msgid "Basic Setting" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:350 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:350 msgid "" "Block DNS RR Type 65 records (HTTPS/SVCB, used for HTTP/3, ECH, etc.), force " "using only A/AAAA records." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:354 -msgid "Enable DNS ADblock" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:19 +msgid "Block Lists" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:358 -msgid "ADblock Source" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:24 +msgid "Block PTR" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:359 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:252 +msgid "Bootstrap DNS servers" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:253 msgid "" -"When using custom rule sources, please use rule types supported by MosDNS " -"(domain lists)." +"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT " +"resolvers you specify as upstreams" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:361 -msgid "Support for local files, such as: file:///var/mosdns/example.txt" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:325 +msgid "Cache Dump" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:371 -msgid "" -"Match the parsing result with the Cloudflare IP ranges, and when there is a " -"successful match, use the 'Custom IP' as the parsing result " -"(experimental feature)" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:130 +msgid "Check And Update" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:377 -msgid "Custom IP" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:128 +msgid "Check And Update GeoData." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:382 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:186 +msgid "China DNS prefer IPv4" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:205 +msgid "China DNS server" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:231 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:248 +msgid "Cisco Public DNS (208.67.220.220)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:230 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:247 +msgid "Cisco Public DNS (208.67.222.222)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:65 +msgid "Clear logs" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:33 +msgid "Close" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:225 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:242 +msgid "CloudFlare Public DNS (1.0.0.1)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:224 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:241 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:262 +msgid "CloudFlare Public DNS (1.1.1.1)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:382 msgid "Cloudflare IP Ranges" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:383 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:141 +msgid "Cloudflare Options" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:133 +msgid "Collecting data..." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:267 +msgid "Concurrent" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:150 +msgid "Config File" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:430 +msgid "Configuration Editor" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196 +msgid "Custom China DNS" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:152 +msgid "Custom Config" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:151 +msgid "" +"Custom Hosts rewrite, for example: baidu.com 10.0.0.1 (one rule per line, " +"supports domain matching rules)." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:377 +msgid "Custom IP" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:235 +msgid "Custom Stream Media DNS" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:21 +msgid "DDNS Lists" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:314 +msgid "DNS Cache Size" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177 +msgid "DNS Forward" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:268 +msgid "" +"DNS query request concurrency, The number of upstream DNS servers that are " +"allowed to initiate requests at the same time" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181 +msgid "DNS redirect" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:129 +msgid "Database Update" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:165 +msgid "Debug" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:151 +msgid "Default Config" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:349 +msgid "Disable RR Type 65 (HTTPS/SVCB)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:285 +msgid "Disable TLS Certificate" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:286 +msgid "" +"Disable TLS Servers certificate validation, Can be useful if system CA " +"certificate expires or the system time is out of order" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:274 +msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:91 +msgid "Enable Auto Database Update" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:354 +msgid "Enable DNS ADblock" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:309 +msgid "Enable DNS Cache" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:292 +msgid "Enable EDNS client subnet" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:280 +msgid "" +"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:304 +msgid "Enable this option fallback policy forces forwarding to remote DNS" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:146 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:370 +msgid "Enabled" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:463 +msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:458 +msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:168 +msgid "Error" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:95 +msgid "Every Day" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:100 +msgid "Every Friday" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:96 +msgid "Every Monday" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:101 +msgid "Every Saturday" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:102 +msgid "Every Sunday" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:99 +msgid "Every Thursday" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:97 +msgid "Every Tuesday" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:98 +msgid "Every Wednesday" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:459 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:464 +msgid "Export directory: /var/mosdns" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:43 +msgid "Failed to clean logs." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:74 +msgid "Failed to start update." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:407 +msgid "Flush DNS Cache" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:97 +msgid "Flushing DNS Cache Failed, Please check if MosDNS is running." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:95 +msgid "Flushing DNS Cache Success." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:405 +msgid "" +"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS " +"cache." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196 +msgid "Follow WAN interface DNS if not enabled" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:201 +msgid "" +"For Apple domains equipped with Chinese mainland CDN, always responsive to " +"Chinese CDN IP addresses" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181 +msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177 +msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:116 +msgid "Full" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:114 +msgid "Full: includes all Countries and Private IP addresses." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:143 +msgid "GeoData Export" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:462 +msgid "GeoIP Tags" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:111 +msgid "GeoIP Type" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:457 +msgid "GeoSite Tags" +msgstr "" + +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:30 +msgid "Geodata Update" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:121 +msgid "GitHub Proxy" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:227 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:244 +msgid "Google Public DNS (8.8.4.4)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:226 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:243 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:261 +msgid "Google Public DNS (8.8.8.8)" +msgstr "" + +#: luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json:3 +msgid "Grant UCI access for luci-app-mosdns" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:20 +msgid "Grey Lists" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:22 +msgid "Hosts" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:297 +msgid "IP Address" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:383 msgid "" "IPv4 CIDR: https://www.cloudflare.com/ips-v4
IPv6 CIDR: " msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:402 -msgid "API Listen port" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:408 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:187 msgid "" -"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS " -"cache." +"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is " +"not affected when the destination is IPv6 only" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:410 -msgid "Flush DNS Cache" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:433 -msgid "Configuration Editor" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:434 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:192 msgid "" -"This is the content of the file '/etc/mosdns/config_custom.yaml' from which " -"your MosDNS configuration will be generated. Only accepts " -"configuration content in yaml format." +"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack " +"addresses, and is not affected when the destination is IPv6 only" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:455 -#: htdocs/luci-static/resources/view/mosdns/rules.js:53 -#: htdocs/luci-static/resources/view/mosdns/rules.js:59 -#: htdocs/luci-static/resources/view/mosdns/rules.js:83 -#: htdocs/luci-static/resources/view/mosdns/rules.js:89 -#: htdocs/luci-static/resources/view/mosdns/rules.js:113 -#: htdocs/luci-static/resources/view/mosdns/rules.js:119 -#: htdocs/luci-static/resources/view/mosdns/rules.js:143 -#: htdocs/luci-static/resources/view/mosdns/rules.js:149 -#: htdocs/luci-static/resources/view/mosdns/rules.js:173 -#: htdocs/luci-static/resources/view/mosdns/rules.js:179 -#: htdocs/luci-static/resources/view/mosdns/rules.js:203 -#: htdocs/luci-static/resources/view/mosdns/rules.js:209 -#: htdocs/luci-static/resources/view/mosdns/rules.js:233 -#: htdocs/luci-static/resources/view/mosdns/rules.js:239 -#: htdocs/luci-static/resources/view/mosdns/rules.js:263 -#: htdocs/luci-static/resources/view/mosdns/rules.js:269 -#, javascript-format -msgid "Unable to save contents: %s" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:273 +msgid "Idle Timeout" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:460 -msgid "GeoSite Tags" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:166 +msgid "Info" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:461 -msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:319 +msgid "Lazy Cache TTL" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:462 -#: htdocs/luci-static/resources/view/mosdns/basic.js:467 -msgid "Export directory: /var/mosdns" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:320 +msgid "" +"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:465 -msgid "GeoIP Tags" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:160 +msgid "Listen Address" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/basic.js:466 -msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:155 +msgid "Listen Port" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/logs.js:27 -msgid "No log data." +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:117 +msgid "Little" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/logs.js:43 -msgid "Failed to clean logs." +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:112 +msgid "Little: only include Mainland China and Private IP addresses." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/logs.js:65 -msgid "Clear logs" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/logs.js:70 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70 msgid "Log Data" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/logs.js:75 -#, javascript-format -msgid "Refresh every %s seconds." +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:172 +msgid "Log File" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:17 -msgid "Rule Settings" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:164 +msgid "Log Level" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:18 -msgid "The list of rules only apply to 'Default Config' profiles." +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:38 +msgid "Logs" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:24 -msgid "White Lists" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:371 +msgid "" +"Match the parsing result with the Cloudflare IP ranges, and when there is a " +"successful match, use the 'Custom IP' as the parsing result (experimental " +"feature)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:25 -msgid "Block Lists" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:343 +msgid "Maximum TTL" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:26 -msgid "Grey Lists" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:337 +msgid "Minimum TTL" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:27 -msgid "DDNS Lists" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:344 +msgid "" +"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating " +"no modification" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:28 -msgid "Hosts" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:338 +msgid "" +"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating " +"no modification" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:29 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:110 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70 +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:3 +msgid "MosDNS" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:111 +msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33 +msgid "NOT RUNNING" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:236 +msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:27 +msgid "No log data." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:298 +msgid "" +"Please provide the IP address you use when accessing foreign websites. This " +"IP subnet (0/24) will be used as the ECS address for Remote / Streaming " +"Media DNS requests" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:36 +msgid "Please wait, this may take a few moments..." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:303 +msgid "Prevent DNS Leaks" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:229 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:246 +msgid "Quad9 Public DNS (149.112.112.112)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:228 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:245 +msgid "Quad9 Public DNS (9.9.9.9)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31 +msgid "RUNNING" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:23 msgid "Redirect" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:30 -msgid "Block PTR" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:31 -msgid "Streaming Media" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:37 -msgid "" -"Added domain names always permit resolution using 'local DNS' with the " -"highest priority (one domain per line, supports domain matching rules)." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:67 -msgid "" -"Added domain names will block DNS resolution (one domain per line, supports " -"domain matching rules)." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:97 -msgid "" -"Added domain names will always use 'Remote DNS' for resolution (one domain " -"per line, supports domain matching rules)." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:127 -msgid "" -"Added domain names will always use 'Local DNS' for resolution, with a forced " -"TTL of 5 seconds, and results will not be cached (one domain per line, " -"supports domain matching rules)." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:157 -msgid "" -"Custom Hosts rewrite, for example: baidu.com 10.0.0.1 (one rule per line, " -"supports domain matching rules)." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:187 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:181 msgid "" "Redirecting requests for domain names. Request domain A, but return records " "for domain B, for example: baidu.com qq.com (one rule per line)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:217 -msgid "" -"Added domain names will block PTR requests (one domain per line, supports " -"domain matching rules)." +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:75 +msgid "Refresh every %s seconds." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:247 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:191 +msgid "Remote DNS prefer IPv4" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:223 +msgid "Remote DNS server" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:11 +msgid "Rule Settings" +msgstr "" + +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:22 +msgid "Rules" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:326 +msgid "Save the cache locally and reload the cache dump on the next startup" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:26 +msgid "Starting update..." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:25 +msgid "Streaming Media" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:240 +msgid "Streaming Media DNS server" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:361 +msgid "Support for local files, such as: file:///var/mosdns/example.txt" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:279 +msgid "TCP/DoT Connection Multiplexing" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:207 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:255 +msgid "Tencent Public DNS (119.28.28.28)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:206 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:254 +msgid "Tencent Public DNS (119.29.29.29)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:215 +msgid "Tencent Public DNS (DNS over HTTPS)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:12 +msgid "The list of rules only apply to 'Default Config' profiles." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:299 +msgid "" +"This feature is typically used when using a self-built DNS server as an " +"Remote / Streaming Media DNS upstream (requires support from the upstream " +"server)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:431 +msgid "" +"This is the content of the file '/etc/mosdns/config_custom.yaml' from which " +"your MosDNS configuration will be generated. Only accepts configuration " +"content in yaml format." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:210 +msgid "TrafficRoute Public DNS (180.184.1.1)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:211 +msgid "TrafficRoute Public DNS (180.184.2.2)" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:452 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:47 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:53 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:77 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:83 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:107 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:113 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:137 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:143 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:167 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:173 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:197 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:203 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:227 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:233 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:257 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:263 +msgid "Unable to save contents: %s" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:94 +msgid "Update Cycle" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:85 +msgid "Update GeoIP & GeoSite databases" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:105 +msgid "Update Time" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:122 +msgid "" +"Update data files with GitHub Proxy, leave blank to disable proxy downloads." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:78 +msgid "Update failed: %s" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:49 +msgid "Update success" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:35 +msgid "Updating Database..." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:167 +msgid "Warning" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:241 msgid "" "When enabling 'Custom Stream Media DNS', added domains will always use the " "'Streaming Media DNS server' for resolution (one domain per line, supports " "domain matching rules)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/rules.js:284 -#: htdocs/luci-static/resources/view/mosdns/rules.js:288 -#, javascript-format -msgid "Failed to restart mosdns: %s" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:9 -msgid "Updating..." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:10 -msgid "Please wait, this may take a few moments..." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:16 -msgid "Update success" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:19 -msgid "Update failed, Please check the network status" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:23 -#, javascript-format -msgid "Update failed: %s" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:30 -msgid "Update GeoIP & GeoSite databases" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:31 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:359 msgid "" -"Automatically update GeoIP and GeoSite databases as well as ad filtering " -"rules through scheduled tasks." +"When using custom rule sources, please use rule types supported by MosDNS " +"(domain list or AdGuardHome rules)." msgstr "" -#: htdocs/luci-static/resources/view/mosdns/update.js:36 -msgid "Enable Auto Database Update" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:18 +msgid "White Lists" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/update.js:39 -msgid "Update Cycle" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:212 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:258 +msgid "Xinfeng Public DNS (114.114.114.114)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/update.js:40 -msgid "Every Day" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:213 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:259 +msgid "Xinfeng Public DNS (114.114.115.115)" msgstr "" -#: htdocs/luci-static/resources/view/mosdns/update.js:41 -msgid "Every Monday" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:42 -msgid "Every Tuesday" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:43 -msgid "Every Wednesday" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:44 -msgid "Every Thursday" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:45 -msgid "Every Friday" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:46 -msgid "Every Saturday" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:47 -msgid "Every Sunday" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:50 -msgid "Update Time" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:56 -msgid "GeoIP Type" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:57 -msgid "Little: only include Mainland China and Private IP addresses." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:59 -msgid "Full: includes all Countries and Private IP addresses." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:61 -msgid "Full" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:62 -msgid "Little" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:66 -msgid "GitHub Proxy" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:67 -msgid "" -"Update data files with GitHub Proxy, leave blank to disable proxy downloads." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:68 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:123 msgid "https://gh-proxy.com" msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:73 -msgid "Check And Update GeoData." -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:74 -msgid "Database Update" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:75 -msgid "Check And Update" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:14 -msgid "Basic Setting" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:22 -msgid "Rules" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:30 -msgid "Geodata Update" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:38 -msgid "Logs" -msgstr "" diff --git a/luci-app-mosdns/po/zh_Hans/mosdns.po b/luci-app-mosdns/po/zh_Hans/mosdns.po index 00d434c9b..742b8c305 100644 --- a/luci-app-mosdns/po/zh_Hans/mosdns.po +++ b/luci-app-mosdns/po/zh_Hans/mosdns.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-03-20 09:23+0800\n" -"PO-Revision-Date: 2026-03-19 20:33+0800\n" +"PO-Revision-Date: 2026-05-01 09:13+0800\n" "Last-Translator: sbwml \n" "Language-Team: Chinese\n" "Language: zh_Hans\n" @@ -11,605 +11,23 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: htdocs/luci-static/resources/view/mosdns/basic.js:31 -#: htdocs/luci-static/resources/view/mosdns/basic.js:33 -#: htdocs/luci-static/resources/view/mosdns/basic.js:110 -#: htdocs/luci-static/resources/view/mosdns/logs.js:70 -msgid "MosDNS" -msgstr "MosDNS" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:31 -msgid "RUNNING" -msgstr "运行中" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:33 -msgid "NOT RUNNING" -msgstr "未运行" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:95 -msgid "Flushing DNS Cache Success." -msgstr "刷新 DNS 缓存成功" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:97 -msgid "Flushing DNS Cache Failed, Please check if MosDNS is running." -msgstr "刷新 DNS 缓存失败,请检查 MosDNS 状态是否在运行中。" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:111 -msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter." -msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:133 -msgid "Collecting data..." -msgstr "获取数据中..." - -#: htdocs/luci-static/resources/view/mosdns/basic.js:139 -msgid "Basic Options" -msgstr "基本选项" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:140 -msgid "Advanced Options" -msgstr "高级选项" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:141 -msgid "Cloudflare Options" -msgstr "Cloudflare 选项" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:142 -msgid "API Options" -msgstr "API 选项" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:143 -msgid "GeoData Export" -msgstr "GeoData 导出" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:146 -#: htdocs/luci-static/resources/view/mosdns/basic.js:370 -msgid "Enabled" -msgstr "启用" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:150 -msgid "Config File" -msgstr "配置文件" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:151 -msgid "Default Config" -msgstr "内置预设" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:152 -msgid "Custom Config" -msgstr "自定义" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:155 -msgid "Listen Port" -msgstr "监听端口" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:160 -msgid "Listen Address" -msgstr "监听地址" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:164 -msgid "Log Level" -msgstr "日志等级" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:165 -msgid "Debug" -msgstr "调试" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:166 -msgid "Info" -msgstr "信息" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:167 -msgid "Warning" -msgstr "警告" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:168 -msgid "Error" -msgstr "错误" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:172 -msgid "Log File" -msgstr "日志文件" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:177 -msgid "DNS Forward" -msgstr "DNS 转发" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:177 -msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS" -msgstr "将 Dnsmasq 域名解析请求转发到 MosDNS 服务器" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:181 -msgid "DNS redirect" -msgstr "DNS 重定向" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:181 -msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking" -msgstr "强制将所有本地 DNS 查询重定向到 MosDNS,即 DNS 劫持。" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:186 -msgid "China DNS prefer IPv4" -msgstr "国内 DNS 首选 IPv4" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:187 -msgid "" -"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is " -"not affected when the destination is IPv6 only" -msgstr "国内 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:191 -msgid "Remote DNS prefer IPv4" -msgstr "远程 DNS 首选 IPv4" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:192 -msgid "" -"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack " -"addresses, and is not affected when the destination is IPv6 only" -msgstr "远程 / 流媒体 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:196 -msgid "Custom China DNS" -msgstr "自定义国内 DNS" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:196 -msgid "Follow WAN interface DNS if not enabled" -msgstr "不启用则使用 WAN 接口 DNS" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:200 -msgid "Apple domains optimization" -msgstr "Apple 域名解析优化" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:201 -msgid "" -"For Apple domains equipped with Chinese mainland CDN, always responsive to " -"Chinese CDN IP addresses" -msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:205 -msgid "China DNS server" -msgstr "国内 DNS 服务器" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:206 -#: htdocs/luci-static/resources/view/mosdns/basic.js:254 -msgid "Tencent Public DNS (119.29.29.29)" -msgstr "腾讯公共 DNS(119.29.29.29)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:207 -#: htdocs/luci-static/resources/view/mosdns/basic.js:255 -msgid "Tencent Public DNS (119.28.28.28)" -msgstr "腾讯公共 DNS(119.28.28.28)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:208 -#: htdocs/luci-static/resources/view/mosdns/basic.js:256 -msgid "Aliyun Public DNS (223.5.5.5)" -msgstr "阿里云公共 DNS(223.5.5.5)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:209 -#: htdocs/luci-static/resources/view/mosdns/basic.js:257 -msgid "Aliyun Public DNS (223.6.6.6)" -msgstr "阿里云公共 DNS(223.6.6.6)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:210 -msgid "TrafficRoute Public DNS (180.184.1.1)" -msgstr "火山引擎公共 DNS(180.184.1.1)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:211 -msgid "TrafficRoute Public DNS (180.184.2.2)" -msgstr "火山引擎公共 DNS(180.184.2.2)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:212 -#: htdocs/luci-static/resources/view/mosdns/basic.js:258 -msgid "Xinfeng Public DNS (114.114.114.114)" -msgstr "信风公共 DNS(114.114.114.114)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:213 -#: htdocs/luci-static/resources/view/mosdns/basic.js:259 -msgid "Xinfeng Public DNS (114.114.115.115)" -msgstr "信风公共 DNS(114.114.115.115)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:214 -#: htdocs/luci-static/resources/view/mosdns/basic.js:260 -msgid "Baidu Public DNS (180.76.76.76)" -msgstr "百度公共 DNS(180.76.76.76)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:215 -msgid "Tencent Public DNS (DNS over HTTPS)" -msgstr "腾讯公共 DNS(DNS over HTTPS)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:216 -msgid "Aliyun Public DNS (DNS over QUIC)" -msgstr "阿里云公共 DNS(DNS over QUIC)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:217 -msgid "Aliyun Public DNS (DNS over HTTPS)" -msgstr "阿里云公共 DNS(DNS over HTTPS)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:218 -msgid "Aliyun Public DNS (DNS over HTTP/3)" -msgstr "阿里云公共 DNS(DNS over HTTP/3)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:219 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:219 msgid "360 Public DNS (DNS over HTTPS)" msgstr "360 安全 DNS(DNS over HTTPS)" -#: htdocs/luci-static/resources/view/mosdns/basic.js:223 -msgid "Remote DNS server" -msgstr "远程 DNS 服务器" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:224 -#: htdocs/luci-static/resources/view/mosdns/basic.js:241 -#: htdocs/luci-static/resources/view/mosdns/basic.js:262 -msgid "CloudFlare Public DNS (1.1.1.1)" -msgstr "CloudFlare 公共 DNS(1.1.1.1)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:225 -#: htdocs/luci-static/resources/view/mosdns/basic.js:242 -msgid "CloudFlare Public DNS (1.0.0.1)" -msgstr "CloudFlare 公共 DNS(1.0.0.1)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:226 -#: htdocs/luci-static/resources/view/mosdns/basic.js:243 -#: htdocs/luci-static/resources/view/mosdns/basic.js:261 -msgid "Google Public DNS (8.8.8.8)" -msgstr "谷歌公共 DNS(8.8.8.8)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:227 -#: htdocs/luci-static/resources/view/mosdns/basic.js:244 -msgid "Google Public DNS (8.8.4.4)" -msgstr "谷歌公共 DNS(8.8.4.4)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:228 -#: htdocs/luci-static/resources/view/mosdns/basic.js:245 -msgid "Quad9 Public DNS (9.9.9.9)" -msgstr "Quad9 公共 DNS(9.9.9.9)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:229 -#: htdocs/luci-static/resources/view/mosdns/basic.js:246 -msgid "Quad9 Public DNS (149.112.112.112)" -msgstr "Quad9 公共 DNS(149.112.112.112)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:230 -#: htdocs/luci-static/resources/view/mosdns/basic.js:247 -msgid "Cisco Public DNS (208.67.222.222)" -msgstr "思科公共 DNS(208.67.222.222)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:231 -#: htdocs/luci-static/resources/view/mosdns/basic.js:248 -msgid "Cisco Public DNS (208.67.220.220)" -msgstr "思科公共 DNS(208.67.220.220)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:235 -msgid "Custom Stream Media DNS" -msgstr "自定义流媒体 DNS" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:236 -msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS" -msgstr "自定义 Netflix、Disney+、Hulu 以及 “流媒体” 规则列表的 DNS 服务器" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:240 -msgid "Streaming Media DNS server" -msgstr "流媒体 DNS 服务器" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:252 -msgid "Bootstrap DNS servers" -msgstr "Bootstrap DNS 服务器" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:253 -msgid "" -"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT " -"resolvers you specify as upstreams" -msgstr "Bootstrap DNS 服务器用于解析您指定为上游的 DoH / DoT 解析器的 IP 地址" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:267 -msgid "Concurrent" -msgstr "DNS 服务器并发数(默认 2)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:268 -msgid "" -"DNS query request concurrency, The number of upstream DNS servers that are " -"allowed to initiate requests at the same time" -msgstr "DNS 查询请求并发数,允许同时发起请求的上游 DNS 服务器数量" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:273 -msgid "Idle Timeout" -msgstr "空闲超时" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:274 -msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)" -msgstr "DoH/TCP/DoT 连接复用空闲保持时间(默认 30 秒)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:279 -msgid "TCP/DoT Connection Multiplexing" -msgstr "TCP/DoT 连接复用" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:280 -msgid "" -"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode" -msgstr "启用 TCP/DoT RFC 7766 新型 Query Pipelining 连接复用模式" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:285 -msgid "Disable TLS Certificate" -msgstr "禁用 TLS 证书" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:286 -msgid "" -"Disable TLS Servers certificate validation, Can be useful if system CA " -"certificate expires or the system time is out of order" -msgstr "" -"禁用 TLS 服务器证书验证,当系统 CA 证书过期或系统时间错乱时,本选项可能会有用" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:292 -msgid "Enable EDNS client subnet" -msgstr "启用 EDNS 客户端子网" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:297 -msgid "IP Address" -msgstr "IP 地址" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:298 -msgid "" -"Please provide the IP address you use when accessing foreign websites. This " -"IP subnet (0/24) will be used as the ECS address for Remote / Streaming " -"Media DNS requests" -msgstr "" -"请提供您在访问国外网站时使用的 IP 地址,这个 IP 子网(0/24)将用作 远程 / 流" -"媒体 DNS 请求的 ECS 地址" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:299 -msgid "" -"This feature is typically used when using a self-built DNS server as an " -"Remote / Streaming Media DNS upstream (requires support from the upstream " -"server)" -msgstr "" -"此功能通常在使用自建 DNS 服务器作为 远程 / 流媒体 DNS 上游时使用(需要上游服" -"务器的支持)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:303 -msgid "Prevent DNS Leaks" -msgstr "防止 DNS 泄漏" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:304 -msgid "Enable this option fallback policy forces forwarding to remote DNS" -msgstr "启用此选项 fallback 策略会强制转发到远程 DNS" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:309 -msgid "Enable DNS Cache" -msgstr "启用 DNS 缓存" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:314 -msgid "DNS Cache Size" -msgstr "DNS 缓存大小" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:319 -msgid "Lazy Cache TTL" -msgstr "乐观缓存 TTL" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:320 -msgid "" -"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0." -msgstr "乐观缓存生存时间(单位:秒),要禁用乐观缓存,请设置为 0" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:325 -msgid "Cache Dump" -msgstr "自动保存缓存" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:326 -msgid "Save the cache locally and reload the cache dump on the next startup" -msgstr "保存缓存到本地文件,以供下次启动时重新载入使用" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:332 -msgid "Auto Save Cache Interval" -msgstr "自动保存缓存间隔(秒)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:337 -msgid "Minimum TTL" -msgstr "覆盖最小 TTL 值(默认 0)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:338 -msgid "" -"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating " -"no modification" -msgstr "修改 DNS 应答结果的最小 TTL 值 (秒),0 表示不修改" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:343 -msgid "Maximum TTL" -msgstr "覆盖最大 TTL 值(默认 0)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:344 -msgid "" -"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating " -"no modification" -msgstr "修改 DNS 应答结果的最大 TTL 值(秒),0 表示不修改" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:349 -msgid "Disable RR Type 65 (HTTPS/SVCB)" -msgstr "禁用 RR Type 65 (HTTPS/SVCB)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:350 -msgid "" -"Block DNS RR Type 65 records (HTTPS/SVCB, used for HTTP/3, ECH, etc.), force " -"using only A/AAAA records." -msgstr "" -"屏蔽 DNS 类型 65 记录(HTTPS/SVCB,用于 HTTP/3、ECH 等),强制仅使用 A/AAAA " -"解析。" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:354 -msgid "Enable DNS ADblock" -msgstr "启用 DNS 广告过滤" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:358 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:358 msgid "ADblock Source" msgstr "广告过滤规则来源" -#: htdocs/luci-static/resources/view/mosdns/basic.js:359 -msgid "" -"When using custom rule sources, please use rule types supported by MosDNS " -"(domain lists)." -msgstr "使用自定义规则来源时,请使用 MosDNS 支持的规则类型(域名列表)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:361 -msgid "Support for local files, such as: file:///var/mosdns/example.txt" -msgstr "支持本地文件,例如:file:///var/mosdns/example.txt" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:371 -#, fuzzy -msgid "" -"Match the parsing result with the Cloudflare IP ranges, and when there is a " -"successful match, use the 'Custom IP' as the parsing result " -"(experimental feature)" -msgstr "" -"将解析结果与 Cloudflare IP 范围进行匹配,当匹配成功时,使用 “自选 IP” 作为解" -"析结果(实验性功能)" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:377 -msgid "Custom IP" -msgstr "自选 IP" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:382 -msgid "Cloudflare IP Ranges" -msgstr "Cloudflare IP 范围" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:383 -msgid "" -"IPv4 CIDR: https://www.cloudflare.com/ips-v4
IPv6 CIDR: https://www.cloudflare.com/ips-" -"v6" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:402 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:399 msgid "API Listen port" msgstr "API 监听端口" -#: htdocs/luci-static/resources/view/mosdns/basic.js:408 -msgid "" -"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS " -"cache." -msgstr "刷新 DNS 缓存会清空 MosDNS 所有 IP 地址和 DNS 解析缓存。" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:142 +msgid "API Options" +msgstr "API 选项" -#: htdocs/luci-static/resources/view/mosdns/basic.js:410 -msgid "Flush DNS Cache" -msgstr "刷新 DNS 缓存" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:433 -msgid "Configuration Editor" -msgstr "配置编辑器" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:434 -#, fuzzy -msgid "" -"This is the content of the file '/etc/mosdns/config_custom.yaml' from which " -"your MosDNS configuration will be generated. Only accepts " -"configuration content in yaml format." -msgstr "" -"这是文件 “/etc/mosdns/config_custom.yaml” 的内容,您的 MosDNS 配置将从此文件" -"生成。仅接受 yaml 格式的配置内容。" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:455 -#: htdocs/luci-static/resources/view/mosdns/rules.js:53 -#: htdocs/luci-static/resources/view/mosdns/rules.js:59 -#: htdocs/luci-static/resources/view/mosdns/rules.js:83 -#: htdocs/luci-static/resources/view/mosdns/rules.js:89 -#: htdocs/luci-static/resources/view/mosdns/rules.js:113 -#: htdocs/luci-static/resources/view/mosdns/rules.js:119 -#: htdocs/luci-static/resources/view/mosdns/rules.js:143 -#: htdocs/luci-static/resources/view/mosdns/rules.js:149 -#: htdocs/luci-static/resources/view/mosdns/rules.js:173 -#: htdocs/luci-static/resources/view/mosdns/rules.js:179 -#: htdocs/luci-static/resources/view/mosdns/rules.js:203 -#: htdocs/luci-static/resources/view/mosdns/rules.js:209 -#: htdocs/luci-static/resources/view/mosdns/rules.js:233 -#: htdocs/luci-static/resources/view/mosdns/rules.js:239 -#: htdocs/luci-static/resources/view/mosdns/rules.js:263 -#: htdocs/luci-static/resources/view/mosdns/rules.js:269 -#, javascript-format -msgid "Unable to save contents: %s" -msgstr "无法保存内容:%s" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:460 -msgid "GeoSite Tags" -msgstr "GeoSite 标签" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:461 -msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags" -msgstr "填写需要导出的 GeoSite.dat 类别条目,允许添加多个标签" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:462 -#: htdocs/luci-static/resources/view/mosdns/basic.js:467 -msgid "Export directory: /var/mosdns" -msgstr "导出目录:/var/mosdns" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:465 -msgid "GeoIP Tags" -msgstr "GeoIP 标签" - -#: htdocs/luci-static/resources/view/mosdns/basic.js:466 -msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags" -msgstr "输入需要导出的 GeoIP.dat 类别条目,允许添加多个标签" - -#: htdocs/luci-static/resources/view/mosdns/logs.js:27 -msgid "No log data." -msgstr "无日志数据。" - -#: htdocs/luci-static/resources/view/mosdns/logs.js:43 -#, fuzzy -msgid "Failed to clean logs." -msgstr "无法重启 MosDNS:%s" - -#: htdocs/luci-static/resources/view/mosdns/logs.js:65 -msgid "Clear logs" -msgstr "清空日志" - -#: htdocs/luci-static/resources/view/mosdns/logs.js:70 -msgid "Log Data" -msgstr "日志数据" - -#: htdocs/luci-static/resources/view/mosdns/logs.js:75 -#, javascript-format -msgid "Refresh every %s seconds." -msgstr "每 %s 秒刷新。" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:17 -msgid "Rule Settings" -msgstr "自定义规则列表" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:18 -msgid "The list of rules only apply to 'Default Config' profiles." -msgstr "规则列表仅适用于 “内置预设” 配置文件。" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:24 -msgid "White Lists" -msgstr "白名单" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:25 -msgid "Block Lists" -msgstr "黑名单" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:26 -msgid "Grey Lists" -msgstr "灰名单" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:27 -msgid "DDNS Lists" -msgstr "DDNS 域名" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:28 -msgid "Hosts" -msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:29 -msgid "Redirect" -msgstr "重定向" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:30 -msgid "Block PTR" -msgstr "PTR 黑名单" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:31 -msgid "Streaming Media" -msgstr "流媒体" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:37 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:31 msgid "" "Added domain names always permit resolution using 'local DNS' with the " "highest priority (one domain per line, supports domain matching rules)." @@ -617,20 +35,7 @@ msgstr "" "加入的域名始终允许使用 “本地 DNS” 进行解析,且优先级最高(每个域名一行,支持" "域名匹配规则)" -#: htdocs/luci-static/resources/view/mosdns/rules.js:67 -msgid "" -"Added domain names will block DNS resolution (one domain per line, supports " -"domain matching rules)." -msgstr "加入的域名将屏蔽 DNS 解析(每个域名一行,支持域名匹配规则)" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:97 -msgid "" -"Added domain names will always use 'Remote DNS' for resolution (one domain " -"per line, supports domain matching rules)." -msgstr "" -"加入的域名始终使用 “远程 DNS” 进行解析(每个域名一行,支持域名匹配规则)" - -#: htdocs/luci-static/resources/view/mosdns/rules.js:127 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:121 msgid "" "Added domain names will always use 'Local DNS' for resolution, with a forced " "TTL of 5 seconds, and results will not be cached (one domain per line, " @@ -639,14 +44,598 @@ msgstr "" "加入的域名始终使用 “本地 DNS” 进行解析,并且强制 TTL 5 秒,解析结果不会进入缓" "存(每个域名一行,支持域名匹配规则)" -#: htdocs/luci-static/resources/view/mosdns/rules.js:157 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:91 +msgid "" +"Added domain names will always use 'Remote DNS' for resolution (one domain " +"per line, supports domain matching rules)." +msgstr "" +"加入的域名始终使用 “远程 DNS” 进行解析(每个域名一行,支持域名匹配规则)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:61 +msgid "" +"Added domain names will block DNS resolution (one domain per line, supports " +"domain matching rules)." +msgstr "加入的域名将屏蔽 DNS 解析(每个域名一行,支持域名匹配规则)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:211 +msgid "" +"Added domain names will block PTR requests (one domain per line, supports " +"domain matching rules)." +msgstr "加入的域名将阻止 PTR 请求(每个域名一行,支持域名匹配规则)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:140 +msgid "Advanced Options" +msgstr "高级选项" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:208 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:256 +msgid "Aliyun Public DNS (223.5.5.5)" +msgstr "阿里云公共 DNS(223.5.5.5)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:209 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:257 +msgid "Aliyun Public DNS (223.6.6.6)" +msgstr "阿里云公共 DNS(223.6.6.6)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:218 +msgid "Aliyun Public DNS (DNS over HTTP/3)" +msgstr "阿里云公共 DNS(DNS over HTTP/3)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:217 +msgid "Aliyun Public DNS (DNS over HTTPS)" +msgstr "阿里云公共 DNS(DNS over HTTPS)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:216 +msgid "Aliyun Public DNS (DNS over QUIC)" +msgstr "阿里云公共 DNS(DNS over QUIC)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:55 +msgid "Another update is already in progress." +msgstr "另一个更新正在进行中。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:200 +msgid "Apple domains optimization" +msgstr "Apple 域名解析优化" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:332 +msgid "Auto Save Cache Interval" +msgstr "自动保存缓存间隔(秒)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:86 +msgid "" +"Automatically update GeoIP and GeoSite databases as well as ad filtering " +"rules through scheduled tasks." +msgstr "通过定时任务自动更新 GeoIP 和 GeoSite 数据库以及广告过滤规则。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:214 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:260 +msgid "Baidu Public DNS (180.76.76.76)" +msgstr "百度公共 DNS(180.76.76.76)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:139 +msgid "Basic Options" +msgstr "基本选项" + +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:14 +msgid "Basic Setting" +msgstr "基本设置" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:350 +msgid "" +"Block DNS RR Type 65 records (HTTPS/SVCB, used for HTTP/3, ECH, etc.), force " +"using only A/AAAA records." +msgstr "" +"屏蔽 DNS 类型 65 记录(HTTPS/SVCB,用于 HTTP/3、ECH 等),强制仅使用 A/AAAA " +"解析。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:19 +msgid "Block Lists" +msgstr "黑名单" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:24 +msgid "Block PTR" +msgstr "PTR 黑名单" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:252 +msgid "Bootstrap DNS servers" +msgstr "Bootstrap DNS 服务器" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:253 +msgid "" +"Bootstrap DNS servers are used to resolve IP addresses of the DoH/DoT " +"resolvers you specify as upstreams" +msgstr "Bootstrap DNS 服务器用于解析您指定为上游的 DoH / DoT 解析器的 IP 地址" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:325 +msgid "Cache Dump" +msgstr "自动保存缓存" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:130 +msgid "Check And Update" +msgstr "检查并更新" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:128 +msgid "Check And Update GeoData." +msgstr "检查并更新 GeoData 数据库。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:186 +msgid "China DNS prefer IPv4" +msgstr "国内 DNS 首选 IPv4" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:205 +msgid "China DNS server" +msgstr "国内 DNS 服务器" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:231 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:248 +msgid "Cisco Public DNS (208.67.220.220)" +msgstr "思科公共 DNS(208.67.220.220)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:230 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:247 +msgid "Cisco Public DNS (208.67.222.222)" +msgstr "思科公共 DNS(208.67.222.222)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:65 +msgid "Clear logs" +msgstr "清空日志" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:33 +msgid "Close" +msgstr "关闭" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:225 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:242 +msgid "CloudFlare Public DNS (1.0.0.1)" +msgstr "CloudFlare 公共 DNS(1.0.0.1)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:224 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:241 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:262 +msgid "CloudFlare Public DNS (1.1.1.1)" +msgstr "CloudFlare 公共 DNS(1.1.1.1)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:382 +msgid "Cloudflare IP Ranges" +msgstr "Cloudflare IP 范围" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:141 +msgid "Cloudflare Options" +msgstr "Cloudflare 选项" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:133 +msgid "Collecting data..." +msgstr "获取数据中..." + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:267 +msgid "Concurrent" +msgstr "DNS 服务器并发数(默认 2)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:150 +msgid "Config File" +msgstr "配置文件" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:430 +msgid "Configuration Editor" +msgstr "配置编辑器" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196 +msgid "Custom China DNS" +msgstr "自定义国内 DNS" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:152 +msgid "Custom Config" +msgstr "自定义" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:151 msgid "" "Custom Hosts rewrite, for example: baidu.com 10.0.0.1 (one rule per line, " "supports domain matching rules)." msgstr "" "自定义 Hosts 重写,如:baidu.com 10.0.0.1(每个规则一行,支持域名匹配规则)" -#: htdocs/luci-static/resources/view/mosdns/rules.js:187 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:377 +msgid "Custom IP" +msgstr "自选 IP" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:235 +msgid "Custom Stream Media DNS" +msgstr "自定义流媒体 DNS" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:21 +msgid "DDNS Lists" +msgstr "DDNS 域名" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:314 +msgid "DNS Cache Size" +msgstr "DNS 缓存大小" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177 +msgid "DNS Forward" +msgstr "DNS 转发" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:268 +msgid "" +"DNS query request concurrency, The number of upstream DNS servers that are " +"allowed to initiate requests at the same time" +msgstr "DNS 查询请求并发数,允许同时发起请求的上游 DNS 服务器数量" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181 +msgid "DNS redirect" +msgstr "DNS 重定向" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:129 +msgid "Database Update" +msgstr "数据库更新" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:165 +msgid "Debug" +msgstr "调试" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:151 +msgid "Default Config" +msgstr "内置预设" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:349 +msgid "Disable RR Type 65 (HTTPS/SVCB)" +msgstr "禁用 RR Type 65 (HTTPS/SVCB)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:285 +msgid "Disable TLS Certificate" +msgstr "禁用 TLS 证书" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:286 +msgid "" +"Disable TLS Servers certificate validation, Can be useful if system CA " +"certificate expires or the system time is out of order" +msgstr "" +"禁用 TLS 服务器证书验证,当系统 CA 证书过期或系统时间错乱时,本选项可能会有用" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:274 +msgid "DoH/TCP/DoT Connection Multiplexing idle timeout (default 30 seconds)" +msgstr "DoH/TCP/DoT 连接复用空闲保持时间(默认 30 秒)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:91 +msgid "Enable Auto Database Update" +msgstr "启用自动更新" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:354 +msgid "Enable DNS ADblock" +msgstr "启用 DNS 广告过滤" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:309 +msgid "Enable DNS Cache" +msgstr "启用 DNS 缓存" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:292 +msgid "Enable EDNS client subnet" +msgstr "启用 EDNS 客户端子网" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:280 +msgid "" +"Enable TCP/DoT RFC 7766 new Query Pipelining connection multiplexing mode" +msgstr "启用 TCP/DoT RFC 7766 新型 Query Pipelining 连接复用模式" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:304 +msgid "Enable this option fallback policy forces forwarding to remote DNS" +msgstr "启用此选项 fallback 策略会强制转发到远程 DNS" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:146 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:370 +msgid "Enabled" +msgstr "启用" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:463 +msgid "Enter the GeoIP.dat category to be exported, Allow add multiple tags" +msgstr "输入需要导出的 GeoIP.dat 类别条目,允许添加多个标签" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:458 +msgid "Enter the GeoSite.dat category to be exported, Allow add multiple tags" +msgstr "填写需要导出的 GeoSite.dat 类别条目,允许添加多个标签" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:168 +msgid "Error" +msgstr "错误" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:95 +msgid "Every Day" +msgstr "每天" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:100 +msgid "Every Friday" +msgstr "每周五" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:96 +msgid "Every Monday" +msgstr "每周一" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:101 +msgid "Every Saturday" +msgstr "每周六" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:102 +msgid "Every Sunday" +msgstr "每周日" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:99 +msgid "Every Thursday" +msgstr "每周四" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:97 +msgid "Every Tuesday" +msgstr "每周二" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:98 +msgid "Every Wednesday" +msgstr "每周三" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:459 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:464 +msgid "Export directory: /var/mosdns" +msgstr "导出目录:/var/mosdns" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:43 +msgid "Failed to clean logs." +msgstr "清理日志失败:%s" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:74 +msgid "Failed to start update." +msgstr "启动更新失败" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:407 +msgid "Flush DNS Cache" +msgstr "刷新 DNS 缓存" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:97 +msgid "Flushing DNS Cache Failed, Please check if MosDNS is running." +msgstr "刷新 DNS 缓存失败,请检查 MosDNS 状态是否在运行中。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:95 +msgid "Flushing DNS Cache Success." +msgstr "刷新 DNS 缓存成功" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:405 +msgid "" +"Flushing DNS Cache will clear any IP addresses or DNS records from MosDNS " +"cache." +msgstr "刷新 DNS 缓存会清空 MosDNS 所有 IP 地址和 DNS 解析缓存。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:196 +msgid "Follow WAN interface DNS if not enabled" +msgstr "不启用则使用 WAN 接口 DNS" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:201 +msgid "" +"For Apple domains equipped with Chinese mainland CDN, always responsive to " +"Chinese CDN IP addresses" +msgstr "配备中国大陆 CDN 的 Apple 域名,始终应答中国大陆 CDN 地址" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:181 +msgid "Force redirect all local DNS queries to MosDNS, a.k.a. DNS Hijacking" +msgstr "强制将所有本地 DNS 查询重定向到 MosDNS,即 DNS 劫持。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:177 +msgid "Forward Dnsmasq Domain Name resolution requests to MosDNS" +msgstr "将 Dnsmasq 域名解析请求转发到 MosDNS 服务器" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:116 +msgid "Full" +msgstr "全量" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:114 +msgid "Full: includes all Countries and Private IP addresses." +msgstr "全量:包含所有国家和私有 IP 地址。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:143 +msgid "GeoData Export" +msgstr "GeoData 导出" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:462 +msgid "GeoIP Tags" +msgstr "GeoIP 标签" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:111 +msgid "GeoIP Type" +msgstr "GeoIP 类型" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:457 +msgid "GeoSite Tags" +msgstr "GeoSite 标签" + +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:30 +msgid "Geodata Update" +msgstr "更新数据库" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:121 +msgid "GitHub Proxy" +msgstr "GitHub 代理" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:227 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:244 +msgid "Google Public DNS (8.8.4.4)" +msgstr "谷歌公共 DNS(8.8.4.4)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:226 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:243 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:261 +msgid "Google Public DNS (8.8.8.8)" +msgstr "谷歌公共 DNS(8.8.8.8)" + +#: luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json:3 +msgid "Grant UCI access for luci-app-mosdns" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:20 +msgid "Grey Lists" +msgstr "灰名单" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:22 +msgid "Hosts" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:297 +msgid "IP Address" +msgstr "IP 地址" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:383 +msgid "" +"IPv4 CIDR: https://www.cloudflare.com/ips-v4
IPv6 CIDR: https://www.cloudflare.com/ips-" +"v6" +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:187 +msgid "" +"IPv4 is preferred for China DNS resolution of dual-stack addresses, and is " +"not affected when the destination is IPv6 only" +msgstr "国内 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:192 +msgid "" +"IPv4 is preferred for Remote / Streaming Media DNS resolution of dual-stack " +"addresses, and is not affected when the destination is IPv6 only" +msgstr "远程 / 流媒体 DNS 解析双栈地址时首选 IPv4,目标仅 IPv6 时不受影响" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:273 +msgid "Idle Timeout" +msgstr "空闲超时" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:166 +msgid "Info" +msgstr "信息" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:319 +msgid "Lazy Cache TTL" +msgstr "乐观缓存 TTL" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:320 +msgid "" +"Lazy cache survival time (in second). To disable Lazy Cache, please set to 0." +msgstr "乐观缓存生存时间(单位:秒),要禁用乐观缓存,请设置为 0" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:160 +msgid "Listen Address" +msgstr "监听地址" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:155 +msgid "Listen Port" +msgstr "监听端口" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:117 +msgid "Little" +msgstr "轻量" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:112 +msgid "Little: only include Mainland China and Private IP addresses." +msgstr "轻量:仅包含中国大陆和私有 IP 地址。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70 +msgid "Log Data" +msgstr "日志数据" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:172 +msgid "Log File" +msgstr "日志文件" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:164 +msgid "Log Level" +msgstr "日志等级" + +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:38 +msgid "Logs" +msgstr "日志" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:371 +#, fuzzy +msgid "" +"Match the parsing result with the Cloudflare IP ranges, and when there is a " +"successful match, use the 'Custom IP' as the parsing result (experimental " +"feature)" +msgstr "" +"将解析结果与 Cloudflare IP 范围进行匹配,当匹配成功时,使用 “自选 IP” 作为解" +"析结果(实验性功能)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:343 +msgid "Maximum TTL" +msgstr "覆盖最大 TTL 值(默认 0)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:337 +msgid "Minimum TTL" +msgstr "覆盖最小 TTL 值(默认 0)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:344 +msgid "" +"Modify the Maximum TTL value (seconds) for DNS answer results, 0 indicating " +"no modification" +msgstr "修改 DNS 应答结果的最大 TTL 值(秒),0 表示不修改" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:338 +msgid "" +"Modify the Minimum TTL value (seconds) for DNS answer results, 0 indicating " +"no modification" +msgstr "修改 DNS 应答结果的最小 TTL 值 (秒),0 表示不修改" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:110 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:70 +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:3 +msgid "MosDNS" +msgstr "MosDNS" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:111 +msgid "MosDNS is a plugin-based DNS forwarder/traffic splitter." +msgstr "MosDNS 是一个插件化的 DNS 转发/分流器。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:33 +msgid "NOT RUNNING" +msgstr "未运行" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:236 +msgid "Netflix, Disney+, Hulu and streaming media rules list will use this DNS" +msgstr "自定义 Netflix、Disney+、Hulu 以及 “流媒体” 规则列表的 DNS 服务器" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:27 +msgid "No log data." +msgstr "无日志数据。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:298 +msgid "" +"Please provide the IP address you use when accessing foreign websites. This " +"IP subnet (0/24) will be used as the ECS address for Remote / Streaming " +"Media DNS requests" +msgstr "" +"请提供您在访问国外网站时使用的 IP 地址,这个 IP 子网(0/24)将用作 远程 / 流" +"媒体 DNS 请求的 ECS 地址" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:36 +msgid "Please wait, this may take a few moments..." +msgstr "请稍候,这可能需要一点时间..." + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:303 +msgid "Prevent DNS Leaks" +msgstr "防止 DNS 泄漏" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:229 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:246 +msgid "Quad9 Public DNS (149.112.112.112)" +msgstr "Quad9 公共 DNS(149.112.112.112)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:228 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:245 +msgid "Quad9 Public DNS (9.9.9.9)" +msgstr "Quad9 公共 DNS(9.9.9.9)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:31 +msgid "RUNNING" +msgstr "运行中" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:23 +msgid "Redirect" +msgstr "重定向" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:181 msgid "" "Redirecting requests for domain names. Request domain A, but return records " "for domain B, for example: baidu.com qq.com (one rule per line)." @@ -654,13 +643,148 @@ msgstr "" "重定向请求的域名。请求域名 A,但返回域名 B 的记录,如:baidu.com qq.com(每个" "规则一行)" -#: htdocs/luci-static/resources/view/mosdns/rules.js:217 -msgid "" -"Added domain names will block PTR requests (one domain per line, supports " -"domain matching rules)." -msgstr "加入的域名将阻止 PTR 请求(每个域名一行,支持域名匹配规则)" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/logs.js:75 +msgid "Refresh every %s seconds." +msgstr "每 %s 秒刷新。" -#: htdocs/luci-static/resources/view/mosdns/rules.js:247 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:191 +msgid "Remote DNS prefer IPv4" +msgstr "远程 DNS 首选 IPv4" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:223 +msgid "Remote DNS server" +msgstr "远程 DNS 服务器" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:11 +msgid "Rule Settings" +msgstr "自定义规则列表" + +#: luci-app-mosdns/root/usr/share/luci/menu.d/luci-app-mosdns.json:22 +msgid "Rules" +msgstr "规则列表" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:326 +msgid "Save the cache locally and reload the cache dump on the next startup" +msgstr "保存缓存到本地文件,以供下次启动时重新载入使用" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:26 +msgid "Starting update..." +msgstr "" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:25 +msgid "Streaming Media" +msgstr "流媒体" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:240 +msgid "Streaming Media DNS server" +msgstr "流媒体 DNS 服务器" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:361 +msgid "Support for local files, such as: file:///var/mosdns/example.txt" +msgstr "支持本地文件,例如:file:///var/mosdns/example.txt" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:279 +msgid "TCP/DoT Connection Multiplexing" +msgstr "TCP/DoT 连接复用" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:207 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:255 +msgid "Tencent Public DNS (119.28.28.28)" +msgstr "腾讯公共 DNS(119.28.28.28)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:206 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:254 +msgid "Tencent Public DNS (119.29.29.29)" +msgstr "腾讯公共 DNS(119.29.29.29)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:215 +msgid "Tencent Public DNS (DNS over HTTPS)" +msgstr "腾讯公共 DNS(DNS over HTTPS)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:12 +msgid "The list of rules only apply to 'Default Config' profiles." +msgstr "规则列表仅适用于 “内置预设” 配置文件。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:299 +msgid "" +"This feature is typically used when using a self-built DNS server as an " +"Remote / Streaming Media DNS upstream (requires support from the upstream " +"server)" +msgstr "" +"此功能通常在使用自建 DNS 服务器作为 远程 / 流媒体 DNS 上游时使用(需要上游服" +"务器的支持)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:431 +msgid "" +"This is the content of the file '/etc/mosdns/config_custom.yaml' from which " +"your MosDNS configuration will be generated. Only accepts configuration " +"content in yaml format." +msgstr "" +"这是文件 “/etc/mosdns/config_custom.yaml” 的内容,您的 MosDNS 配置将从此文件" +"生成。仅接受 yaml 格式的配置内容。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:210 +msgid "TrafficRoute Public DNS (180.184.1.1)" +msgstr "火山引擎公共 DNS(180.184.1.1)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:211 +msgid "TrafficRoute Public DNS (180.184.2.2)" +msgstr "火山引擎公共 DNS(180.184.2.2)" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:452 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:47 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:53 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:77 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:83 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:107 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:113 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:137 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:143 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:167 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:173 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:197 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:203 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:227 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:233 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:257 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:263 +msgid "Unable to save contents: %s" +msgstr "无法保存内容:%s" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:94 +msgid "Update Cycle" +msgstr "更新周期" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:85 +msgid "Update GeoIP & GeoSite databases" +msgstr "更新广告规则、GeoIP & GeoSite 数据库" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:105 +msgid "Update Time" +msgstr "更新时间" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:122 +msgid "" +"Update data files with GitHub Proxy, leave blank to disable proxy downloads." +msgstr "通过 GitHub 代理更新数据文件,留空则禁用代理下载。" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:78 +msgid "Update failed: %s" +msgstr "更新失败: %s" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:49 +msgid "Update success" +msgstr "更新成功" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:35 +msgid "Updating Database..." +msgstr "更新数据库..." + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:167 +msgid "Warning" +msgstr "警告" + +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:241 msgid "" "When enabling 'Custom Stream Media DNS', added domains will always use the " "'Streaming Media DNS server' for resolution (one domain per line, supports " @@ -669,144 +793,28 @@ msgstr "" "启用 “自定义流媒体 DNS” 时,加入的域名始终使用 “流媒体 DNS 服务器” 进行解析" "(每个域名一行,支持域名匹配规则)" -#: htdocs/luci-static/resources/view/mosdns/rules.js:284 -#: htdocs/luci-static/resources/view/mosdns/rules.js:288 -#, javascript-format -msgid "Failed to restart mosdns: %s" -msgstr "无法重启 MosDNS:%s" - -#: htdocs/luci-static/resources/view/mosdns/update.js:9 -msgid "Updating..." -msgstr "更新中..." - -#: htdocs/luci-static/resources/view/mosdns/update.js:10 -msgid "Please wait, this may take a few moments..." -msgstr "请稍候,这可能需要一点时间..." - -#: htdocs/luci-static/resources/view/mosdns/update.js:16 -msgid "Update success" -msgstr "更新成功" - -#: htdocs/luci-static/resources/view/mosdns/update.js:19 -msgid "Update failed, Please check the network status" -msgstr "更新失败,请检查网络状态" - -#: htdocs/luci-static/resources/view/mosdns/update.js:23 -#, fuzzy, javascript-format -msgid "Update failed: %s" -msgstr "更新失败: %s" - -#: htdocs/luci-static/resources/view/mosdns/update.js:30 -msgid "Update GeoIP & GeoSite databases" -msgstr "更新广告规则、GeoIP & GeoSite 数据库" - -#: htdocs/luci-static/resources/view/mosdns/update.js:31 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:359 msgid "" -"Automatically update GeoIP and GeoSite databases as well as ad filtering " -"rules through scheduled tasks." -msgstr "通过定时任务自动更新 GeoIP 和 GeoSite 数据库以及广告过滤规则。" +"When using custom rule sources, please use rule types supported by MosDNS " +"(domain list or AdGuardHome rules)." +msgstr "" +"使用自定义规则来源时,请使用 MosDNS 支持的规则类型(域名列表或 AdGuardHome 规" +"则)" -#: htdocs/luci-static/resources/view/mosdns/update.js:36 -msgid "Enable Auto Database Update" -msgstr "启用自动更新" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/rules.js:18 +msgid "White Lists" +msgstr "白名单" -#: htdocs/luci-static/resources/view/mosdns/update.js:39 -msgid "Update Cycle" -msgstr "更新周期" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:212 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:258 +msgid "Xinfeng Public DNS (114.114.114.114)" +msgstr "信风公共 DNS(114.114.114.114)" -#: htdocs/luci-static/resources/view/mosdns/update.js:40 -msgid "Every Day" -msgstr "每天" +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:213 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/basic.js:259 +msgid "Xinfeng Public DNS (114.114.115.115)" +msgstr "信风公共 DNS(114.114.115.115)" -#: htdocs/luci-static/resources/view/mosdns/update.js:41 -msgid "Every Monday" -msgstr "每周一" - -#: htdocs/luci-static/resources/view/mosdns/update.js:42 -msgid "Every Tuesday" -msgstr "每周二" - -#: htdocs/luci-static/resources/view/mosdns/update.js:43 -msgid "Every Wednesday" -msgstr "每周三" - -#: htdocs/luci-static/resources/view/mosdns/update.js:44 -msgid "Every Thursday" -msgstr "每周四" - -#: htdocs/luci-static/resources/view/mosdns/update.js:45 -msgid "Every Friday" -msgstr "每周五" - -#: htdocs/luci-static/resources/view/mosdns/update.js:46 -msgid "Every Saturday" -msgstr "每周六" - -#: htdocs/luci-static/resources/view/mosdns/update.js:47 -msgid "Every Sunday" -msgstr "每周日" - -#: htdocs/luci-static/resources/view/mosdns/update.js:50 -msgid "Update Time" -msgstr "更新时间" - -#: htdocs/luci-static/resources/view/mosdns/update.js:56 -msgid "GeoIP Type" -msgstr "GeoIP 类型" - -#: htdocs/luci-static/resources/view/mosdns/update.js:57 -msgid "Little: only include Mainland China and Private IP addresses." -msgstr "轻量:仅包含中国大陆和私有 IP 地址。" - -#: htdocs/luci-static/resources/view/mosdns/update.js:59 -msgid "Full: includes all Countries and Private IP addresses." -msgstr "全量:包含所有国家和私有 IP 地址。" - -#: htdocs/luci-static/resources/view/mosdns/update.js:61 -msgid "Full" -msgstr "全量" - -#: htdocs/luci-static/resources/view/mosdns/update.js:62 -msgid "Little" -msgstr "轻量" - -#: htdocs/luci-static/resources/view/mosdns/update.js:66 -msgid "GitHub Proxy" -msgstr "GitHub 代理" - -#: htdocs/luci-static/resources/view/mosdns/update.js:67 -msgid "" -"Update data files with GitHub Proxy, leave blank to disable proxy downloads." -msgstr "通过 GitHub 代理更新数据文件,留空则禁用代理下载。" - -#: htdocs/luci-static/resources/view/mosdns/update.js:68 +#: luci-app-mosdns/htdocs/luci-static/resources/view/mosdns/update.js:123 msgid "https://gh-proxy.com" msgstr "" - -#: htdocs/luci-static/resources/view/mosdns/update.js:73 -msgid "Check And Update GeoData." -msgstr "检查并更新 GeoData 数据库。" - -#: htdocs/luci-static/resources/view/mosdns/update.js:74 -msgid "Database Update" -msgstr "数据库更新" - -#: htdocs/luci-static/resources/view/mosdns/update.js:75 -msgid "Check And Update" -msgstr "检查并更新" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:14 -msgid "Basic Setting" -msgstr "基本设置" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:22 -msgid "Rules" -msgstr "规则列表" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:30 -msgid "Geodata Update" -msgstr "更新数据库" - -#: root/usr/share/luci/menu.d/luci-app-mosdns.json:38 -msgid "Logs" -msgstr "日志" diff --git a/luci-app-mosdns/root/etc/config/mosdns b/luci-app-mosdns/root/etc/config/mosdns index a00820b21..f448e6b84 100644 --- a/luci-app-mosdns/root/etc/config/mosdns +++ b/luci-app-mosdns/root/etc/config/mosdns @@ -6,6 +6,7 @@ config mosdns 'config' option geo_auto_update '0' option geo_update_week_time '*' option geo_update_day_time '2' + option geoip_type 'geoip-only-cn-private' option configfile '/var/etc/mosdns.json' option log_level 'info' option log_file '/var/log/mosdns.log' diff --git a/luci-app-mosdns/root/etc/init.d/mosdns b/luci-app-mosdns/root/etc/init.d/mosdns index 59d8073dd..07675bfd8 100755 --- a/luci-app-mosdns/root/etc/init.d/mosdns +++ b/luci-app-mosdns/root/etc/init.d/mosdns @@ -126,7 +126,7 @@ generate_config() { # plugin: blocklist json_add_object json_add_string "tag" "blocklist" - json_add_string "type" "domain_set" + json_add_string "type" "adblock_set" json_add_object "args" json_add_array "files" json_add_string "" "/etc/mosdns/rule/blocklist.txt" @@ -176,7 +176,7 @@ generate_config() { # plugin: adlist json_add_object json_add_string "tag" "adlist" - json_add_string "type" "domain_set" + json_add_string "type" "adblock_set" json_add_object "args" json_add_array "files" adlist=$($MOSDNS_SCRIPT get_adlist) diff --git a/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc b/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc index cf0a537a4..487a369c8 100755 --- a/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc +++ b/luci-app-mosdns/root/usr/share/mosdns/mosdns.uc @@ -2,7 +2,7 @@ 'use strict'; -import { popen, mkdir, unlink, writefile, open, stat} from 'fs'; +import { popen, mkdir, unlink, writefile, open, stat, stdout } from 'fs'; import { cursor } from 'uci'; import { connect } from 'ubus'; @@ -148,6 +148,7 @@ function update_adlist() { } print(`Downloading ${mirror}${url}\n`); + stdout.flush(); let curl_res = exec_sys(`curl --connect-timeout 5 -m 90 --ipv4 -kfSLo "${ad_tmpdir}/${filename}" "${mirror}${url}"`); if (curl_res.code !== 0) download_failed = true; } @@ -191,6 +192,7 @@ function update_geodat() { let geoip_url = mirror + "https://github.com/Loyalsoldier/geoip/releases/latest/download/" + geoip_type + ".dat"; print(`Downloading ${geoip_url}.sha256sum\n`); + stdout.flush(); if (exec_sys(`curl --connect-timeout 5 -m 20 --ipv4 -kfSLo "${tmpdir}/geoip.dat.sha256sum" "${geoip_url}.sha256sum"`).code !== 0) { exec_sys(`rm -rf "${tmpdir}"`); exit(1); } @@ -203,8 +205,10 @@ function update_geodat() { if (geoip_sum_local === geoip_sum_remote) { print("geoip.dat is up to date.\n"); + stdout.flush(); } else { print(`Downloading ${geoip_url}\n`); + stdout.flush(); if (exec_sys(`curl --connect-timeout 5 -m 120 --ipv4 -kfSLo "${tmpdir}/geoip.dat" "${geoip_url}"`).code !== 0) { exec_sys(`rm -rf "${tmpdir}"`); exit(1); } @@ -221,6 +225,7 @@ function update_geodat() { let geosite_url = mirror + "https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat"; print(`Downloading ${geosite_url}.sha256sum\n`); + stdout.flush(); if (exec_sys(`curl --connect-timeout 5 -m 20 --ipv4 -kfSLo "${tmpdir}/geosite.dat.sha256sum" "${geosite_url}.sha256sum"`).code !== 0) { exec_sys(`rm -rf "${tmpdir}"`); exit(1); } @@ -233,8 +238,10 @@ function update_geodat() { if (geosite_sum_local === geosite_sum_remote) { print("geosite.dat is up to date.\n"); + stdout.flush(); } else { print(`Downloading ${geosite_url}\n`); + stdout.flush(); if (exec_sys(`curl --connect-timeout 5 -m 120 --ipv4 -kfSLo "${tmpdir}/geosite.dat" "${geosite_url}"`).code !== 0) { exec_sys(`rm -rf "${tmpdir}"`); exit(1); } @@ -313,9 +320,23 @@ switch (action) { get_adlist(); break; case "update": - update_geodat(); - update_adlist(); - v2dat_dump(); + if (stat('/var/lock/mosdns_update.lock')) { + print("Another update is already in progress.\n"); + exit(1); + } + writefile('/var/lock/mosdns_update.lock', ''); + try { + update_geodat(); + update_adlist(); + v2dat_dump(); + print("UPDATE_FINISHED\n"); + stdout.flush(); + } catch (e) { + print("Update failed: " + e + "\n"); + print("UPDATE_FINISHED\n"); + stdout.flush(); + } + unlink('/var/lock/mosdns_update.lock'); break; case "update_adlist": update_adlist(); diff --git a/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json b/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json index 438fefcc3..9c7d23ad8 100644 --- a/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json +++ b/luci-app-mosdns/root/usr/share/rpcd/acl.d/luci-app-mosdns.json @@ -18,7 +18,9 @@ "clean_log", "flush_cache", "get_version", - "print_log" + "print_log", + "get_update_log", + "start_update" ] }, "uci": [ "mosdns" ] diff --git a/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns b/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns index 25247d21b..9804ad583 100644 --- a/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns +++ b/luci-app-mosdns/root/usr/share/rpcd/ucode/luci.mosdns @@ -119,6 +119,35 @@ const methods = { return { error: res.stdout }; } } + }, + + start_update: { + call: function() { + try { + if (stat('/var/lock/mosdns_update.lock')) { + return { success: false, error: 'Another update is already in progress.' }; + } + exec_sys('echo "" > /var/log/mosdns_update.log'); + exec_sys('{ /usr/share/mosdns/mosdns.uc update; rm -f /var/lock/mosdns_update.lock; echo "UPDATE_FINISHED"; } > /var/log/mosdns_update.log 2>&1 &'); + return { success: true }; + } catch (e) { + return { success: false, error: String(e) }; + } + } + }, + + get_update_log: { + call: function() { + try { + if (stat('/var/log/mosdns_update.log')) { + return { log: readfile('/var/log/mosdns_update.log') }; + } else { + return { log: '' }; + } + } catch (e) { + return { error: String(e) }; + } + } } }; diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 71596a3f2..b19f5340c 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:=105 +PKG_RELEASE:=106 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 456321405..3227e3f19 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 @@ -610,7 +610,7 @@ o.validate = function(self, value, t) local _dns_mode = s.fields["dns_mode"]:formvalue(t) local _tcp_node = s.fields["tcp_node"]:formvalue(t) if _dns_mode and _tcp_node then - if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode then + if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode and not _tcp_node:find("Socks_") then return nil, translatef("TCP node must be '%s' type to use FakeDNS.", _dns_mode) end end 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 bb4e95a63..dfa7994a9 100644 --- a/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua +++ b/luci-app-passwall/luasrc/model/cbi/passwall/client/global.lua @@ -486,7 +486,7 @@ o.validate = function(self, value, t) end local _tcp_node = s.fields["tcp_node"]:formvalue(t) if _dns_mode and _tcp_node then - if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode then + if (m:get(_tcp_node, "type") or ""):lower() ~= _dns_mode and not _tcp_node:find("Socks_") then return nil, translatef("TCP node must be '%s' type to use FakeDNS.", _dns_mode) end end diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index 374e5628e..f3abedbd2 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -1706,8 +1706,7 @@ function gen_config(var) end end) else - local _node = node or node_id - COMMON.default_outbound_tag = gen_outbound_get_tag(flag, _node, nil, { + COMMON.default_outbound_tag = gen_outbound_get_tag(flag, node or node_id, nil, { fragment = singbox_settings.fragment == "1" or nil, record_fragment = singbox_settings.record_fragment == "1" or nil, run_socks_instance = not no_run diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index 00b05d070..753a4ce77 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -1424,8 +1424,7 @@ function gen_config(var) rules = rules } else - local _node = node or node_id - COMMON.default_outbound_tag = gen_outbound_get_tag(flag, _node, nil, { + COMMON.default_outbound_tag = gen_outbound_get_tag(flag, node or node_id, nil, { fragment = xray_settings.fragment == "1" or nil, noise = xray_settings.noise == "1" or nil, run_socks_instance = not no_run diff --git a/luci-app-passwall/root/usr/share/passwall/app.sh b/luci-app-passwall/root/usr/share/passwall/app.sh index cb9e4aa6b..34f3c200c 100755 --- a/luci-app-passwall/root/usr/share/passwall/app.sh +++ b/luci-app-passwall/root/usr/share/passwall/app.sh @@ -1660,8 +1660,17 @@ acl_app() { set_cache_var "ACL_${sid}_dns_port" "${GLOBAL_DNSMASQ_PORT}" set_cache_var "ACL_${sid}_tcp_default" "1" else - local type=$(echo $(config_n_get $tcp_node type) | tr 'A-Z' 'a-z') - local protocol=$(config_n_get $tcp_node protocol) + local type protocol + if [ "$(config_get_type ${tcp_node#Socks_})" = "socks" ]; then + if [ "${dns_mode}" = "xray" ]; then + type="xray" + elif [ "${dns_mode}" = "sing-box" ]; then + type="sing-box" + fi + else + type=$(echo $(config_n_get $tcp_node type) | tr 'A-Z' 'a-z') + protocol=$(config_n_get $tcp_node protocol) + fi #兼容旧模式,择机移除 [ "$v2ray_dns_mode" = "tcp+doh" ] && v2ray_dns_mode="tcp" ([ "$type" = "sing-box" ] || [ "$type" = "xray" ]) && [ "$protocol" = "_shunt" ] && [ "$type" != "$dns_mode" ] && { @@ -1743,7 +1752,7 @@ acl_app() { lua $APP_PATH/helper_dnsmasq.lua add_rule -FLAG ${sid} -TMP_DNSMASQ_PATH ${dnsmasq_conf_path} -DNSMASQ_CONF_FILE ${dnsmasq_conf} \ -LISTEN_PORT ${dnsmasq_port} -DEFAULT_DNS ${DEFAULT_DNS} -LOCAL_DNS $LOCAL_DNS \ -USE_DIRECT_LIST "${use_direct_list}" -USE_PROXY_LIST "${use_proxy_list}" -USE_BLOCK_LIST "${use_block_list}" -USE_GFW_LIST "${use_gfw_list}" -CHN_LIST "${chn_list}" \ - -TUN_DNS "127.0.0.1#${_dns_port}" -REMOTE_FAKEDNS 0 -USE_DEFAULT_DNS "${use_default_dns:-direct}" -CHINADNS_DNS ${_china_ng_listen:-0} \ + -TUN_DNS "127.0.0.1#${_dns_port}" -REMOTE_FAKEDNS ${remote_fakedns:-0} -USE_DEFAULT_DNS "${use_default_dns:-direct}" -CHINADNS_DNS ${_china_ng_listen:-0} \ -TCP_NODE $tcp_node -DEFAULT_PROXY_MODE ${tcp_proxy_mode} -NO_PROXY_IPV6 ${dnsmasq_filter_proxy_ipv6:-0} -NFTFLAG ${nftflag:-0} \ -NO_LOGIC_LOG 1 ln_run "$(first_type dnsmasq)" "dnsmasq_${sid}" "/dev/null" -C ${dnsmasq_conf} -x ${acl_path}/dnsmasq.pid @@ -1783,7 +1792,7 @@ acl_app() { [ "$filter_proxy_ipv6" = "1" ] && remote_dns_query_strategy="UseIPv4" remote_dns_doh=${remote_dns_doh:-https://1.1.1.1/dns-query} _extra_param="${_extra_param} dns_listen_port=${_dns_port} remote_dns_protocol=${v2ray_dns_mode} remote_dns_udp_server=${remote_dns} remote_dns_tcp_server=${remote_dns}" - _extra_param="${_extra_param} remote_dns_doh=${remote_dns_doh} remote_dns_query_strategy=${remote_dns_query_strategy} remote_dns_client_ip=${remote_dns_client_ip}" + _extra_param="${_extra_param} remote_dns_doh=${remote_dns_doh} remote_dns_query_strategy=${remote_dns_query_strategy} remote_fakedns=${remote_fakedns:-0} remote_dns_client_ip=${remote_dns_client_ip}" } _extra_param="${_extra_param} tcp_proxy_way=$TCP_PROXY_WAY" [ -n "$udp_node" ] && ([ "$udp_node" = "tcp" ] || [ "$udp_node" = "$tcp_node" ]) && { @@ -1849,7 +1858,16 @@ acl_app() { set_cache_var "node_${udp_node}_redir_port" "${redir_port}" udp_port=$redir_port - local type=$(echo $(config_n_get $udp_node type) | tr 'A-Z' 'a-z') + local type + if [ "$(config_get_type ${udp_node#Socks_})" = "socks" ]; then + if [ "${dns_mode}" = "xray" ]; then + type="xray" + elif [ "${dns_mode}" = "sing-box" ]; then + type="sing-box" + fi + else + type=$(echo $(config_n_get $udp_node type) | tr 'A-Z' 'a-z') + fi if [ -n "${type}" ] && ([ "${type}" = "sing-box" ] || [ "${type}" = "xray" ]); then config_file="acl/${udp_node}_UDP_${redir_port}.json" config_file="$TMP_PATH/$config_file" diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index 37d4eec27..ec5d2a93b 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -6,8 +6,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 -PKG_VERSION:=26.4.20 -PKG_RELEASE:=40 +PKG_VERSION:=26.5.1 +PKG_RELEASE:=41 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua index e93018136..e154fa84c 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/shunt_rules.lua @@ -61,6 +61,7 @@ end protocol = s:option(MultiValue, "protocol", translate("Protocol")) protocol:value("http") protocol:value("tls") +protocol:value("quic") protocol:value("bittorrent") protocol.widget = "checkbox" protocol.default = nil diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua index f50db48a8..9d05dbbb6 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/hysteria2.lua @@ -51,7 +51,6 @@ o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translat o.default = "0" o = s:option(Value, _n("tls_pinSHA256"), translate("PinSHA256"),translate("Certificate fingerprint")) -o.rewrite_option = o.option o = s:option(Value, _n("up_mbps"), translate("Max upload Mbps")) o.rewrite_option = o.option diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua index 27b9f40a3..cb0d9ae1f 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/client/type/ray.lua @@ -374,7 +374,7 @@ if api.compare_versions(os.date("%Y.%m.%d"), "<", "2026.6.1") then end if api.compare_versions(xray_version, ">=", "26.1.31") then - o = s:option(Value, _n("tls_CertSha"), translate("TLS Chain Fingerprint (SHA256)"), translate("Once set, connects only when the server’s chain fingerprint matches.")) + o = s:option(Value, _n("tls_pinSHA256"), translate("TLS Chain Fingerprint (SHA256)")) o:depends({ [_n("tls")] = true, [_n("reality")] = false }) o:depends({ [_n("protocol")] = "hysteria2" }) @@ -506,6 +506,11 @@ o:depends({ [_n("transport")] = "mkcp" }) o = s:option(Value, _n("mkcp_domain"), translate("Camouflage Domain"), translate("Use it together with the DNS disguised type. You can fill in any domain.")) o:depends({ [_n("mkcp_guise")] = "dns" }) +o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU")) +o.datatype = "uinteger" +o.default = 1350 +o:depends({ [_n("transport")] = "mkcp" }) + o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed")) o:depends({ [_n("transport")] = "mkcp" }) diff --git a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua index cb2aba71c..a20b03bb7 100644 --- a/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua +++ b/luci-app-passwall2/luasrc/model/cbi/passwall2/server/type/ray.lua @@ -356,6 +356,11 @@ o:depends({ [_n("transport")] = "mkcp" }) o = s:option(Value, _n("mkcp_domain"), translate("Camouflage Domain"), translate("Use it together with the DNS disguised type. You can fill in any domain.")) o:depends({ [_n("mkcp_guise")] = "dns" }) +o = s:option(Value, _n("mkcp_mtu"), translate("KCP MTU")) +o.datatype = "uinteger" +o.default = 1350 +o:depends({ [_n("transport")] = "mkcp" }) + o = s:option(Value, _n("mkcp_seed"), translate("KCP Seed")) o:depends({ [_n("transport")] = "mkcp" }) diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index 3a3e43ef9..5bcfcfbef 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -122,21 +122,17 @@ function get_new_port() end function exec_call(cmd) - local process = io.popen(cmd .. '; echo -e "\n$?"') - local lines = {} - local result = "" - local return_code - for line in process:lines() do - lines[#lines + 1] = line + math.randomseed(os.time()) + local tag = "\x01__RC__" .. tostring(math.random(100000, 999999)) .. "\x01" + local f = io.popen('(' .. cmd .. '); printf "\\n' .. tag .. '%d" "$?"') + local out = f:read("*a") or "" + f:close() + local rc = out:match(tag .. "(%d+)%s*$") + if not rc then + return 255, trim(out) end - process:close() - if #lines > 0 then - return_code = lines[#lines] - for i = 1, #lines - 1 do - result = result .. lines[i] .. ((i == #lines - 1) and "" or "\n") - end - end - return tonumber(return_code), trim(result) + out = out:gsub("\n?" .. tag .. "%d+%s*$", "") + return tonumber(rc), trim(out) end function base64Decode(text) diff --git a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua index a06928a4c..6fd0103bb 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_hysteria2.lua @@ -93,7 +93,7 @@ function gen_config(var) tls = { sni = node.tls_serverName, insecure = (node.tls_allowInsecure == "1") and true or false, - pinSHA256 = (node.hysteria2_tls_pinSHA256) and node.hysteria2_tls_pinSHA256 or nil, + pinSHA256 = (node.tls_pinSHA256) and node.tls_pinSHA256 or nil, }, quic = { initStreamReceiveWindow = (node.hysteria2_recv_window) and tonumber(node.hysteria2_recv_window) or nil, diff --git a/luci-app-passwall2/luasrc/passwall2/util_xray.lua b/luci-app-passwall2/luasrc/passwall2/util_xray.lua index 5ccfba884..273c668f0 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_xray.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_xray.lua @@ -173,14 +173,14 @@ function gen_outbound(flag, node, tag, proxy_table) tlsSettings = (node.stream_security == "tls") and { serverName = node.tls_serverName, allowInsecure = (function() - if node.tls_CertSha and node.tls_CertSha ~= "" then return nil end + if node.tls_pinSHA256 and node.tls_pinSHA256 ~= "" then return nil end if api.compare_versions(os.date("%Y.%m.%d"), "<", "2026.6.1") and node.tls_allowInsecure == "1" then return true end end)(), fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil, pinnedPeerCertSha256 = (function() if api.compare_versions(xray_version, "<", "26.1.31") then return nil end - if not node.tls_CertSha then return "" end - return node.tls_CertSha + if not node.tls_pinSHA256 then return "" end + return node.tls_pinSHA256 end)(), verifyPeerCertByName = (function() if api.compare_versions(xray_version, "<", "26.1.31") then return nil end @@ -217,7 +217,7 @@ function gen_outbound(flag, node, tag, proxy_table) } } or nil, kcpSettings = (node.transport == "mkcp") and { - mtu = 1350, + mtu = (node.mkcp_mtu and node.mkcp_mtu ~= "") and tonumber(node.mkcp_mtu) or 1350, tti = 50, uplinkCapacity = 12, downlinkCapacity = 100, @@ -470,7 +470,6 @@ function gen_outbound(flag, node, tag, proxy_table) finalQuery = true, disableCache = false, serveStale = true, - serveExpiredTTL = 30, } end @@ -674,7 +673,7 @@ function gen_config_server(node) } } or nil, kcpSettings = (node.transport == "mkcp") and { - mtu = 1350, + mtu = (node.mkcp_mtu and node.mkcp_mtu ~= "") and tonumber(node.mkcp_mtu) or 1350, tti = 50, uplinkCapacity = 12, downlinkCapacity = 100, @@ -1639,7 +1638,6 @@ function gen_config(var) finalQuery = true, disableCache = false, serveStale = true, - serveExpiredTTL = 30, }) end end @@ -1738,6 +1736,7 @@ function gen_config(var) end end local dns_block_mode = "host" + dns_block_mode = "" if dns_block_mode == "host" and dns_outboundTag == "blackhole" then for d_i, d_k in ipairs(value.domain) do dns.hosts[d_k] = "0.0.0.0" @@ -2162,7 +2161,6 @@ function gen_front_dns_config(var) finalQuery = true, disableCache = false, serveStale = true, - serveExpiredTTL = 30, }) end end diff --git a/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm b/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm index b5c8becf4..590e45a4d 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/global/footer.htm @@ -16,6 +16,22 @@ local appname = api.appname display: none !important; visibility: hidden !important; } + +@media screen and (max-width: 1152px) { + #cbi-<%=appname%>-socks .cbi-section-table-titles { + display: none !important; + } +} + +@media screen and (min-width: 1152px) { + #cbi-<%=appname%>-socks input[id*=".<%=appname%>."][id$=".port"], + #cbi-<%=appname%>-socks input[id*=".<%=appname%>."][id$=".http_port"] { + width: 100px !important; + min-width: unset !important; + max-width: unset !important; + text-align: center !important; + } +} \ No newline at end of file diff --git a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm index 8109b4cc8..aca4d853b 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/haproxy/js.htm @@ -1,7 +1,8 @@ <% local api = require "luci.passwall2.api" +local appname = api.appname -%> - + \ No newline at end of file diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm b/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm index d1941043b..e6631f3be 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_config/link_share_man.htm @@ -306,7 +306,7 @@ local current_node = map:get(section) params += opt.query("alpn", dom_prefix + "alpn"); params += opt.query("sni", dom_prefix + "tls_serverName"); params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure"); - params += opt.query("pcs", dom_prefix + "tls_CertSha"); + params += opt.query("pcs", dom_prefix + "tls_pinSHA256"); params += opt.query("vcn", dom_prefix + "tls_CertByName"); params += opt.query("ech", dom_prefix + "ech_config"); } @@ -499,7 +499,7 @@ local current_node = map:get(section) params += opt.query("alpn", dom_prefix + "alpn"); params += opt.query("sni", dom_prefix + "tls_serverName"); params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure"); - params += opt.query("pcs", dom_prefix + "tls_CertSha"); + params += opt.query("pcs", dom_prefix + "tls_pinSHA256"); params += opt.query("vcn", dom_prefix + "tls_CertByName"); params += opt.query("ech", dom_prefix + "ech_config"); } @@ -570,7 +570,7 @@ local current_node = map:get(section) params += opt.query("alpn", dom_prefix + "alpn"); params += opt.query("sni", dom_prefix + "tls_serverName"); params += opt.query("allowinsecure", dom_prefix + "tls_allowInsecure"); - params += opt.query("pcs", dom_prefix + "tls_CertSha"); + params += opt.query("pcs", dom_prefix + "tls_pinSHA256"); params += opt.query("vcn", dom_prefix + "tls_CertByName"); params += opt.query("ech", dom_prefix + "ech_config"); } @@ -591,14 +591,14 @@ local current_node = map:get(section) var params = ""; params += opt.query("sni", dom_prefix + "tls_serverName"); params += opt.query("insecure", dom_prefix + "tls_allowInsecure"); - params += opt.query("pcs", dom_prefix + "tls_CertSha"); + params += opt.query("pinSHA256", dom_prefix + "tls_pinSHA256"); + params += opt.query("pcs", dom_prefix + "tls_pinSHA256"); params += opt.query("vcn", dom_prefix + "tls_CertByName"); var v_password = null; if (v_type === "Hysteria2") { v_password = opt.get("hysteria2_auth_password"); - params += opt.query("pinSHA256", "hysteria2_tls_pinSHA256"); var dom_obfs = opt.get("hysteria2_obfs"); if (dom_obfs && dom_obfs.value != "") { params += "&obfs=" + "salamander"; @@ -1069,7 +1069,7 @@ local current_node = map:get(section) } opt.set(dom_prefix + 'ech', !!queryParam.ech); opt.set(dom_prefix + 'ech_config', queryParam.ech || ''); - opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || ''); + opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || ''); opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || ''); } @@ -1308,7 +1308,7 @@ local current_node = map:get(section) if (queryParam.security === "tls") { opt.set(dom_prefix + 'tls_serverName', queryParam.peer || queryParam.sni || ""); opt.set(dom_prefix + 'alpn', queryParam.alpn || 'default'); - opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || ''); + opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || ''); opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || ''); } opt.set( @@ -1472,7 +1472,7 @@ local current_node = map:get(section) } opt.set(dom_prefix + 'ech', !!queryParam.ech); opt.set(dom_prefix + 'ech_config', queryParam.ech || ''); - opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || ''); + opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || ''); opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || ''); } @@ -1613,9 +1613,6 @@ local current_node = map:get(section) if (queryParam["obfs-password"] || queryParam["obfs_password"]) { opt.set(dom_prefix + 'obfs', queryParam["obfs-password"] || queryParam["obfs_password"]); } - if (queryParam.pinSHA256) { - opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pinSHA256); - } opt.set(dom_prefix + 'hop', queryParam.mport || ""); } @@ -1627,7 +1624,7 @@ local current_node = map:get(section) dom_prefix + 'tls_allowInsecure', !((queryParam.allowinsecure ?? '0') === '0' && (queryParam.allowInsecure ?? '0') === '0' && (queryParam.insecure ?? '0') === '0') ); - opt.set(dom_prefix + 'tls_CertSha', queryParam.pcs || ''); + opt.set(dom_prefix + 'tls_pinSHA256', queryParam.pcs || queryParam.pinSHA256 || ''); opt.set(dom_prefix + 'tls_CertByName', queryParam.vcn || ''); if (m.hash) { opt.set('remarks', decodeURIComponent(m.hash.substr(1))); diff --git a/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm b/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm index df342368b..a090a2ead 100644 --- a/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm +++ b/luci-app-passwall2/luasrc/view/passwall2/node_subscribe/js.htm @@ -34,6 +34,12 @@ table .cbi-button-down, background-color: rgba(131, 191, 255, 0.7) !important; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } + +@media screen and (max-width: 1152px) { + #cbi-<%=api.appname%>-subscribe_list .cbi-section-table-titles { + display: none !important; + } +}