90% 的”网络访问异常”本质是 DNS 问题。本文从分布式层级、查询流程到 Clash TUN 模式下的内网解析方案、加密 DNS、故障排查全套覆盖。两条原则贯穿全文:DNS 是所有网络请求的前置步骤;内网域名访问异常 99% 是解析请求没发到内网 DNS。

DNS 是什么

DNS 是 TCP/IP 应用层的分布式、层级化的域名↔IP 映射系统。一次完整 HTTP 请求:

  1. 浏览器输入 platform.glm.ai
  2. DNS 解析 → IP
  3. TCP 连接(HTTPS 还要 TLS 握手)
  4. 发请求、渲染响应

DNS 解析失败(如 NXDOMAIN),请求根本不会进入后续 TCP / 代理 / 路由环节——这就是为什么写了 DIRECT 规则却仍然访问不了内网域名。

域名层级

完整的 platform.glm.ai. 末尾的 . 才是真正的根。从右到左:

层级例子说明
根域.全球 13 组逻辑根 DNS
顶级域 TLD.ai通用 / 国家 / 新顶级域,由 ICANN 管理
二级域glm.ai.个人/企业可注册购买
子域platform.glm.ai.由二级域所有者自由配置

层级化的核心好处是分布式管理:每一级只管下一级 DNS 的地址,不存在单点瓶颈。

查询流程

发起一次解析包含两段:客户端到本地 DNS 的递归查询;本地 DNS 到各级 DNS 的迭代查询。

递归:客户端只发一次请求,本地 DNS 必须返回最终结果。

迭代:本地 DNS 一层层向上问:

  1. 问根 → .ai 顶级域 NS
  2. .aiglm.ai 权威 DNS NS
  3. glm.ai 权威 DNS → platform.glm.ai 的 A/AAAA 记录
  4. 本地 DNS 缓存结果(TTL 决定时长),返回客户端
  5. 客户端再缓存到系统/浏览器

协议与端口

协议端口场景
UDP53绝大多数常规解析(小于 512 字节)
TCP53响应过大、区域传输、安全 DNS 底层

主流安全 DNS(DoH/DoT/DoQ)都基于 TCP/TLS 或 QUIC,告别明文 UDP 的污染与窃听。

缓存机制

DNS 缓存是多层级的:浏览器 → 系统 → 本地 DNS → 各级 DNS。每条记录带 TTL,超时自动失效。

修改解析后的”全球生效等待”,本质是等各地缓存过期。“清 DNS 缓存”就是手动清掉本地缓存,强制重新查询。

必知的 DNS 记录类型

类型作用场景
A域名 → IPv4最常用
AAAA域名 → IPv6IPv6 网络
CNAME域名 → 域名CDN、负载均衡
NS指定权威 DNS域名注册必配
MX邮件交换域名邮箱
TXT文本备注SPF / DKIM / DNS 验证
SOA起始授权主 DNS、管理员、TTL
PTRIP → 域名反向解析、邮件防垃圾

增强模式: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

协议全称端口优势
DoHDNS over HTTPS443伪装成 HTTPS,几乎不会被防火墙拦
DoTDNS over TLS853专用端口,加密层级清晰
DoQDNS over QUIC784基于 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

服务商IPv4IPv6DoH
阿里223.5.5.5 / 223.6.6.62400:3200::1https://dns.alidns.com/dns-query
腾讯 DNSPod119.29.29.29 / 182.254.116.1162402:4e00::1https://doh.pub/dns-query
Cloudflare1.1.1.1 / 1.0.0.12606:4700:4700::1111https://1.1.1.1/dns-query
Google8.8.8.8 / 8.8.4.42001:4860:4860::8888https://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

两条核心原则

  1. DNS 是所有网络请求的前置步骤,解析失败一切皆止
  2. 内网域名访问异常 99% 是解析请求没发到内网 DNS——要么被劫持,要么没配分流