PassWall2 DNS 泄露怎么检测:网页、命令与 IPv6 分层排查
简答:先在 LAN 客户端关闭浏览器 DoH、其他代理和缓存,再用 DNS 泄露网站初筛;随后从路由器执行 dig、tcpdump 和 nftables 计数器核验。境外域名应走远程规则时,WAN 上出现明文 UDP/TCP 53 或 853 才是重点异常;直连域名出现明文 53 可能是分流设计下的正常现象。
定义:PassWall2 DNS 泄露,是本应按代理或远程 DNS 路径处理的域名解析请求,实际从本地运营商、WAN 或未纳入接管的 IPv6 通道直接发出。
先看结论:什么现象才算 DNS 泄露
本文是第三方使用指南,不是 PassWall2 或相关服务的官方页面。PassWall2 的界面、字段和规则链名称可能随版本、OpenWrt 防火墙后端及所用核心变化,以下路径请以当前页面显示为准。
最小判断标准:不要只看某个 DNS 地址能否返回结果,而要确认“谁在回答、请求从哪里出去、它是否符合该域名的分流设计”。例如,透明重定向可能让 dig @1.1.1.1 example.com 成功返回,但这不能单独证明请求真的直连了 1.1.1.1。
| 测试对象 | 预期路径 | 重点观察 | 结果含义 |
|---|---|---|---|
| 确定命中代理规则的境外域名 | 远程 DNS 或代理隧道 | WAN 不应出现对应的明文 53/853 请求 | 出现明文请求时,优先查 DNS 重定向、IPv6 和浏览器 DoH |
| 确定命中直连规则的国内域名 | 直连 DNS | WAN 出现明文 53 可能是预期行为 | 不能仅凭出现 53 端口判定泄露 |
| 浏览器 DoH | HTTPS 443 | tcpdump 无法仅靠端口确认具体 DNS 内容 | 先临时关闭浏览器安全 DNS,再做对照测试 |
| IPv6 公网 DNS | 应被 PassWall2 接管或按设计直连 | IPv6 UDP/TCP 53 是否绕过规则 | 需与 IPv4 结果分开判断 |
PassWall2 的公开 Issue 曾记录 LAN 客户端使用公网 IPv6 GUA 地址查询 DNS 时绕过 PSW2_DNS 的案例;该页面显示为已关闭且未计划处理,不能据此推断所有版本都会出现同样问题,但说明 IPv6 必须单独测试。查看 PassWall2 Issue #1188。
第一步:准备测试环境并做网页初筛
- 只保留一条待测路径。暂时关闭电脑上的其他代理、VPN、浏览器扩展代理和系统级 DNS 软件;如果 LAN 客户端启用了浏览器安全 DNS、Android Private DNS 或应用自带 DNS,也先临时关闭。
- 清理缓存。路由器可以在不中断时间较短的前提下重启 dnsmasq:
/etc/init.d/dnsmasq restart。Windows 客户端可执行ipconfig /flushdns;其他系统按当前系统的 DNS 缓存机制处理。 - 从 LAN 客户端打开检测页面。可使用 BrowserLeaks DNS Leak Test 或 ipleak.net 的 DNS 检测。BrowserLeaks 说明其页面通过随机域名观察浏览器使用的解析服务器;ipleak.net 则将 DNS 泄露定义为名称查询离开预期的 VPN 或代理隧道。
- 记录完整结果。保存解析器 IP、组织或 ASN、国家/地区、测试时间,以及当时 PassWall2 的代理模式、DNS 模式和 IPv6 状态。只出现远程 DNS 所在组织并不等于每个请求都经过了相同路径,但出现本地运营商或明显不符合预期的解析器,应继续做命令核验。
网页检测只能说明检测站点观察到哪些解析器,不能直接证明某个 LAN 客户端的每一种 DNS 请求都走同一条路径,也不能区分 DNS 泄露、DNS 污染、IPv6 地址泄露和 WebRTC 泄露。网页结果异常后,不要马上改配置,先继续下一步留存证据。
第二步:从路由器和 LAN 客户端确认“谁在回答”
OpenWrt 默认不一定安装 dig 或完整的抓包工具。官方包索引列出了 bind-dig,可先查询当前固件的包管理器和可用包名:opkg --version 或 apk --version。OpenWrt 官方文档给出的安装方式是:较新的系统使用 apk update && apk add tcpdump,较旧系统使用 opkg update && opkg install tcpdump;具体包名和版本仍以当前固件仓库为准。查看 OpenWrt tcpdump 抓包说明、查看 OpenWrt 网络工具包索引。
- 先在 LAN 客户端测试路由器入站。把下面的
192.168.1.1换成路由器 LAN 地址:dig example.com @192.168.1.1
如果超时,先排查客户端到路由器的访问、dnsmasq 和防火墙,不要直接判断为 DNS 泄露。 - 测试指定公共 DNS,但不要把“成功返回”当作路径证据。
dig +short TXT o-o.myaddr.l.google.com @8.8.8.8dig +short whoami.akamai.net @8.8.8.8
这些查询用于尝试识别对端解析器或出口。若结果为空、超时或服务端不再提供该响应,记为“无法核验”,不要用空结果下结论。 - 比较不指定服务器和指定服务器的结果。
dig +short example.comdig +short example.com @192.168.1.1
如果两者都成功,只说明获得了答案;还需要配合 WAN 抓包、PassWall2 日志或规则计数器确认路径。 - 分开测试两类域名。选择一个你能确认会命中代理规则的境外域名,再选择一个能确认命中直连规则的国内域名。不要使用随机的
example.com子域作为唯一测试对象,因为 NXDOMAIN 或规则未命中会让结果难以解释。
建议把 LAN 客户端测试和路由器本机测试分开记录。路由器本机的 DNS 请求可能走本机服务、代理核心或防火墙例外路径,不能直接代表所有 LAN 客户端。
第三步:用 tcpdump 区分 53、853、443 与 IPv6
先确定 WAN 接口。下面命令优先读取 OpenWrt 的 l3_device,读取不到时再手动替换接口名:
WAN_IF=$(ifstatus wan 2>/dev/null | jsonfilter -e '@["l3_device"]'); [ -n "$WAN_IF" ] || WAN_IF=pppoe-wan; echo "$WAN_IF"
在另一个 SSH 窗口启动抓包:
tcpdump -ni "$WAN_IF" 'udp port 53 or tcp port 53 or udp port 853 or tcp port 853'
然后从 LAN 客户端分别查询代理域名和直连域名。判断时按下面逻辑处理:
- 远程 DNS 通过代理隧道传输时,WAN 上通常只会看到代理隧道的外层流量,不会看到里面的明文 DNS 53;因此,代理域名测试期间出现明确发往外部解析器的明文 UDP/TCP 53,才是需要重点排查的证据。
- 直连 DNS 设计下,国内域名的明文 53 出现在 WAN 可能是正常现象。不能把所有 53 端口流量都称为泄露。
- 853 端口对应 DoT 线索,但仅抓 53 会漏掉它。若 853 流量出现在不符合预期的外部路径,需要查看 PassWall2 的远程 DNS 协议和出站选择。
- DoH 使用 HTTPS 443,单靠端口无法从 WAN 抓包确认其中是否承载 DNS。定位阶段应先关闭浏览器或应用 DoH,再重复 53、853 和网页测试;不要把普通 HTTPS 443 一概当成 DoH。
- 要覆盖 IPv6,使用:
tcpdump -ni "$WAN_IF" 'ip6 and (udp port 53 or tcp port 53 or udp port 853 or tcp port 853)'
该命令只观察 IPv6 DNS 相关数据包,不等同于 IPv6 网站连接测试。
OpenWrt 官方抓包文档也提醒,tcpdump 可在指定接口上实时捕获数据;接口名、系统版本和包安装方式要以设备实际环境为准。参考 OpenWrt 官方抓包文档。
第四步:用 nftables 计数器核对 PassWall2 是否接管
如果设备使用 nftables,可以先查看 PassWall2 相关规则是否存在:
nft list ruleset | grep -n -E 'PSW2_DNS|passwall2|53|853'
如果能看到对应表和链,再分别查看 DNS 链:
nft list chain inet passwall2 PSW2_DNS
部分版本的表名、链名或规则结构可能不同;若命令提示对象不存在,应先执行 nft list ruleset 搜索实际名称,不要直接创建同名规则。
- 记录一次测试前的规则计数器。
- 从 LAN 客户端发起一次代理域名查询和一次直连域名查询。
- 再次执行相同的
nft list chain命令。 - 比较计数器是否增长,并与 WAN 上的 tcpdump 结果对照。
如果 IPv4 计数器增长、IPv6 计数器不增长,且 IPv6 WAN 抓包看到 LAN 客户端直接访问公网 DNS,优先检查 IPv6 DNS 接管范围、LAN 接口匹配和 RA/DHCPv6 配置。PassWall2 Issue #1188 展示了一个具体的 IPv6 GUA 绕过案例,但该 Issue 的复现环境和版本不能直接套用到你的设备,结论需要以本机抓包和规则计数器为准。查看该 Issue 的规则与命令示例。
异常时的最小改动与复测顺序
- 先处理终端自带 DNS。保持浏览器 DoH、系统 Private DNS 和应用自带 DNS 关闭,完成路由器侧定位后再决定是否恢复。
- 检查 PassWall2 DNS 页面。进入 LuCI 的 PassWall 2 设置和 DNS 相关页面,确认远程 DNS 协议、远程 DNS 出站、直连 DNS、DNS 重定向以及 IPv6 处理选项。菜单名称和字段可能变化,以当前版本页面为准。
- 不要一次改多个变量。先只调整远程 DNS 出站或 DNS 重定向中的一项,保存并重启相关服务;然后清理客户端缓存,重复网页、dig 和 tcpdump 测试。
- 检查分流策略。如果配置使用了
IPIfNonMatch、IPOnDemand或类似“域名未命中后再解析”的策略,某些域名可能先经过直连解析。此类行为要结合当前规则和日志判断,不能仅凭页面显示的 DNS 地址归因。 - 最后再恢复 DoH。如果恢复浏览器 DoH,应确认浏览器的 HTTPS 443 流量会走预期代理路径,并再次运行网页测试。若无法确认 DoH 的路由,不要把“关闭 DoH 后正常”误写成“PassWall2 已完全修复”,只能说明终端 DoH 是影响因素之一。
最小复测清单:同一 LAN 客户端、同一代理域名和直连域名;分别记录 IPv4 与 IPv6;重复 dig、WAN 抓包和网页检测;最后再测试浏览器 DoH 开启后的结果。
容易误判的四种情况
- 把 1.1.1.1 或 8.8.8.8 查询成功当成直连:透明重定向可能让指定服务器参数失去原本的路径含义,必须结合“谁在回答”和抓包判断。
- 看到 WAN 的 53 就判定泄露:如果测试的是按规则直连的国内域名,明文 53 可能符合设计;应优先测试明确应走远程的境外域名。
- 只抓 UDP 53:还要覆盖 TCP 53、UDP/TCP 853,以及单独处理无法靠端口识别的 DoH 443。
- 把 DNS 泄露和 IPv6 地址泄露混为一谈:DNS 解析器异常、IPv6 网站连接走了不同出口、WebRTC 暴露地址是不同问题,应分别测试和记录。
PassWall2 的公开仓库提供了项目代码、安装说明和 Release 页面;版本、核心和配置结构请以当前仓库及设备页面为准。查看 PassWall2 项目仓库、查看 PassWall2 Release 页面。
常见问题
PassWall2 DNS 泄露测试显示本地运营商 DNS,就一定是泄露吗?
不一定。网页测试只显示检测站点观察到的解析器。先确认测试域名按你的分流规则应走远程还是直连,再用 LAN 客户端的 dig、WAN 抓包和 nftables 计数器交叉核验。直连域名出现本地 DNS 可能符合配置;明确应走远程的域名出现明文外发才更值得关注。
为什么 dig @8.8.8.8 能返回结果,仍然可能存在 DNS 泄露?
因为透明重定向可能拦截并改写了请求路径,命令中的目标地址不一定就是实际回答者。应同时查看 whoami 类查询、PassWall2 规则计数器和 WAN 抓包,确认请求是否真正到达指定解析器。
tcpdump 只看到 443,能证明 DNS 没有泄露吗?
不能。DoH 使用 HTTPS 443,普通 tcpdump 无法只凭端口识别其中是否承载 DNS。定位阶段应先关闭浏览器或应用 DoH,再测试 UDP/TCP 53、UDP/TCP 853;完成路由器侧排查后,再恢复 DoH 并单独验证其代理路径。
IPv6 DNS 绕过 PassWall2 时应该先改哪里?
先不要直接改 RA 或 DHCPv6。先确认 LAN 客户端是否获得公网 IPv6 GUA、IPv6 UDP/TCP 53 是否在 WAN 直出、PassWall2 的 IPv6 规则计数器是否增长,再检查 DNS 重定向的 LAN 接口匹配、IPv6 接管选项和当前防火墙后端。不同固件的字段可能不同,无法核实的默认值不要照抄。
FakeDNS 开启就一定不会泄露吗?
不能一概而论。FakeDNS 只是解析和流量接管链路中的一个模式,实际结果还受核心、分流规则、IPv4/IPv6、防火墙和终端 DoH 影响。应以当前配置下的网页、dig、抓包和规则计数器结果为准。
相关阅读
参考资料
- GitHub - Openwrt-Passwall/openwrt-passwall2
- PassWall2 Releases
- PassWall2 Issue #1188:LAN 客户端使用 GUA 源地址时 IPv6 DNS 请求绕过 PSW2_DNS
- OpenWrt:How to capture, filter and inspect packets using tcpdump or wireshark tools(openwrt.org)
- OpenWrt 网络与地址工具包索引(openwrt.org)
- BrowserLeaks DNS Leak Test(browserleaks.com)
- ipleak.net:IP/DNS Detect(ipleak.net)