You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过dnsmasq设置无顶级域名的本地自定义域名,实现全设备(含Windows)正常访问?

如何通过dnsmasq设置无顶级域名的本地自定义域名,实现全设备(含Windows)正常访问?

我之前也碰到过一模一样的糟心事!Windows对这种不带后缀的单标签域名(比如你设置的g)的解析逻辑和手机、Linux设备完全不一样,默认不会优先走DNS查询,而是先折腾NetBIOS或者LLMNR那一套,所以光靠一条address=/g/192.168.0.96肯定搞不定Windows。下面给你几个不用手动改每台Windows设备的“开箱即用”方案:

方案一:配置本地域名后缀+自动补全(最稳妥)

这个方法既能让Windows自动识别单标签域名,又不影响其他设备的访问习惯,步骤如下:

  1. 编辑你的dnsmasq.conf.add文件,添加以下内容:
domain=lan  # 这里可以换成你喜欢的本地后缀,比如home、local
expand-hosts
address=/g/192.168.0.96
address=/g.lan/192.168.0.96
  1. 登录路由器的Web管理界面,找到DHCP设置选项,把“DNS后缀”或者“本地域名”设置为你刚才选的lan(和配置文件里的一致)。
  2. 重启路由器的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

火山引擎 最新活动