Technitium DNS Server 15.6.2 配置详解

Technitium DNS Server 15.6.2 配置详解:Web 管理台与 HTTP API 同源实测,覆盖递归与转发器、广告拦截、DoT/DoH 加密服务启用、Zone 管理、DHCP 关闭确认、查询日志与缓存参数,每个改动项附实测回显与验证命令。

Technitium DNSDNS 服务2026/10/19

Technitium DNS Server 15.6.2 配置详解

目标:讲清 Technitium DNS Server 15.6.2 的配置体系——参数怎么看、怎么改、关键项默认值与改动影响,并对递归/转发器、广告拦截、DoT/DoH、Zone 管理、DHCP、日志缓存逐项实测。Web 管理台全部动作与 HTTP API 同源(官方 APIDOCS 明示 "The HTTP API is used by the web console"),本文每个设置项均以该 API 在 Ubuntu 22.04.4 + Docker 部署的 v15.6.2 实例上实测,回显为原文照抄。

一、环境信息

  • 操作系统:Ubuntu 22.04.4 LTS(x86_64),Docker 29.8.1
  • 软件:Technitium DNS Server v15.6.2(部署形态:官方镜像 technitium/dns-server:15.6.2 单实例,部署过程见《Technitium DNS Server Docker Compose 部署指南》)
  • 管理台入口:http://<宿主IP>:8118(容器内 5380),账号 admin / q1w2e3r4
  • API 基址:http://127.0.0.1:8118/api/(会话 token 经 /api/user/login 获取)
  • 客户端工具:curl 7.81.0、DiG 9.18.39、OpenSSL 3.0.2
  • 实测服务标识:"server":"dns-lab.internal"、"version":"15.6.2"(settings/set 返回原文)

二、前置条件

  1. 服务已部署并可登录:浏览器打开管理台完成首次登录;API 方式先取会话 token(实测回显,token 为 64 位十六进制串,有效期内可复用):
curl -s -X POST "http://127.0.0.1:8118/api/user/login?user=admin&pass=q1w2e3r4"
{"displayName":"Administrator","username":"admin","type":"Local","isSsoUser":false,"totpEnabled":false,"token":"25610161b21557868ac5b7d83654d2bf069f995bbba201c752870efcac21f741","server":"dns-lab.internal","status":"ok"}
  1. dig 客户端可用(验证配置效果用):dig -v → DiG 9.18.39-0ubuntu0.22.04.6-Ubuntu。
  2. 理解两个生效机制(实测结论,直接影响操作预期):
    • 多数 DNS 设置(转发器、拦截、缓存)经 settings/set 保存后即时生效,无需重启;
    • 加密 DNS(DoT/DoH)开关与证书需重启服务后才绑定监听端口(实测:enableDnsOverTls=true 返回 ok 后 853 并未监听,容器重启后监听出现,见 5.3 节)。

三、参数查看与修改方式

Technitium 的配置存储为二进制序列化文件(配置目录 /etc/dns 下 dns.config 等,非明文,不可手工编辑),修改只有两条通道,二者等效:

通道方式适用
Web 管理台Settings / Zones / DHCP 页面操作日常人工管理
HTTP APIGET /api/settings/get + POST /api/settings/set脚本化、批量、CI;Web 台每个按钮对应一个 API

查看全部设置(131 个键,输出节选——仅保留本文涉及键):

TOKEN=<token>; curl -s "http://127.0.0.1:8118/api/settings/get?token=$TOKEN"

实测回显(节选):

{"response":{"version":"15.6.2","dnsServerDomain":"dns-lab.internal","recursion":"AllowOnlyForPrivateNetworks","forwarders":null,"forwarderProtocol":"Udp","enableBlocking":true,"blockingType":"NxDomain","blockingAnswerTtl":30,"blockListUrls":null,"blockListUpdateIntervalHours":24,"dnsOverTlsPort":853,"dnsOverHttpsPort":443,"enableDnsOverTls":false,"enableDnsOverHttps":false,"logQueries":false,"enableLogging":true,"useLocalTime":false,"serveStale":true,"serveStaleTtl":259200,"clientTimeout":2000,...},"status":"ok"}

修改设置:POST /api/settings/set 传任意数量的键值参数(只传要改的键),返回完整 settings 快照与 "status":"ok":

curl -s -X POST "http://127.0.0.1:8118/api/settings/set?token=$TOKEN&logQueries=true" | python3 -c "import json,sys;print(json.load(sys.stdin)['status'])"
ok

⚠️ 注意:管理台页面上的改动即保存即生效;API 调用同理。误改后可在 Settings 页核对回显值,或按本文各节实测默认值改回。

四、参数总览

v15.6.2 settings/get 返回 131 个配置键,按功能域归类的高频键与实测默认值(首次初始化后、未经改动的原始值):

功能域键实测默认值作用
服务标识dnsServerDomaindns-lab.internal(初始化变量传入)本机 FQDN,SOA/统计标识
监听dnsServerLocalEndPoints["0.0.0.0:53","[::]:53"]DNS 53 监听端点
递归recursionAllowOnlyForPrivateNetworks递归访问策略
递归qnameMinimizationtrueQNAME 最小化(RFC 9156)
递归randomizeNamefalseQNAME case 随机化
转发forwarders / forwarderProtocolnull / Udp上游转发器与协议
缓存serveStale / serveStaleTtltrue / 259200过期应答与保留期(3 天)
缓存prefetchfalse热点记录预取
拦截enableBlockingtrue(实测初始即开)拦截总开关
拦截blockingType / blockingAnswerTtlNxDomain / 30拦截应答方式与 TTL
拦截blockListUrls / blockListUpdateIntervalHoursnull / 24黑名单源与更新周期
拦截allowTxtBlockingReporttrueTXT 拦截报告
加密enableDnsOverTls / dnsOverTlsPortfalse / 853DoT 服务端
加密enableDnsOverHttps / dnsOverHttpsPortfalse / 443DoH 服务端
加密dnsTlsCertificatePath / dnsTlsCertificatePasswordnull / nullDoT/DoH 共用 PFX 证书
日志enableLogging / logQueries / useLocalTimetrue / false / false系统日志/查询日志/时区
网络超时clientTimeout2000(毫秒)客户端查询超时
TSIGtsigKeys[]区传送密钥

💡 说明:recursion 的四个取值——Allow(人人可递归,公网裸奔有风险)、AllowOnlyForPrivateNetworks(仅私网,默认且推荐)、Deny(纯权威)、UseSpecifiedNetworkACL(按 recursionNetworkACL 列表白/黑名单)。家用/办公网保持默认即可。

五、核心设置分类详解

5.1 递归与转发器(Recursion / Forwarders)

做什么:决定本机是"自己问遍全网"(递归)还是"转交给上游"(转发)。两者互斥:forwarders 非空即转发模式,清空即恢复递归。

实测 1:设置 DoT 加密转发器并验证协议生效:

curl -s -X POST "http://127.0.0.1:8118/api/settings/set?token=$TOKEN&forwarders=1.1.1.1&forwarderProtocol=Tls" >/dev/null
curl -s "http://127.0.0.1:8118/api/settings/get?token=$TOKEN" | python3 -c "
import json,sys
d=json.load(sys.stdin)['response']
print('forwarders =',d['forwarders'],'| forwarderProtocol =',d['forwarderProtocol'])"

实测回显:

forwarders = ['1.1.1.1:853'] | forwarderProtocol = Tls

设置后转发器地址自动带 DoT 端口 :853。dig 验证:

dig @127.0.0.1 -p 5300 example.org A +noall +answer

实测回显(无输出——该网络出口到 1.1.1.1:853 不可达,查询超时无答案,这是真实排障现象):

(无输出)

实测 2:换可达上游(阿里公共 DNS DoT)验证成功:

curl -s -X POST "http://127.0.0.1:8118/api/settings/set?token=$TOKEN&forwarders=223.5.5.5&forwarderProtocol=Tls" >/dev/null
dig @127.0.0.1 -p 5300 example.org A +noall +answer +comments | head -8

实测回显:

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44935
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; ANSWER SECTION:
example.org.            283     IN      A       172.66.157.237

实测 3:清空转发器恢复递归:

curl -s -X POST "http://127.0.0.1:8118/api/settings/set?token=$TOKEN&forwarders=&useForwarders=false" >/dev/null
curl -s "http://127.0.0.1:8118/api/settings/get?token=$TOKEN" | python3 -c "
import json,sys
d=json.load(sys.stdin)['response']
print('forwarders =',d['forwarders'],'| forwarderProtocol =',d['forwarderProtocol'],'| recursion =',d['recursion'])"
dig @127.0.0.1 -p 5300 example.org A +noall +answer

实测回显:

forwarders = None | forwarderProtocol = Udp | recursion = AllowOnlyForPrivateNetworks
example.org.            281     IN      A       104.20.26.136
example.org.            281     IN      A       172.66.157.237

要点:管理台入口在 Settings → Forwarders(上游地址 + 协议下拉 Udp/Tcp/Tls/Https/Quic)。多上游逗号分隔,Technitium 按延迟并发择优。国内环境选 DoT 上游先测可达性(1.1.1.1:853 常被墙,223.5.5.5:853/223.6.6.6:853 可用)。

5.2 广告拦截(Blocking)

做什么:挂黑名单源并验证全网拦截生效。管理台入口 Settings → Blocking / Blocking 页(黑名单 URL 管理 + 立即更新按钮)。

实测 1:设置黑名单源并强制更新:

curl -s -X POST "http://127.0.0.1:8118/api/settings/set?token=$TOKEN&blockListUrls=https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts" | head -c 120
curl -s -X POST "http://127.0.0.1:8118/api/settings/forceUpdateBlockLists?token=$TOKEN"

实测回显:

{"response":{"version":"15.6.2","uptimestamp":"2026-10-19T05:03:04.07854Z","clusterInitialized":false,...}}
{"response":{},"server":"dns-lab.internal","status":"ok"}

更新落地证据:黑名单缓存文件出现在配置目录(sha256 命名,StevenBlack hosts 全量约 2.1 MB):

ls -la /opt/data/quzuo/technitium-dns/config/blocklists/

实测回显:

total 2148
drwxr-xr-x 2 root root    4096 10月 19 13:06 .
drwxr-xr-x 7 root root    4096 10月 19 13:06 ..
-rw-r--r-- 1 root root 2189155 10月 19 13:06 603e776c4f62b98ab5930dbb790e02bc215a3a571e56cc472e020ca36c8d44dd

实测 2:dig 验证拦截(默认 NxDomain 应答):

dig @127.0.0.1 -p 5300 doubleclick.net A +comments 2>&1 | head -8

实测回显:

; <<>> DiG 9.18.39-0ubuntu0.22.04.6-Ubuntu <<>> @127.0.0.1 -p 5300 doubleclick.net A +comments
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 1129
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; WARNING: recursion requested but not available

实测 3:TXT 拦截报告(allowTxtBlockingReport=true 的独有能力,说明被拦原因与来源):

dig @127.0.0.1 -p 5300 doubleclick.net TXT +noall +answer

实测回显:

doubleclick.net.        30      IN      TXT     "source=block-list-zone; blockListUrl=https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts; domain=doubleclick.net"

实测 4:正常域名不受影响(对照):

dig @127.0.0.1 -p 5300 www.baidu.com A +noall +answer | head -2
www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       120     IN      A       110.242.69.21

💡 技术拓展:blockingType 三种应答方式的取舍——

取值行为取舍
AnyAddress返回 0.0.0.0(IPv6 ::)兼容性最好,客户端"秒失败";部分应用会把 0.0.0.0 当本机
NxDomain(默认)返回域名不存在语义正确,客户端重试行为清晰
CustomAddress返回 customBlockingAddresses 指定地址可指向自建"拦截提示页"Web 服务

本文保持默认 NxDomain。另有两个运维利器:POST /api/settings/temporaryDisableBlocking?minutes=5 临时全关拦截 5 分钟(排查"网页打不开"是否误杀时用);blockingBypassList 按客户端 IP 整机豁免拦截。

5.3 加密 DNS:DoT 与 DoH 服务端启用(Services)

做什么:把本机变成 DoT(853)/DoH(443)服务端。前置条件:准备 PFX 证书(自签或正式证书)→ 设置证书与开关 → 重启服务。管理台入口 Settings → Services 区块。

实测 1:生成自签 PFX 证书并放入配置目录(宿主侧 openssl,挂载进容器):

mkdir -p /opt/data/quzuo/technitium-dns/config/tls && cd /opt/data/quzuo/technitium-dns/config/tls
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3650 -nodes -subj "/CN=dns-lab.internal"
openssl pkcs12 -export -in cert.pem -inkey key.pem -out dns-lab.pfx -passout pass:q1w2e3r4

实测回显(证书文件生成):

-rw-r--r-- 1 root root 1131 10月 19 13:11 cert.pem
-rw------- 1 root root 2547 10月 19 13:11 dns-lab.pfx
-rw------- 1 root root 1704 10月 19 13:11 key.pem

实测 2:设置证书并启用 DoT,观察"不重启不监听"现象:

curl -s -X POST "http://127.0.0.1:8118/api/settings/set?token=$TOKEN&dnsTlsCertificatePath=/etc/dns/tls/dns-lab.pfx&dnsTlsCertificatePassword=q1w2e3r4&enableDnsOverTls=true" | python3 -c "import json,sys;print('status:',json.load(sys.stdin)['status'])"
# 查看容器内监听
docker exec technitium-dns-15.6.2-server sh -c "cat /proc/net/tcp6 | awk 'NR>1 && \$4==\"0A\" {print \$2}'"

实测回显(保存成功但 853 未出现——设置返回 ok ≠ 监听生效):

status: ok
00000000000000000000000000000000:1504
00000000000000000000000000000000:0035

(:1504 = 5380 Web 台,:0035 = 53;无 :0355 = 853)

实测 3:重启后 853 监听出现并全链路验证:

docker compose restart   # 容器内无 systemd,重启容器等效"重启 DNS 服务"
docker exec technitium-dns-15.6.2-server sh -c "cat /proc/net/tcp6 | awk 'NR>1 && \$4==\"0A\" {print \$2}'"

实测回显:

00000000000000000000000000000000:0035
00000000000000000000000000000000:0355
00000000000000000000000000000000:1504

(:0355 = 853 已监听)。dig over TLS 验证权威与递归(宿主 8530→853):

dig @127.0.0.1 -p 8530 +tls lab.internal A +noall +answer
dig @127.0.0.1 -p 8530 +tls www.baidu.com A +noall +answer | head -3

实测回显:

lab.internal.           3600    IN      A       10.89.46.10
www.baidu.com.          917     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       120     IN      A       110.242.69.21

证书握手确认(自签告警属预期):

echo | openssl s_client -connect 127.0.0.1:8530 2>/dev/null | grep -E "^subject|^issuer|Verify return"
subject=CN = dns-lab.internal
issuer=CN = dns-lab.internal
Verify return code: 18 (self-signed certificate)

实测 4:启用 DoH 并以 RFC 8484 wireformat 验证(enableDnsOverHttps=true + 重启后,宿主 9543→443):

# 构造 lab.internal A 的 DNS wireformat 查询体后:
curl -sk "https://127.0.0.1:9543/dns-query" -H "content-type: application/dns-message" --data-binary @/tmp/doh_q.bin | xxd | head -4

实测回显:

00000000: 1234 8580 0001 0001 0000 0000 036c 6162  .4...........lab
00000010: 0869 6e74 6572 6e61 6c00 0001 0001 c00c  .internal.......
00000020: 0001 0001 0000 0e10 0004 0a59 2e0a       ...........Y..

解析:flags 8580(QR+RD+RA)、ANCOUNT 1、TTL 00000e10=3600、RDATA 0a592e0a=10.89.46.10,与权威 zone 数据一致。v15.6.2 的 DoH 按 RFC 8484 实现(wireformat),不支持 Google 风格 JSON 查询(实测 accept: application/dns-json GET 返回空体)。

⚠️ 注意:生产对外提供 DoH/DoT 应使用正式证书(Let's Encrypt 等),客户端证书校验才能通过;自签证书仅适合内网测试(+tls 或 +tls-ca 指定信任)。HTTP/3(DoH3)需额外开 enableDnsOverHttp3 并放行 UDP 443。

5.4 Zone 管理(权威域)

做什么:管理本机权威的域名。管理台入口 Zones 标签页(新建 Primary/Secondary/Stub/Conditional Forwarder zone、记录增删改查、DNSSEC 签名入口)。API 与实测:

创建 Primary zone(实测回显):

curl -s -X POST "http://127.0.0.1:8118/api/zones/create?token=$TOKEN&zone=lab.internal&type=Primary&useSoaSerialDateScheme=false&primaryNameServerAddresses=&soaResponsibility=&refresh=0&retry=0&expire=0&minimumTtl=0&defaultTtl=0&disableNS1Soa=false"
{"response":{"domain":"lab.internal"},"server":"dns-lab.internal","status":"ok"}

添加 A 记录(实测回显节选,注意 soaSerial 自动从 1→2):

{"response":{"zone":{"name":"lab.internal","type":"Primary","lastModified":"2026-10-19T05:03:40.5678041Z","disabled":false,"soaSerial":2,"catalog":null,"dnssecStatus":"Unsigned","hasDnssecPrivateKeys":false,"notifyFailed":false,"notifyFailedFor":[]},"addedRecord":{"name":"lab.internal","type":"A","ttl":3600,"ttlString":"1h","disabled":false,"rData":{"ipAddress":"10.89.46.10"},...}},"server":"dns-lab.internal","status":"ok"}

添加 CNAME 记录(web.lab.internal → lab.internal,TTL 600,实测 soaSerial→3):

{"response":{"zone":{...,"soaSerial":3,...},"addedRecord":{"name":"web.lab.internal","type":"CNAME","ttl":600,"ttlString":"10m","disabled":false,"rData":{"cname":"lab.internal"},...}},"status":"ok"}

dig 回显验证(CNAME 自动追加目标 A 记录):

dig @127.0.0.1 -p 5300 lab.internal A +noall +answer
dig @127.0.0.1 -p 5300 web.lab.internal A +noall +answer
dig @127.0.0.1 -p 5300 lab.internal SOA +noall +answer
lab.internal.           3600    IN      A       10.89.46.10
web.lab.internal.       600     IN      CNAME   lab.internal.
lab.internal.           3600    IN      A       10.89.46.10
lab.internal.           900     IN      SOA     dns-lab.internal. hostadmin.lab.internal. 3 900 300 604800 900

zone 列表核对:

curl -s "http://127.0.0.1:8118/api/zones/list?token=$TOKEN" | python3 -m json.tool
{
    "response": {
        "zones": [
            {
                "name": "lab.internal",
                "type": "Primary",
                "lastModified": "2026-10-19T05:03:40.5916066Z",
                "disabled": false,
                "soaSerial": 3,
                "catalog": null,
                "dnssecStatus": "Unsigned",
                "hasDnssecPrivateKeys": false,
                "notifyFailed": false,
                "notifyFailedFor": []
            }
        ]
    },
    "server": "dns-lab.internal",
    "status": "ok"
}

💡 说明:zone 文件落盘在配置目录 zones/<域名>.zone(实测 lab.internal.zone)。Secondary zone 走 AXFR/IXFR 同步主服务器;Conditional Forwarder zone 可对特定域指定上游;Single-label 等特殊域不受限制。记录级操作均支持 enable/disable(便于灰度测试)。

5.5 DHCP(默认关闭项确认)

做什么:确认内置 DHCP 处于关闭状态、明确"要不要开"。结论先说:v15.6.2 默认未启用 DHCP,三重实测证据:

  1. 设置面无 DHCP 开关键:settings/get 全部 131 键中无 dhcpServerEnabled 项;
  2. 租约接口返回空:GET /api/dhcp/leases/list → HTTP 200 + {"response":{"leases":[]},"server":"dns-lab.internal","status":"ok"};
  3. 网络面未暴露:容器 EXPOSE 67/udp 但 compose 未映射,宿主 ss -lun | grep ':67 ' 无监听。

若确需启用:管理台 DHCP 标签页 → Enable DHCP Server → 建 Scope(网段/网关/租约期);容器形态需映射 67:67/udp,官方 compose 注明 DHCP 部署建议改用 network_mode: "host"(实查官方 docker-compose.yml 注释)。本文实测环境保持关闭(内网已有独立 DHCP)。

5.6 查询日志与缓存

查询日志(默认关,D2 巡检依赖它):logQueries=false(实测默认值)时查询日志不落盘。开启并验证:

curl -s -X POST "http://127.0.0.1:8118/api/settings/set?token=$TOKEN&logQueries=true" >/dev/null
curl -s "http://127.0.0.1:8118/api/settings/get?token=$TOKEN" | python3 -c "import json,sys;d=json.load(sys.stdin)['response'];print('logQueries =',d['logQueries'])"
dig @127.0.0.1 -p 5300 www.baidu.com A +noall +answer >/dev/null
ls /opt/data/quzuo/technitium-dns/logs/

实测回显:

logQueries = True
2026-10-19.log

日志按天滚动(<日期>.log),配合 DNS_SERVER_LOG_MAX_LOG_FILE_DAYS=90(部署时设置)自动清理。useLocalTime=false 默认 UTC 时间戳。

缓存:serveStale=true(默认开)+ serveStaleTtl=259200(3 天)——上游故障时用过期缓存应答;clientTimeout=2000 毫秒。这两项默认值即合理,无需改动。

六、生产配置模板

适用于 16GB 内存/普通 SSD/50-500 终端的办公或家庭网络(单节点,Docker Compose 部署为底,本文全部参数已实测):

类别键推荐值理由
递归recursionAllowOnlyForPrivateNetworks(默认)仅私网可递归,防开放解析器被滥用
递归qnameMinimizationtrue(默认)隐私默认开启
转发forwarders留空走递归;或 223.5.5.5,223.6.6.6 + Tls国内加密上游可达性优先
拦截blockListUrlshttps://raw.githubusercontent.com/StevenBlack/hosts/master/hosts2.1 MB 全量源,误杀率低
拦截blockingTypeNxDomain(默认)语义正确
日志logQueriestrue巡检与故障定位基础(D2 依赖)
日志DNS_SERVER_LOG_MAX_LOG_FILE_DAYS90盘占用可控
缓存serveStale / serveStaleTtltrue / 259200(默认)上游抖动时兜底
加密dnsTlsCertificatePath + enableDnsOverTls/enableDnsOverHttps正式证书 + 按需 true对外服务必备
访问管理台强密码 + TOTP 2FA;仅内网暴露Web 台即控制面

⚠️ 注意:不要在公网暴露 53 递归与 5380 Web 台(防 DDoS 反射与爆破);必须暴露时用防火墙白名单或前置反代。

七、常见问题(FAQ)

Q1:settings/set 返回 ok 但行为没变? 两类原因:① 该项需重启服务(加密 DNS 开关/证书,见 5.3 实测:返回 ok 后 853 未监听,重启后出现);② 改错了生效对象(如改了 DNS_SERVER_* 环境变量——它们只在首次初始化生效)。

Q2:拦截了不该拦的域名? 用 dig <域名> TXT 查拦截报告(5.2 实测格式,直接给出命中的 blockListUrl);到 Blocking 页把域名加进 Allowed Zone,或把该黑名单源移除后 forceUpdateBlockLists。

Q3:转发器配了但不解析? 按 5.1 实测路径定位:先 dig +comments 看有无应答——无应答多为上游不可达(本文 1.1.1.1:853 实测无输出),换协议(Udp)或换可达上游对照;有 status: SERVFAIL 则看系统日志定位 DNSSEC/网络层。

Q4:证书配好后 DoH 客户端报证书错误? 自签证书对客户端不可信(openssl 实测 Verify return code: 18 (self-signed certificate))。客户端 +tls-ca 指定自签 CA 或换正式证书。

Q5:忘记 admin 密码? DNS_SERVER_ADMIN_PASSWORD 仅首次初始化生效;重置方式:备份 config 目录后删除 auth.config 重启(恢复初始 admin/password,强制重新设置),再从备份人工找回用户数据;或以其他管理员账号登录后 Users 页重置。

Q6:配置怎么备份/回滚? 管理台 Settings → Backup/Restore(zip,可含 zones/logs/stats/blocklists),或 API POST /api/settings/backup?...;目录级 tar 见部署篇第五节。配置为二进制格式,勿用文本 diff/合并工具处理。

八、参考链接

  1. 官方 HTTP API 文档(settings/set 全参数):https://github.com/TechnitiumSoftware/DnsServer/blob/master/APIDOCS.md(查询日期 2026-10-19)
  2. Docker 环境变量文档:https://github.com/TechnitiumSoftware/DnsServer/blob/master/DockerEnvironmentVariables.md(查询日期 2026-10-19)
  3. 官方在线帮助(Settings 页面各区块说明):https://go.technitium.com/?id=25(查询日期 2026-10-19)
  4. StevenBlack/hosts 黑名单源:https://github.com/StevenBlack/hosts(查询日期 2026-10-19)
  5. 系列文档:《Technitium DNS Server Docker Compose 部署指南》《Technitium DNS Server 日常运维与监控告警手册》