PCAPdroid + InviZible Pro — 同时看到 DNS 又保留 DNSCrypt/DoH 加密
为什么需要这个
PCAPdroid 默认阻断 DoH——因为如果应用走 DNS-over-HTTPS,PCAPdroid 就看不到明文 DNS 查询内容了(DoH 把 DNS 包在 TLS 里发 HTTPS 请求)。但阻断 DoH 意味着 DNS 查询本身是明文发的,ISP 或局域网都能看到你在查什么域名。
PCAPdroid + InviZible Pro 组合的目的:DNS 查询在 PCAPdroid 里仍是明文可看,然后立刻被重定向到 InviZible Pro 做 DNSCrypt/DoH 加密转发——两边好处都拿到。
五步配置
第一步:关闭 Android 私有 DNS
Android 9+ 有「私有 DNS」(就是 DoT/DNS-over-TLS)设置,在 WiFi / 移动网络 → 私有 DNS 里关闭它。这样 PCAPdroid 才能看到明文 DNS 查询。
第二步:安装并启动 InviZible Pro
安装 InviZible Pro(F-Droid 或 GitHub 有),把它配置在 Proxy Mode,启动后等 DNSCrypt 服务开始运行。此时 InviZible 在本地 5354 端口(TCP+UDP)提供 DNSCrypt 代理。
<img src="images/invizible-pro.jpg" alt="InviZible Pro 界面" title="InviZible Proxy 模式" />
第三步:在 PCAPdroid 里配置端口映射
PCAPdroid 设置里找到 Port Mapping(端口映射)区域,添加两条规则:
- TCP 53 → TCP 5354(TCP 端口映射)
- UDP 53 → UDP 5354(UDP 端口映射)
这两条规则把所有目标端口 53 的 DNS 查询(TCP 和 UDP 都有)重定向到 InviZible 监听的 5354 端口。
<img src="images/port-map-tcp.jpg" alt="TCP 端口映射" title="TCP 端口映射" />
<img src="images/port-map-udp.jpg" alt="UDP 端口映射" title="UDP 端口映射" />
第四步:InviZible 加入豁免列表
PCAPdroid 的端口映射是全局规则,会影响所有流量——也包括 PCAPdroid 和 InviZible 自己发的流量,可能造成死循环。从端口映射页面右上角三点菜单把 InviZible Pro(包名 pan.alexander.tordnscrypt.stable)加到 Exemptions 列表里。
<img src="images/port-exemptions.jpg" alt="端口映射豁免列表" title="加入豁免避免死循环" />
第五步:开始抓包验证
启动 PCAPdroid 抓包,然后访问 dnsleaktest.com 验证:
- PCAPdroid 的 Connections 里应该能看到明文 DNS 查询(目标端口 53,协议显示 DNS)
- dnsleaktest.com 检测结果里应该显示 DNSCrypt/DoH 服务器 IP,而不是你家路由器的 IP
<img src="images/dns-encrypted.jpg" alt="DNS 加密后的连接显示" title="Connections 里带返回箭头的加密 DNS" />
效果确认
Connections 里加密后的 DNS 请求会带一个返回箭头图标,表明这条 DNS 查询经过了 PCAPdroid 端口映射 → InviZible 加密 → 再发出的流程。完成的查询在 DNS 详情面板里能看到响应。