PassWall2 DoH 与 DoT 怎么设置?按 Xray、sing-box 分步配置
简答:PassWall2 的 DoH 通常在“服务 → PassWall2 → 基本设置 → DNS”中配置,Xray 分支支持 UDP、TCP、DoH,但当前主分支的 Xray 生成逻辑没有单独的 TLS/DoT 分支;sing-box 分支则明确处理 tls,因此找不到 DoT 时应先切换到 sing-box 或改用 DoH。先备份配置,再按本文示例填写并用日志、nslookup、dig 或 openssl 验证。
定义:DoH 是把 DNS 请求放进 HTTPS 连接,通常走 443 端口;DoT 是把 DNS 请求放进 TLS 连接,通常走 TCP 853 端口。
先看结论:DoH 和 DoT 在哪个内核里可用
本文是第三方使用指南,不代表任何客户端项目或服务的官方页面。本文核对日期:2026-11-14。
当前 PassWall2 主分支源码显示,LuCI 文案包含“远程 DNS 协议”“远程 DNS”“远程 DNS DoH”“远程 DNS 出站”等字段,具体字段可在“服务 → PassWall2 → 基本设置 → DNS”附近查找;如果你的界面采用不同分页,以这些字段名称定位,并以当前安装包实际界面为准。PassWall2 中文界面文案
| 目标 | 推荐内核 | 远程 DNS 协议 | 关键结论 |
|---|---|---|---|
| DoH | Xray 或 sing-box | DoH | 两种内核的当前生成逻辑都处理 DoH URL、主机名和可选引导 IP。 |
| DoT | sing-box | TLS | 当前 PassWall2 的 sing-box 分支明确把 tls 转为 TLS DNS;Xray 分支源码的协议分支只有 udp、tcp、doh,未看到独立 tls 分支。 |
| DoT 选项消失 | 先核对内核 | 无 | 若当前使用 Xray,界面不显示 TLS/DoT 属于可预期情况;可切换 sing-box,或先使用 DoH。 |
PassWall2 的 app.sh 中,Xray 的 remote_dns_protocol 分支处理 udp、tcp、doh;sing-box 分支则额外处理 tls 和 quic,并写入 remote_dns_tls。因此,本文不把“DoT 在 Xray 下也一定可用”作为结论。PassWall2 app.sh 协议分支
第 1 步:备份 PassWall2,再确认内核和菜单字段
先通过 SSH 登录路由器。备份命令如下,通常需要 root 权限;OpenWrt 默认 root 用户可直接执行:
cp -a /etc/config/passwall2 /etc/config/passwall2.bak.$(date +%Y%m%d-%H%M%S)
预期结果:命令没有报错,并在 /etc/config/ 下生成带时间的备份文件。检查备份:
ls -l /etc/config/passwall2*
如果提示 No such file or directory,说明配置文件路径或安装状态需要核实,不要继续覆盖配置。查看当前配置中与 DNS、内核相关的字段:
uci show passwall2 | grep -Ei 'dns|protocol|fake|detour|node'
在 LuCI 中依次打开“服务 → PassWall2”,进入“基本设置”或名称相近的 DNS 页面,确认能看到“远程 DNS 协议”“远程 DNS”“远程 DNS DoH”“远程 DNS 出站”等文案。当前分支默认配置中,远程 DNS 协议默认值为 tcp,远程 DNS 示例为 1.1.1.1;这是源码默认配置,不代表每个发行版界面或旧版本都完全一致。PassWall2 默认配置
如果需要 DoT,请确认“节点”或 DNS 处理内核实际选择的是 sing-box。若只能选择 Xray,本文建议先配置 DoH,不要手动把 Xray 的字段强行改成 tls。
第 2 步:先配置一套可回退的 DoH
DoH 适合先验证整体链路,因为它使用 HTTPS 443 端口。PassWall2 当前脚本会从 DoH 字段中读取 URL,并允许用英文逗号追加引导 IP,格式可写成“URL,IP”。PassWall2 DoH URL 解析逻辑
方案 A:Cloudflare DoH
- 远程 DNS 协议:
DoH;如果界面使用英文,选择doh。 - 远程 DNS DoH:
https://cloudflare-dns.com/dns-query,1.1.1.1 - 远程 DNS 出站:选择当前用于访问远程 DNS 的代理或远程出站;若页面没有该字段,以当前版本界面为准。
- 查询策略:先使用
UseIPv4或页面中的 IPv4 优先选项,确认链路稳定后再测试双栈。
Cloudflare 官方给出的 DoH 地址是 https://cloudflare-dns.com/dns-query,支持 HTTPS 443;上面的逗号后 IP 是给域名解析使用的引导地址,不是把 DoH 服务改成普通 UDP DNS。Cloudflare DoH 官方说明
方案 B:Google Public DNS DoH
- 远程 DNS 协议:
DoH - 远程 DNS DoH:
https://dns.google/dns-query - 远程 DNS 出站:按你的分流需求选择;没有该字段时不要自行添加未确认的 UCI 选项。
Google 官方将 https://dns.google/dns-query 列为 RFC 8484 DoH API;不要把浏览器展示页面或其他 JSON 页面误填为 PassWall2 的标准 DoH URL。Google Public DNS DoH 官方说明
填写后点击“保存并应用”。如果出现 invalid URL、DNS timeout 或节点启动失败,先恢复备份,再改回只使用 DoH URL、不追加引导 IP 的写法进行对比。
第 3 步:仅在 sing-box 下配置 DoT
DoT 的结论要先说清楚:当前 PassWall2 主分支的 sing-box 处理逻辑支持 tls,并将服务器地址和端口写入 sing-box 配置;当前 Xray 分支没有对应的独立 tls 分支。因此,DoT 选项只建议在 sing-box 内核下配置。sing-box 与 Xray DNS 协议分支
Cloudflare DoT 示例
- 内核:sing-box。
- 远程 DNS 协议:
TLS;若界面是英文,选择tls。 - 远程 DNS:
one.one.one.one,或在支持 IP 写法的版本中使用1.1.1.1。 - 端口:
853。 - SNI/证书校验:不要关闭证书校验;如果界面要求服务器名称,填写
one.one.one.one。
Cloudflare 官方说明 DoT 使用 TCP 853,并提供 one.one.one.one 主机名;使用主机名有助于证书名称校验。Cloudflare DoT 官方说明
Google Public DNS DoT 示例
- 远程 DNS 协议:
TLS。 - 远程 DNS:
dns.google。 - 端口:
853。 - SNI:
dns.google,如界面提供该字段则保持证书校验开启。
Google 官方列出的 DoT 端点为 dns.google、端口 853,并要求连接使用该主机名作为 SNI。Google Public DNS 安全传输说明
如果切换 sing-box 后仍没有 TLS 选项,可能是安装包版本、界面分支或配置模型不同,需核实当前 PassWall2 包的源码和实际界面;不要仅凭本文字段名修改 UCI。
第 4 步:DNS 重定向、FakeDNS、IPv6 与分流怎么选
配置加密 DNS 后,仍可能因为客户端绕过路由器、IPv6 直连、多个 DNS 服务同时运行而出现“看起来设置成功但实际未使用”的情况。先按下面顺序检查,不要一开始同时打开所有选项。
- DNS 重定向:如果你的目标是让局域网设备统一使用 PassWall2 的 DNS,检查“DNS 重定向”或 dnsmasq 的重定向设置。当前 PassWall2 脚本会在启用相关透明代理配置时处理 dnsmasq DNS 重定向;若系统还运行其他 DNS 接管服务,必须只保留一个负责 53 端口的组件。PassWall2 DNS 重定向规则
- FakeDNS:只在你的分流模式和客户端需要虚拟地址映射时开启。开启后,代理域名的解析结果应落在你配置的 FakeDNS 地址池,而不是普通公网 A/AAAA 地址;地址池具体范围以当前页面为准,不要套用其他教程的固定网段。
- IPv6:如果只验证 IPv4,先使用
UseIPv4或暂时关闭 IPv6 透明代理路径;确认 IPv4 工作后,再单独测试 AAAA。否则可能出现 A 记录走加密 DNS、AAAA 记录却从本地 IPv6 直连的情况。 - IPSet/NFTSet:这是把解析结果用于分流或直连匹配的机制,不等于 DoH/DoT 本身。若启用直连域名写入 IPSet/NFTSet,应确认该域名确实需要直连,否则可能造成分流判断与 DNS 结果不一致。
建议首次配置使用:DoH 或 sing-box DoT + 单一远程 DNS 出站 + IPv4 优先 + FakeDNS 关闭。确认基本解析和分流正常后,再一次只改一个选项。
第 5 步:保存、查看日志并验证是否真的生效
点击“保存并应用”后,等待服务重启。若网页没有明显提示,可通过 SSH 执行:
/etc/init.d/passwall2 restart
预期结果:命令返回到提示符,且 PassWall2 进程重新启动。查看日志时不要依赖 BusyBox 的多个 logread -e 参数,使用管道更稳妥:
logread | grep -iE 'passwall2|xray|sing-box|dns|tls|doh'
预期结果:能看到 PassWall2 启动、内核启动或 DNS 监听相关记录。sing-box 下配置 DoT 时,日志中应能看到与 tls、远程 DNS 或监听端口有关的记录;如果只出现 tcp,说明当前页面可能没有真正选择 TLS,或实际运行的不是 sing-box。
检查 53、853 和监听端口
优先尝试:
ss -lntup | grep -E ':(53|853)\b'
如果提示 ss: not found,使用 BusyBox 常见备选:
netstat -lntup | grep -E ':(53|853)\b'
如果需要完整的 ss 功能,可在确认软件源可用后安装对应的 ip-full 包;不要在不了解固件包管理器时直接照抄安装命令。
检查普通解析与 AAAA
nslookup example.com 127.0.0.1
nslookup -type=AAAA example.com 127.0.0.1
这两条测试的是路由器本地 DNS 转发入口,通常会经过 dnsmasq,不等于直接测试 PassWall2 内核的真实监听端口。若日志或监听表显示 PassWall2 使用其他端口,可安装 bind-dig 后执行:
dig @127.0.0.1 -p 实际端口 example.com A
预期结果:返回 NOERROR 和 A/AAAA 记录。FakeDNS 开启时,应观察答案是否位于当前配置的虚拟地址池;如果返回普通公网地址,说明 FakeDNS 未命中、流量没有进入该 DNS 路径,或当前域名被分到直连 DNS。
单独测试 DoH 和 DoT 的网络可达性
DoH 测试:
curl -fsS -H 'accept: application/dns-json' 'https://cloudflare-dns.com/dns-query?name=example.com&type=A'
预期结果:返回 JSON,且包含状态字段和答案。此命令只证明路由器能访问 DoH 服务,不证明 PassWall2 已接管所有客户端 DNS。
DoT 测试:
openssl s_client -connect 1.1.1.1:853 -servername one.one.one.one
如果提示 openssl: not found,说明固件未安装 openssl 工具;如果连接超时,优先检查 TCP 853 可达性、防火墙和上游网络。看到证书链及 Verify return code: 0 (ok) 才能把 TLS 握手视为基本成功。Cloudflare 也建议先测试 TLS 连通性,再测试 DoT DNS 查询。Cloudflare DNS 排障说明
回滚方法
如果保存后出现全网无法解析、PassWall2 无法启动或节点配置异常,执行:
cp -a /etc/config/passwall2.bak.时间戳 /etc/config/passwall2
/etc/init.d/passwall2 restart
其中“时间戳”替换为第 1 步实际生成的备份文件名。若不确定文件名,先运行 ls -lt /etc/config/passwall2*,核对最近的备份后再覆盖。
常见问题
PassWall2 的 DoT 在哪里设置?
常见入口是“服务 → PassWall2 → 基本设置 → DNS”,在“远程 DNS 协议”中选择 TLS,并填写远程 DNS 主机名和 853 端口。当前主分支的 TLS 处理位于 sing-box 分支;如果使用 Xray 看不到 TLS/DoT,不要强行添加 tls 字段。
为什么 PassWall2 只有 DoH,没有 DoT?
最常见原因是当前使用 Xray 内核,或安装包的 LuCI 页面没有暴露 TLS 选项。当前 PassWall2 app.sh 的 Xray 分支处理 udp、tcp、doh,sing-box 分支额外处理 tls;可先改用 DoH,或核对并切换 sing-box。
DoH 的地址应该填 URL 还是 IP?
DoH 应填写完整 HTTPS URL,例如 <code>https://cloudflare-dns.com/dns-query</code>。部分 PassWall2 版本支持“URL,IP”写法,例如 <code>https://cloudflare-dns.com/dns-query,1.1.1.1</code>,逗号后的地址用于引导解析;如果当前界面没有该提示,先只填 URL。
开启 FakeDNS 后 nslookup 返回公网 IP,是不是设置失败?
不一定。nslookup 指定 127.0.0.1 只测试本地 DNS 转发入口;域名可能被分到直连 DNS、未命中代理规则,或 FakeDNS 没有实际启用。应结合 PassWall2 日志、实际监听端口和 FakeDNS 地址池一起判断。
DoT 配置后出现 TLS handshake timeout 怎么办?
先用 <code>openssl s_client -connect 1.1.1.1:853 -servername one.one.one.one</code> 测试 TCP 853 和证书握手;若超时,检查上游网络或防火墙;若证书校验失败,核对主机名、SNI、系统时间和 CA 证书,不要直接关闭证书校验。
相关阅读
- PassWall2 DNS 设置怎么选
- PassWall2 DNS 泄露检测
- PassWall2 Fake-IP 与 FakeDNS 设置
- PassWall2 DNS 泄露修复
- PassWall2 日志报错怎么看