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

一、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 也要通。
本文整理自公开技术文章,正文未做实质性改写,仅供技术参考。正文主体与原文基本一致,版权归原作者所有;本站仅作技术学习与方案参考,如涉侵权请联系本站删除。



评论 0
还没有评论,来抢沙发吧。