高墙之外❤️

PassWall2 DNS 泄露怎么检测:网页、命令与 IPv6 分层排查

更新于 2026-11-13 · passwall.lol

简答:先在 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
确定命中直连规则的国内域名直连 DNSWAN 出现明文 53 可能是预期行为不能仅凭出现 53 端口判定泄露
浏览器 DoHHTTPS 443tcpdump 无法仅靠端口确认具体 DNS 内容先临时关闭浏览器安全 DNS,再做对照测试
IPv6 公网 DNS应被 PassWall2 接管或按设计直连IPv6 UDP/TCP 53 是否绕过规则需与 IPv4 结果分开判断

PassWall2 的公开 Issue 曾记录 LAN 客户端使用公网 IPv6 GUA 地址查询 DNS 时绕过 PSW2_DNS 的案例;该页面显示为已关闭且未计划处理,不能据此推断所有版本都会出现同样问题,但说明 IPv6 必须单独测试。查看 PassWall2 Issue #1188。

第一步:准备测试环境并做网页初筛

  1. 只保留一条待测路径。暂时关闭电脑上的其他代理、VPN、浏览器扩展代理和系统级 DNS 软件;如果 LAN 客户端启用了浏览器安全 DNS、Android Private DNS 或应用自带 DNS,也先临时关闭。
  2. 清理缓存。路由器可以在不中断时间较短的前提下重启 dnsmasq:/etc/init.d/dnsmasq restart。Windows 客户端可执行 ipconfig /flushdns;其他系统按当前系统的 DNS 缓存机制处理。
  3. 从 LAN 客户端打开检测页面。可使用 BrowserLeaks DNS Leak Test 或 ipleak.net 的 DNS 检测。BrowserLeaks 说明其页面通过随机域名观察浏览器使用的解析服务器;ipleak.net 则将 DNS 泄露定义为名称查询离开预期的 VPN 或代理隧道。
  4. 记录完整结果。保存解析器 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 网络工具包索引。

  1. 先在 LAN 客户端测试路由器入站。把下面的 192.168.1.1 换成路由器 LAN 地址:
    dig example.com @192.168.1.1
    如果超时,先排查客户端到路由器的访问、dnsmasq 和防火墙,不要直接判断为 DNS 泄露。
  2. 测试指定公共 DNS,但不要把“成功返回”当作路径证据。
    dig +short TXT o-o.myaddr.l.google.com @8.8.8.8
    dig +short whoami.akamai.net @8.8.8.8
    这些查询用于尝试识别对端解析器或出口。若结果为空、超时或服务端不再提供该响应,记为“无法核验”,不要用空结果下结论。
  3. 比较不指定服务器和指定服务器的结果。
    dig +short example.com
    dig +short example.com @192.168.1.1
    如果两者都成功,只说明获得了答案;还需要配合 WAN 抓包、PassWall2 日志或规则计数器确认路径。
  4. 分开测试两类域名。选择一个你能确认会命中代理规则的境外域名,再选择一个能确认命中直连规则的国内域名。不要使用随机的 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 搜索实际名称,不要直接创建同名规则。

  1. 记录一次测试前的规则计数器。
  2. 从 LAN 客户端发起一次代理域名查询和一次直连域名查询。
  3. 再次执行相同的 nft list chain 命令。
  4. 比较计数器是否增长,并与 WAN 上的 tcpdump 结果对照。

如果 IPv4 计数器增长、IPv6 计数器不增长,且 IPv6 WAN 抓包看到 LAN 客户端直接访问公网 DNS,优先检查 IPv6 DNS 接管范围、LAN 接口匹配和 RA/DHCPv6 配置。PassWall2 Issue #1188 展示了一个具体的 IPv6 GUA 绕过案例,但该 Issue 的复现环境和版本不能直接套用到你的设备,结论需要以本机抓包和规则计数器为准。查看该 Issue 的规则与命令示例。

异常时的最小改动与复测顺序

  1. 先处理终端自带 DNS。保持浏览器 DoH、系统 Private DNS 和应用自带 DNS 关闭,完成路由器侧定位后再决定是否恢复。
  2. 检查 PassWall2 DNS 页面。进入 LuCI 的 PassWall 2 设置和 DNS 相关页面,确认远程 DNS 协议、远程 DNS 出站、直连 DNS、DNS 重定向以及 IPv6 处理选项。菜单名称和字段可能变化,以当前版本页面为准。
  3. 不要一次改多个变量。先只调整远程 DNS 出站或 DNS 重定向中的一项,保存并重启相关服务;然后清理客户端缓存,重复网页、dig 和 tcpdump 测试。
  4. 检查分流策略。如果配置使用了 IPIfNonMatch、IPOnDemand 或类似“域名未命中后再解析”的策略,某些域名可能先经过直连解析。此类行为要结合当前规则和日志判断,不能仅凭页面显示的 DNS 地址归因。
  5. 最后再恢复 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、抓包和规则计数器结果为准。

相关阅读

参考资料

  1. GitHub - Openwrt-Passwall/openwrt-passwall2
  2. PassWall2 Releases
  3. PassWall2 Issue #1188:LAN 客户端使用 GUA 源地址时 IPv6 DNS 请求绕过 PSW2_DNS
  4. OpenWrt:How to capture, filter and inspect packets using tcpdump or wireshark tools(openwrt.org)
  5. OpenWrt 网络与地址工具包索引(openwrt.org)
  6. BrowserLeaks DNS Leak Test(browserleaks.com)
  7. ipleak.net:IP/DNS Detect(ipleak.net)