1、概述
openwrt的dns由dnsmasq(dns server 和 dhcp server的合并)实现,默认配置为dns转发模式。
由于wan口为dhcp client, 则dhcp server在启动时,将上级路由的ip,作为本路由的nameserver,实现dns转发。
lan口为dhcp server,因此,下级设备自动获取的nameserver即为本路由的ip地址。
2、分析
和dns解析相关的有2个配置文件,都在/tmp下
1) resolv.conf.auto
来源:由netifd生成, netifd在每次wan口up事件时,重写该文件。
作用:当wan口有包请求dns时, foward到该地址上,从该处获取dns。
实例:
分析:sta首先请求本地配置的dns server(自动获取:192.168.95.1)中查询360的ip(dns查询顺序忽略),该包到达ap的lan口后,转发到ap的wan口。
ap的wan口,根据resolv.conf.auto的配置,转发到192.168.1.1上获取。
192.168.1.1收到该包后,请求本地dns server(一般为isp提供),获取360的ip。
结果按照原路返回给sta。
2) resolv.conf
来源:不明,没有深究。
作用:当lan口有包请求dns时, foward到该地址上,从该处获取dns。
实例:
当我们在终端时ping 某一个地址时,该地址在公网和内网都有一个ip地址对应:
分析:当我们在终端ping时,即直接从lan口发包时,匹配resolv.conf里面的nameserver,返回一个内网地址。
通过其他测试,我得出一个额外结论,仅当resolve.conf没有配置时,会再次匹配resolv.conf.auto 返回公网地址,配置错误不会再次匹配。
3、结论
当在lan口直接ping时,读取resolv.conf的内容,作为dns server,若resolv.conf为空,再读取resolv.conf.auto的内容作为nameserver。
在sta上ping时, lan口直接转发到wan口,读取resolv.conf.auto的内容作为nameserver。