本文发自 http://www.binss.me/blog/solve-dns-resolve-problem-on-openwrt/,转载请注明出处。

搬到新房间,由于无法独占主路由(公用),我将刷了 OpenWRT 的斐讯 K3 作为二级路由,形成以下网络拓扑:

中国电信光猫(桥接) - 主路由(拨号) - K3 。

结果发现当设备连接到 K3 时出现某些域名无法解析的问题,而连接到主路由却没有该问题。

google 苦查无果,只能自己折腾,经过若干天的踩坑,终于在今天解决了该问题。在此分享给遇到该问题的童鞋。

现象

无法连接苹果的 app store,其根本原因是无法解析 api-edge.apps.apple.com 、bag.itunes.apple.com 等域名。

在淘宝、天猫等商品页弹出登录框,在输入信息点击登录后发现网页刷新了一下,依然是未登录状态。

原因

OpenWRT 自带 dnsmasq 做 DNS 解析和 DHCP。dnsmasq 默认会读取 /tmp/resolv.conf.auto 文件,该文件由 OpenWRT 自动生成,在我这如下:

# Interface wan
nameserver 202.96.134.133
nameserver 202.96.128.166
search DHCP
search HOST

其中,202.96.134.133 和 202.96.128.166 继承自上级路由,本质上来自于运营商。经过测试,在使用它们作为上级 server 的时候会解析不到 A 记录。

解决

由于 /tmp/resolv.conf.auto 由 OpenWRT 定期自动生成,我们创建 /root/resolv.conf.fixed 文件,内容如下:

# Interface wan
nameserver 1.2.4.8
nameserver 223.6.6.6
nameserver 223.5.5.5
search DHCP
search HOST

并将文件路径填到 LUCI - DHCP and DNS - Server Settings - Resolv and Hosts Files - Resolve file 中。

通过选用主流 DNS server,解决了上述的问题。