dnsmasq配置疑问:如何允许主域名并拦截所有子域名?为何两组规则解析结果不同?
dnsmasq配置疑问:如何允许主域名并拦截所有子域名?为何两组规则解析结果不同?
嗨,我来帮你理清楚这两组规则的差异哈!
先看你的规则设置和对应的解析结果:
- 用Set1规则时,执行
dig firebaseio.com会返回127.0.0.1; - 用Set2规则时,能拿到该域名的正常公网IP。
问题核心出在你对server=/firebaseio.com/#这条规则的理解上——它的实际作用和你预想的不一样!
在dnsmasq的逻辑里,server=/domain/#的含义是:针对这个域名的所有查询,完全禁用上游DNS服务器(包括你之前设置的server=8.8.8.8),只能由dnsmasq本地处理。那本地怎么处理呢?你设置的address=/*.firebaseio.com/只匹配所有子域名(比如xxx.firebaseio.com这类),主域名firebaseio.com并不符合这个通配符格式。这时候dnsmasq既没有主域名的本地解析记录,又不能去上游服务器查询,就会触发默认行为返回127.0.0.1。
再看Set2里的server=/firebaseio.com/8.8.8.8,这条规则是明确告诉dnsmasq:针对firebaseio.com这个域的查询,全部走8.8.8.8这个上游服务器去解析。所以主域名firebaseio.com会被8.8.8.8正常解析出公网IP,而子域名依然被address=/*.firebaseio.com/拦截指向127.0.0.1,刚好符合你想要的“允许主域名+拦截子域名”的需求。
最后再帮你划个重点:
server=/domain/#是禁用该域名的所有上游解析通道,不是用默认上游服务器查询;server=/domain/指定服务器地址才是让该域名的查询走你指定的上游服务器。
备注:内容来源于stack exchange,提问作者user1038121
相关产品推荐
相关产品推荐

