← 网络基础学习第 8 / 55 章基础35 分钟

模块一 · 应用层

DNS 与 Fake-IP

你会设 DNS,但不知道你设的 DNS 有没有真的被用上。

本章要解决的问题:你会设 DNS,但不知道你设的 DNS 有没有真的被用上。

本章的证据来源:历史实测记录(四个不同 DNS 服务器返回同一个答案)
和 captures/snapshot-20261012-220243.md。

先从一个例子理解概念

你记住的是网站名字,连接时却需要目标地址。先区分“查名字得到什么”和“随后连接走哪条路”,才不会把相同答案误判成劫持。

名字与地址不同:域名与DNS

域名是example.com这样的名字;DNS(域名系统)提供名字相关记录,例如对应地址。它不只存IP,也不是替你建立网页连接的程序。

谁负责回答:递归解析器与权威服务器

客户端常把问题交给递归解析器,它利用缓存或继续查询;权威服务器提供自己负责区域的记录。不同递归解析器可以正常得到同样答案。

先用临时地址记住名字:fake-IP

某些代理返回由自己管理的假地址并维护域名映射,叫fake-IP。程序随后连接该地址时,再由代理按配置处理;假地址不是任意公网服务器地址。

进入软件接口与最终出口:TUN和分流

TUN是一种向软件交付IP包的虚拟接口;分流规则决定后续连接采用哪种出口。DNS给了fake-IP不自动证明最后走远端代理。

记录可以缓存多久:DNS TTL

DNS记录的TTL是缓存期限,常以秒计;IP头TTL限制继续转发。缩写相同但用途不同,别混成一个计时器。

下面再用这些概念看原理、命令和结果。规范与官方资料列在本章末尾,类比只帮助理解,不代替协议规则。

DNS 做的事,一句话

把域名翻译成 IP 地址。就这么简单。

细节上分两种查询方式,知道区别就行:

  • 递归查询:客户端问本地 DNS「example.com 的 IP 是多少」,本地 DNS 负责一路问到答案
  • 迭代查询:被问的服务器可能只回「你去问下一个服务器」,由提问方自己继续追

你的电脑只做最外层那一问(叫 stub 查询),把麻烦事交给配置里的 DNS 服务器。

本机的 DNS 配置(实测)

InterfaceAlias ServerAddresses
-------------- ---------------
FlClash        {198.18.0.2}
WLAN           {192.168.31.1}

nslookup 也会告诉你它实际在用哪个:

Server:  UnKnown
Address:  198.18.0.2

注意 UnKnown:DNS 服务器地址是 198.18.0.2,是一个私有/保留地址, 反向解析不出域名,所以显示 UnKnown。这本身已经是个信号。

核心反常现象:四个不同的服务器,同一个答案

原教程分别指定系统默认、8.8.8.8、223.5.5.5和198.18.0.2查询example.com,记录中都返回198.18.0.205。

答案相同本身很正常。 多个递归解析器可以查询同一权威记录或持有相同缓存;这里值得调查的是公网域名返回了基准测试保留段地址,以及当时存在TUN代理。它们与fake-IP相容,但不能仅凭相同答案说“查询必然没到达指定服务器”。RFC 1034 §4.3

示例powershell
Resolve-DnsName example.com -Type A -NoHostsFile -DnsOnly
Resolve-DnsName example.com -Type A -Server 8.8.8.8 -NoHostsFile -DnsOnly
Resolve-DnsName example.com -Type A -Server 223.5.5.5 -NoHostsFile -DnsOnly

指定Server只表示请求意图;透明代理、系统缓存和网络策略仍需排查。确认某个外部解析器实际收到请求,需要结合物理出口抓包、对端日志或退出代理的受控对照。

原因:Fake-IP

代理软件(Clash / mihomo 这类)常用一种叫 fake-IP 的做法。

工作方式

传统方式:
  浏览器问「example.com 的 IP?」→ 真解析 → 拿到 93.184.216.34
  → 浏览器连 93.184.216.34 → 代理再根据 IP 或域名决定怎么走
  → 问题:DNS 阶段就已经把真实 IP 暴露了,且 DNS 本身可能被污染

Fake-IP 方式:
  浏览器问「example.com 的 IP?」→ 代理【不解析】,直接返回假的 198.18.0.205
  → 浏览器连 198.18.0.205 → 流量进入代理的 TUN 网卡
  → 代理拿 198.18.0.205 反查出「哦,这是 example.com」
  → 此时才真正解析域名、再按规则决定直连还是走代理

核心思想:把「解析」这一步推迟到连接建立的时刻, 这样代理手里同时有「域名」和「连接意图」,分流决策更准, 也绕开了本地 DNS 可能被污染的问题。

为什么假地址挑 198.18.x.x

实测确认,198.18.0.0/15 的范围是:

198.18.0.0 ~ 198.19.255.255

这个网段是 RFC 2544 定义的网络设备基准测试保留段, 也被 RFC 6890 登记为特殊用途地址 (来源:ARIN whois NET-198-18-0-0-1、 RFC 6890bis 草案)。

选它的理由:198.18.0.0/15是基准测试特殊用途段,不应在公共互联网传播;但本地实验网络可能合法使用它,因此仍可能与本地地址冲突,不能说绝对不会撞车。

验证:

  198.18.0.205     在 /15 内? True
  198.18.0.207     在 /15 内? True
  198.19.37.34     在 /15 内? True
  198.20.0.1       在 /15 内? False
  FlClash 网卡 198.18.0.0/30 也在 /15 内? True

注意最后一行:代理自己的 TUN 网卡地址 198.18.0.1/30 也在这个 /15 里(见《IP 地址与子网划分》)。 这很方便 —— 假地址和代理网卡同属一个保留段,天然就在代理的势力范围内。

验证:流量真的进了代理

光说「假地址会被代理接管」不够,得看内核怎么决策(实测):

示例powershell
Find-NetRoute -RemoteIPAddress 198.18.0.205
IPAddress  InterfaceAlias NextHop    RouteMetric
---------  -------------- -------    -----------
198.18.0.1 FlClash
           FlClash        198.18.0.2 0

源地址取 198.18.0.1(FlClash 网卡),下一跳 198.18.0.2 —— 流量确实交给代理了。

再补一个细节,用最长前缀匹配算一下 198.18.0.205 命中哪条路由:

  命中 0.0.0.0/0           接口=FlClash   前缀长度=0
  => 最长前缀匹配选中:0.0.0.0/0

它只命中默认路由。 为什么不是 198.18.0.0/30?

因为 /30 的范围是 198.18.0.0 ~ 198.18.0.3,而 .205 早就出了这个范围。 所以假地址是走默认路由进 TUN 的 —— 这和「FlClash 那条默认路由赢了 WLAN」直接相关, 《路由与最长前缀匹配》会详细讲这场竞争。

但不是所有域名都被 Fake

历史记录:example.com和www.baidu.com得到198.18段地址,github.com得到20.205.243.166。这只说明DNS返回的地址形式不同。

DNS的fake-ip-filter和连接最终选择DIRECT/代理是不同决策。 fake-IP可经映射后直连,真实IP也可进入TUN再走代理;不能看到真实IP就断言直连,或看到fake-IP就断言一定经过远端代理。Mihomo DNS配置:fake-ip-filter、Mihomo 路由规则

历史DNS记录TTL=1表示该记录的缓存期限,与IP头中的TTL不是同一个字段。TTL=1不是fake-IP的标准判据,也不能决定连接采用哪个出口;具体映射和规则应查配置与连接日志。

谁在应答 53 端口?一个反直觉的发现

按常识,有人能回答 DNS 查询,就说明有程序在监听 53 端口。查一下:

示例powershell
Get-NetUDPEndpoint -LocalPort 53
LocalAddress LocalPort 进程      OwningProcess
------------ --------- --      -------------
0.0.0.0             53 svchost          3960

历史端点列表显示svchost监听0.0.0.0:53。 进程名本身不能确定哪个服务;通配绑定也可能覆盖本机各地址。198.18.0.2当时是TUN的下一跳地址,不是本机普通地址,本机端点表不能查询另一端实际监听情况。

但 nslookup 明明从 198.18.0.2 拿到了答案。

怎么解释? 关键在于:198.18.0.2 不是本机地址,它是 FlClash 网段 (198.18.0.0/30)里的网关。发往它的包会被路由进 TUN 网卡(见 3.5 节的实测), 然后由运行在用户态的代理程序从 TUN 设备直接读走并应答。

也就是说,代理根本不需要「监听 53 端口」,它靠的是接管网卡。 这也解释了为什么 Get-NetUDPEndpoint 里看不到它。

怎么判断自己被 Fake-IP 了

三条判据,从强到弱:

① 解析结果落在保留段里 198.18.0.0/15(覆盖198.18和198.19),或者代理文档里写的其他 fake-ip-range。

② 换 DNS 服务器,答案不变 不同解析器答案相同不证明fake-IP,答案不同也不能排除代理处理;要与保留段地址、配置、路由和抓包综合判断。

③ 查这个地址属于哪个接口powershell
Find-NetRoute -RemoteIPAddress 198.18.0.205

如果接口是某个 TUN / 虚拟网卡而不是你的物理网卡,基本可以确认。

排错命令速查

示例powershell
# 用系统默认解析器
Resolve-DnsName example.com -Type A

# 指定服务器(记住:不等于查询真的到了那里!)
Resolve-DnsName example.com -Type A -Server 8.8.8.8 -DnsOnly
nslookup example.com 8.8.8.8

# 看本机 DNS 服务器配置
Get-DnsClientServerAddress -AddressFamily IPv4

# 看 DNS 缓存(能看到近期解析过的域名和结果)
ipconfig /displaydns

# 清缓存 —— 改完 DNS 或怀疑缓存被污染时
Clear-DnsClientCache
ipconfig /flushdns

# 列出NS记录,不是完整委派链追踪
Resolve-DnsName example.com -Type NS -DnsOnly
# 完整追踪可在装有dig的Linux/WSL执行:dig +trace example.com

DnsOnly限制查询为DNS,不使用LLMNR/NetBIOS;NoHostsFile另行控制hosts读取。 Resolve-DnsName没有Trace参数,列NS记录也不等于完整委派追踪。Microsoft 命令参数

本章小结

结论性质
不同递归解析器可正常返回同一权威答案DNS机制
历史公网域名返回198.18段,与本地fake-IP处理相容历史观察与推测
198.18.0.0/15覆盖198.18与198.19,仍需排除本地使用冲突地址范围
fake-IP过滤、TUN路由和连接出口规则不是同一决策Mihomo配置
DNS TTL与IP TTL含义不同,TTL=1不是fake-IP标准定义协议区别
本机端点列表不能证明TUN下一跳的监听和代答实现证据限制
Resolve-DnsName无Trace参数;完整委派追踪需相应工具官方参数

自测题

4 题 · 先自己答,再展开对照

  1. 你用 nslookup example.com 8.8.8.8 得到了结果。这能证明 8.8.8.8 可达吗?
    不能。 在本机(有 TUN 代理)的情况下,这个查询很可能被本地代理截获应答了。
    要证明 8.8.8.8 可达,得看 8.8.8.8 那一侧的日志,或者抓包确认请求真的出去了。
    本教程 3.3 节就是这个陷阱的实证:-Server 8.8.8.8 返回了和代理一模一样的答案。
  2. 为什么 fake-IP 要选一个"永远不在公网上出现"的网段?
    该段是非全球可路由的基准测试用途段,可降低与公网服务冲突的风险;本地实验网络仍可能使用它,不能保证绝对无冲突。
  3. 某域名解析出 198.18.0.7。你想知道它实际对应哪个真实 IP,该怎么办?
    本机直接查是查不到的 —— 198.18.0.7 就是个假地址,没有真实对应关系。
    可行的做法:① 用不走代理的解析器查(直连的 DNS,或临时关掉代理);
    ② 在代理软件的面板/日志里看它的 fake-ip 映射表;
    ③ 在代理进程里开启日志,观察它把该域名解析成了什么。
  4. 把 DNS 改成 1.1.1.1 后,解析结果完全没变。有哪些可能的原因?
    可能是权威记录本来相同、缓存、改错接口、DNS转发、透明代理或应用自用DNS。相同答案不是劫持证据,须核对请求来源、配置及实际出口。

参考资料与适用范围

修订核对日期:2026-10-13。规则按所列协议与实现范围理解;文中的原始命令输出是历史观察,不表示本次重新实测。跨版本、代理/隧道及不同捕获位置需要另行核对。

正文源自 m1-01-DNS与Fake-IP.md · 共 13 节 · 4 道自测题