90% 的”网络访问异常”本质是 DNS 问题。本文从分布式层级、查询流程到 Clash TUN 模式下的内网解析方案、加密 DNS、故障排查全套覆盖。两条原则贯穿全文:DNS 是所有网络请求的前置步骤;内网域名访问异常 99% 是解析请求没发到内网 DNS。
DNS 是什么
DNS 是 TCP/IP 应用层的分布式、层级化的域名↔IP 映射系统。一次完整 HTTP 请求:
- 浏览器输入
platform.glm.ai - DNS 解析 → IP
- TCP 连接(HTTPS 还要 TLS 握手)
- 发请求、渲染响应
DNS 解析失败(如 NXDOMAIN),请求根本不会进入后续 TCP / 代理 / 路由环节——这就是为什么写了 DIRECT 规则却仍然访问不了内网域名。
域名层级
完整的 platform.glm.ai. 末尾的 . 才是真正的根。从右到左:
| 层级 | 例子 | 说明 |
|---|---|---|
| 根域 | . | 全球 13 组逻辑根 DNS |
| 顶级域 TLD | .ai | 通用 / 国家 / 新顶级域,由 ICANN 管理 |
| 二级域 | glm.ai. | 个人/企业可注册购买 |
| 子域 | platform.glm.ai. | 由二级域所有者自由配置 |
层级化的核心好处是分布式管理:每一级只管下一级 DNS 的地址,不存在单点瓶颈。
查询流程
发起一次解析包含两段:客户端到本地 DNS 的递归查询;本地 DNS 到各级 DNS 的迭代查询。
递归:客户端只发一次请求,本地 DNS 必须返回最终结果。
迭代:本地 DNS 一层层向上问:
- 问根 →
.ai顶级域 NS - 问
.ai→glm.ai权威 DNS NS - 问
glm.ai权威 DNS →platform.glm.ai的 A/AAAA 记录 - 本地 DNS 缓存结果(TTL 决定时长),返回客户端
- 客户端再缓存到系统/浏览器
协议与端口
| 协议 | 端口 | 场景 |
|---|---|---|
| UDP | 53 | 绝大多数常规解析(小于 512 字节) |
| TCP | 53 | 响应过大、区域传输、安全 DNS 底层 |
主流安全 DNS(DoH/DoT/DoQ)都基于 TCP/TLS 或 QUIC,告别明文 UDP 的污染与窃听。
缓存机制
DNS 缓存是多层级的:浏览器 → 系统 → 本地 DNS → 各级 DNS。每条记录带 TTL,超时自动失效。
修改解析后的”全球生效等待”,本质是等各地缓存过期。“清 DNS 缓存”就是手动清掉本地缓存,强制重新查询。
必知的 DNS 记录类型
| 类型 | 作用 | 场景 |
|---|---|---|
| A | 域名 → IPv4 | 最常用 |
| AAAA | 域名 → IPv6 | IPv6 网络 |
| CNAME | 域名 → 域名 | CDN、负载均衡 |
| NS | 指定权威 DNS | 域名注册必配 |
| MX | 邮件交换 | 域名邮箱 |
| TXT | 文本备注 | SPF / DKIM / DNS 验证 |
| SOA | 起始授权 | 主 DNS、管理员、TTL |
| PTR | IP → 域名 | 反向解析、邮件防垃圾 |
增强模式:Fake-IP vs Redir-Host
代理工具(Clash、Surge)解决”DNS 污染”和”基于域名的分流”,提供两种增强模式。
Fake-IP
代理工具用 IANA 保留段(如 198.18.0.0/16)给域名分配虚假 IP,并建立”虚假 IP → 域名”映射。流量进入 TUN 后再还原域名匹配规则。
- ✅ 极致防污染:无明文 DNS 出网
- ✅ 分流速度快:无需等真实 IP
- ❌ 完全不兼容内网域名:DIRECT 时拿虚假 IP 进内网必然
NXDOMAIN
Redir-Host
不替换真实 IP,向真实 DNS 查询拿到真 IP,建立”真实 IP → 域名”映射。
- ✅ 完美兼容内网(拿真内网 IP 直连)
- ✅ 与系统原生 DNS 一致,排查简单
- ❌ 防污染弱于 Fake-IP(须搭配 DoH/DoT)
选型:纯公网用 Fake-IP;有内网/公司域名访问需求 → Redir-Host。
DNS 劫持
| 类型 | 例子 |
|---|---|
| 运营商劫持 | 拦 53 端口插广告 |
| 恶意劫持 | 钓鱼 WiFi、恶意软件改 DNS |
| 合规劫持 | Clash dns-hijack 主动接管 DNS |
Clash 的 dns-hijack: any:53 把所有 53 流量交给 Clash 自己的 DNS 服务。这就是为什么开 TUN 后系统配置的内网 DNS 不生效——请求根本没出系统。
防御恶意劫持:用 DoH/DoT、不连陌生 WiFi、定期检查 DNS、敏感网站走 HTTPS。
加密 DNS
| 协议 | 全称 | 端口 | 优势 |
|---|---|---|---|
| DoH | DNS over HTTPS | 443 | 伪装成 HTTPS,几乎不会被防火墙拦 |
| DoT | DNS over TLS | 853 | 专用端口,加密层级清晰 |
| DoQ | DNS over QUIC | 784 | 基于 QUIC,握手快,抗丢包 |
Clash 配置:
nameserver:
- https://dns.alidns.com/dns-query # 阿里
- https://doh.pub/dns-query # 腾讯
- https://1.1.1.1/dns-query # Cloudflare分流 DNS:内网+公网同时访问
终极方案:根据域名规则把解析请求发给不同 DNS。
dns:
enable: true
nameserver-policy:
'+.glm.ai': '10.2.3.4' # 内网走内网 DNS
'+.google.com': 'https://1.1.1.1/dns-query' # 境外走 Cloudflare
'+.youtube.com': 'https://1.1.1.1/dns-query'
nameserver:
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query+.glm.ai 同时匹配 glm.ai 与所有子域。
系统 DNS 配置速查
Windows:控制面板 → 网络共享中心 → 适配器属性 → IPv4 → 手动 DNS
macOS:系统设置 → 网络 → 详细信息 → DNS → 添加
常用公共 DNS:
| 服务商 | IPv4 | IPv6 | DoH |
|---|---|---|---|
| 阿里 | 223.5.5.5 / 223.6.6.6 | 2400:3200::1 | https://dns.alidns.com/dns-query |
| 腾讯 DNSPod | 119.29.29.29 / 182.254.116.116 | 2402:4e00::1 | https://doh.pub/dns-query |
| Cloudflare | 1.1.1.1 / 1.0.0.1 | 2606:4700:4700::1111 | https://1.1.1.1/dns-query |
| 8.8.8.8 / 8.8.4.4 | 2001:4860:4860::8888 | https://dns.google/dns-query |
Clash TUN + 内网域名完整配置
tun:
enable: true
stack: gvisor
auto-route: true
auto-detect-interface: true
# 只劫持公共 DNS 53 端口,放行内网 DNS
dns-hijack:
- 223.5.5.5:53
- 119.29.29.29:53
- 8.8.8.8:53
- 1.1.1.1:53
- tcp://223.5.5.5:53
- tcp://8.8.8.8:53
dns:
enable: true
listen: 0.0.0.0:53
enhanced-mode: redir-host # 内网兼容
fake-ip-filter:
- '+.glm.ai'
- '+.local'
- '+.lan'
- 'localhost'
default-nameserver: # 解析 DoH 主机名
- 223.5.5.5
- 119.29.29.29
nameserver:
- https://dns.alidns.com/dns-query
- https://doh.pub/dns-query
nameserver-policy:
'+.glm.ai': '10.2.3.4' # 替换为公司内网 DNS
rules:
- DOMAIN-SUFFIX,glm.ai,DIRECT # 内网放最前
- MATCH,Proxy替换 10.2.3.4 为公司内网 DNS(Windows ipconfig /all,macOS scutil --dns),重载配置 + 清缓存即可。
故障排查
DNS_PROBE_FINISHED_NXDOMAIN
nslookup platform.glm.ai # 默认 DNS
nslookup platform.glm.ai 10.2.3.4 # 指定内网 DNS 复测
dig platform.glm.ai如果指定内网 DNS 能解析、默认 DNS 不能 → 解析请求被劫持到公网 DNS。
解决:配 nameserver-policy、改 redir-host、调整 dns-hijack。
解析超时/无响应
ping 223.5.5.5 # 网络通否
nc -zv 223.5.5.5 53 # 53 端口可达否53 端口被拦 → 改用 DoH/DoT。
解析到错误 IP(DNS 污染)
dig +trace platform.glm.ai # 跟踪完整解析路径切换 DoH/DoT、清缓存、检查 hosts 与系统 DNS。
常用诊断命令
# 解析查询
nslookup domain # 全平台
dig domain @10.2.3.4 # 指定 DNS
dig +trace domain # 完整迭代追踪
dig -x 1.2.3.4 # 反向解析
# 清/查 DNS 缓存
ipconfig /flushdns # Windows 清
ipconfig /displaydns # Windows 查
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder # macOS 清
scutil --dns # macOS 查
sudo systemd-resolve --flush-caches # Linux systemd两条核心原则
- DNS 是所有网络请求的前置步骤,解析失败一切皆止
- 内网域名访问异常 99% 是解析请求没发到内网 DNS——要么被劫持,要么没配分流