代理环境下的 DNS 迷思

date
Jan 16, 2023
slug
5Luj55CG546v5aKD5LiL55qEIEROUyDov7fmgJ0=
status
Published
tags
Network
summary
文章讲代理环境下的DNS问题,作者解决了iPhone无法访问Twitter的问题,方法是更改DNS配置。
type
Post
在一系列深入原理的折腾和学习,本以为已经对Surge软件了如指掌了,但今天iPhone突然上不了Twitter,令我很是疑惑,现象是:
  • 连接 WiFi,打开 Surge 的直连模式,无法访问 Twitter,但国内网站访问正常,且 YouTube 访问正常。
  • 连接 WiFi,打开 Surge 的规则模式,一切正常。
  • 连接 WiFi,不打开 Surge,一切正常
  • 使用数据网络,规则模式,一切正常。
遇到这种奇怪的现象,我首先联想的是旁路由的代理出现了问题,经过重启,更换节点,第一种情况依旧存在。然后在 surge Mac dashboard 观察从 iPhone 到旁路由的流量竟然都是IP地址!所以可以确定问题的原因是 iPhone 的 DNS 配置问题。
首先,需要明白代理环境下DNS的行为,因为 surge 是 fake-ip 模式,本地访问需要代理的域名是在远端代理服务器进行 DNS 解析,本地配置 8.8.8.8 毫无意义。
在了解这个行为之前,我一直将 8.8.8.8 类似的国外公共 DNS 服务器写入配置,并且选择了「使用自定义 DNS 服务器」。而后的配置中仅仅将其替换为了 223.5.5.5 等国内的公共 DNS,而问题就出现在这里。在旁路由的透明代理环境下,DNS 服务器是 Surge Mac 创建的 198.18.0.2,而 iPhone 上打开Surge iOS后,由于配置选择的是「使用自定义 DNS 服务器」,所以 Surge 在 iPhone 访问 twitter.com 通过 223.5.5.5 进行 DNS 解析,而解析的 IP 地址又是错误的,所以无法连接,而youtube.com 的解析结果确实正确,所以连接成功。将
配置更改为:dns-server = 223.5.5.5, 119.29.29.29, 119.28.28.28, system 后,第一种情况解除了。
但问题又来了,在将 8.8.8.8 等国外公共DNS剔除之前,为何 iPhone 没有出现这种情况呢?由于在透明代理环境,我们可以正常向8.8.8.8发送UDP请求,而8.8.8.8 可以正确解析外网的链接,所以没有出现问题。

© 2PoL 2020 - 2025