OpenWrt主路由无法为下级OpenWrt路由解析本地主机名问题咨询
兄弟你这个场景我太熟了,之前帮朋友排查过好几次类似问题,咱们一步步拆解可能的原因和解决方向:
主路由DNS服务的访问权限限制
最常见的原因就是主路由默认的DNS服务(dnsmasq)只对直连的LAN子网开放本地记录查询权限。比如你主路由LAN是192.168.1.x网段,下级路由的子网是192.168.2.x,而dnsmasq的配置里可能开了local-service选项——这个选项会限制只有直连本地子网的设备能查询本地主机名,下级子网的请求直接被拒。你可以登录主路由,检查/etc/dnsmasq.conf,如果看到local-service就把它注释掉,或者添加listen-address=主路由LANIP,下级路由子网的网关IP,让dnsmasq监听并响应下级子网的请求。下级路由的源IP转换问题
当下级路由里的设备发起DNS请求时,经过下级路由WAN口后,源IP会变成下级路由的WAN IP(属于主路由LAN网段)。如果主路由的dnsmasq没把这个IP纳入允许查询的范围,或者本地记录的解析规则只针对直连设备的IP段,就会返回空结果。你可以在主路由上用tcpdump port 53抓个包,看看下级路由的DNS请求有没有过来,主路由是不是没返回本地记录的解析结果。主路由本地记录的接口绑定问题
检查主路由LuCI后台「网络→主机名」里添加的本地记录,是不是不小心绑定了特定LAN接口?如果绑定了,那只有该接口下的直连设备能解析,而下级路由走的是主路由的LAN接口但不在绑定规则里,自然拿不到解析结果。把绑定接口改成「所有接口」或者包含主路由LAN接口就行。下级路由的DNS转发配置问题
先确认下级路由的WAN DNS确实设成了主路由的LAN IP,而且下级路由没有偷偷把DNS请求转发到公共DNS(比如8.8.8.8)。你可以在下级路由的终端里执行nslookup 你的本地主机名 主路由LANIP手动测试,如果手动能拿到正确解析结果,那就是下级路由的默认DNS转发逻辑有问题;如果手动也不行,那肯定是主路由那边的权限限制在搞鬼。
备注:内容来源于stack exchange,提问作者Vladimir

