很多”连上 WiFi 却上不了网”的嵌入式设备,问题不在无线而在 DNS:设备知道域名(如 api.xxx.com)却解析不出 IP,就像知道朋友名字却找不到门牌,自然连不上云。

嵌入式设备 DNS 解析异常定位:从配置到劫持的排查流程
图片素材来自免费商用图库(pixabay,摄影师 computergottyt),非本站项目实拍。

一、DNS 是怎么工作的

每次访问云端服务,设备先问”域名对应哪个 IP”:先查本地缓存(快),没有就发 UDP 包给预设 DNS(通常是路由器或运营商);对方返回 IP 并带 TTL(如 300 秒),期间复用。嵌入式 Linux 里靠 getaddrinfo() 触发解析,失败时返回 EAI_NONAME(域名不存在)或 EAI_AGAIN(临时失败)——这些错误码本身就是线索。TTL 太长故障迁移慢、太短增加查询压力,要平衡。

二、分层排查法

一层层往下定位,别一上来就重启:① 确认设备真拿到 IP、网关可达(ping 网关、ping 公开 DNS 8.8.8.8);② 直接用 IP 访问云服务,通说明是域名解析问题而非链路;③ 指定公共 DNS(如 223.5.5.5)排除运营商 DNS 故障;④ 看本地缓存是否脏(清缓存或缩短 TTL);⑤ 查日志里 getaddrinfo 的错误码与频率,定位是超时、NXDOMAIN 还是解析被拦。

三、工程收益

按”链路→DNS服务器→缓存→错误码”逐层决策,平均定位时间能从几十分钟压到十分钟级,避免无谓返修与反复重启。核心就一句:先证明是 DNS 的问题,再去找是哪一层。

三、定位流程与避坑

  • 流程 → 确认设备 DNS 配置 → 测直连 IP 通否 → 测域名解析 → 看是否 DNS 劫持/污染。
  • 坑 → 设备指向了不通的 DNS、DHCP 下发的 DNS 错、或出口做了 DNS 重定向。
  • 验证 → 固定 223.5.5.5/8.8.8.8 对比,排除本地 DNS 问题。

嵌入式设备 DNS 常被忽略:固件里写死旧 DNS、或只配主不配备;双栈环境别忘 IPv6 DNS 也要通。