如何通过dnsmasq设置无顶级域名的本地自定义域名,实现全设备(含Windows)正常访问?
我之前也碰到过一模一样的糟心事!Windows对这种不带后缀的单标签域名(比如你设置的g)的解析逻辑和手机、Linux设备完全不一样,默认不会优先走DNS查询,而是先折腾NetBIOS或者LLMNR那一套,所以光靠一条address=/g/192.168.0.96肯定搞不定Windows。下面给你几个不用手动改每台Windows设备的“开箱即用”方案:
方案一:配置本地域名后缀+自动补全(最稳妥)
这个方法既能让Windows自动识别单标签域名,又不影响其他设备的访问习惯,步骤如下:
- 编辑你的
dnsmasq.conf.add文件,添加以下内容:
domain=lan # 这里可以换成你喜欢的本地后缀,比如home、local expand-hosts address=/g/192.168.0.96 address=/g.lan/192.168.0.96
- 登录路由器的Web管理界面,找到DHCP设置选项,把“DNS后缀”或者“本地域名”设置为你刚才选的
lan(和配置文件里的一致)。 - 重启路由器的DNS服务(或者直接重启路由器),比如在华硕梅林里可以通过SSH执行
service restart_dnsmasq快速生效。
原理是:Windows从DHCP获取到本地域名后缀后,访问g时会自动补全成g.lan,而dnsmasq已经配置了这个域名的解析;同时address=/g/192.168.0.96依然能让其他设备直接访问g,完美兼容所有设备。
方案二:强制dnsmasq接管所有本地域名查询
如果不想加后缀,也可以让dnsmasq直接处理Windows的单标签域名请求,修改dnsmasq.conf.add为:
local=/./ address=/g/192.168.0.96
local=/./这个配置会让dnsmasq处理所有本地的域名查询(包括单标签的),这样当Windows最终发起DNS查询时,dnsmasq会直接返回你设置的IP。不过这个方法可能会影响一些其他的本地名称解析,比如NetBIOS设备名,所以优先推荐方案一。
为什么Windows会有这个问题?
简单来说,Windows的DNS客户端默认规则:对于不带点的域名,会先尝试NetBIOS广播和LLMNR协议找设备,只有当这些方法失败后,才会发送DNS查询,而且有时候还会自动加上ISP的默认域名后缀,根本不会查你设置的g本身。这就是为什么你加个点(g.)就能访问——加了点之后,Windows会直接把它当成完全合格域名(FQDN)走DNS查询,自然就命中了dnsmasq的规则。
备注:内容来源于stack exchange,提问作者Pickle Tickle




