故障排查
第一步永远是:
bash
sudo dns-stack preflight失败项会附上排查命令。下面按现象列出常见路径。
完全解析不了
bash
dig @127.0.0.1 -p 5335 example.com # 绕过 mosproxy,直接问本机 Unbound
sudo journalctl -u mosproxy -n 50 --no-pager
sudo tail -n 50 /var/log/dns-stack/unbound.log # Unbound 写自己的日志文件,不进 journal- Unbound 能解析、设备不行 → 问题在 mosproxy、证书或 DoH 路径(
dns-stack doh-path核对客户端填的地址)。 - Unbound 也不行 → 看递归链路:
sudo dns-stack routing-status。 - 设置了访问控制、家里换了公网地址 → SSH 登录执行
sudo dns-stack acl disable。
境外域名解析失败、国内正常
几乎总是隧道问题。
bash
sudo wg show wg0 latest-handshakes # 握手时间是否在 2 分钟内
dig @10.100.0.3 -p 5335 www.wikipedia.org # 香港 Unbound 本身是否正常- 隧道断开时境外查询刻意失败,不会回落直连。
- 香港机每月 1 号 01:00 例行重启,期间会短暂出现这种情况并收到告警。
个别域名一直 SERVFAIL
bash
dig @127.0.0.1 -p 5335 <域名>
sudo dns-stack query-log --domain <域名> --since 24h逐跳看它的权威:
bash
sudo dns-stack test <域名>如果它的权威有很多 IPv6 地址,确认 Unbound 的 do-ip6 是 no(unbound-control get_option do-ip6)。国内节点没有 IPv6 路由,开着它会让 Unbound 把发送预算全耗在不可达的地址上。preflight 的「Unbound 运行配置与模板一致」会报出这种漂移。
要看 Unbound 内部到底发生了什么,可以短暂提高日志级别(看完一定要恢复):
bash
unbound-control flush <域名>
unbound-control verbosity 4
dig @127.0.0.1 -p 5335 <域名>
unbound-control verbosity 1
grep -E "sending to target|exceeded|SERVFAIL" /var/log/dns-stack/unbound.log | tail某个国内站被解析到境外节点
bash
sudo dns-stack test <域名>
sudo dns-stack test <域名> 219.141.136.0/24 # 带上运营商网段,看设备实际会拿到什么- 权威在大陆却拿到境外节点 → 多半是冷启动:这个域名刚被第一次解析,还没进国内权威集合。等一轮流水线(15 分钟)或
sudo dns-stack routing-refresh。 - 权威全在境外、但确认它该按国内对待 → 写进
/var/lib/dns-stack/manual-cn-zones.txt后routing-refresh。 - CDN 在大陆有节点、答案却在境外 → ECS 没送达:
sudo dns-stack cdn-hit --fresh。
某个网站变慢
bash
sudo dns-stack query-log --domain <域名> --since 1h看耗时和递归类型。缓存命中应在 1 ms 以内;一次冷递归几百毫秒是正常的。持续很慢时用 dns-stack test 看它的权威走哪条路。
面板打不开
不影响解析,可以慢慢修:
bash
sudo systemctl restart dns-stack-panel
sudo journalctl -u dns-stack-panel -n 50 --no-pager面板监听非回环地址时,没设密码或读不到证书会拒绝启动——日志里会写明是哪一条。
证书过期
bash
sudo dns-stack cert-check
sudo dns-stack cert-renew统计数字停住了
查询照常、统计不动,是采集器出了问题——这类故障不影响解析,所以最容易被忽视。
bash
sudo dns-stack health # 「采集」一组会报出数据停在什么时候
sudo journalctl -u mosproxy -n 50 --no-pager