带有 dnsmasq 的通配符子域
Posted
技术标签:
【中文标题】带有 dnsmasq 的通配符子域【英文标题】:Wildcard subdomains with dnsmasq 【发布时间】:2014-04-14 07:43:52 【问题描述】:我有一个已经映射到domain.tld
的设备。我现在想为所有子域 *.domain.tld
创建一个通配符,以便它们也映射到 domain.tld
的 ip。
如何使用dnsmasq
执行此操作?
【问题讨论】:
【参考方案1】:在dnsmasq.conf
文件中,添加一行
address=/.domain.tld/192.168.0.1
但是使用你真正想要的 IP 作为结束位
【讨论】:
我通常会为每个主机创建一个单独的配置文件,并将其放在'/etc/dnsmasq.d/'目录中。这样做的好处是在维护时不必处理这样一个单一的文件。 @LukeA.Leber 听起来更加乏味,因为找到正确的主机文件将与文件中的一行相同甚至更少“可维护”。然后除了找到文件之外,您还必须进行相同的编辑。更多工作。 见下文:前导点不是通配符 但是这只能为通配符域添加一条记录,我怎么能有多个记录?【参考方案2】:虽然接受的答案可能已经解决了作者的问题,但它具有误导性,因为它暗示前导点将仅匹配子域,这是不正确的。
dnsmasq ignores 任何前导点,这样
address=/domain.tld/192.168.0.1
等价于
address=/.domain.tld/192.168.0.1
甚至
address=/......domain.tld/192.168.0.1
截至目前(dnsmasq v2.76),遗憾的是无法指定一些内容(server
、address
、ipset
)
您唯一能做的就是为域名及其所有子域指定一些内容,并为特定子域覆盖它,例如
address=/domain.tld/192.168.0.1
address=/sub.domain.tld/10.10.0.1
这种单一域名的情况,可以用不同的选项来解决,例如host-record
、srv-record
,在某些情况下可能就足够了,但肯定不是全部。例如,如果您确实需要仅对单个域名使用 server
或 ipset
选项,则它不起作用。
【讨论】:
哪个版本的 dnsmasq 支持上述覆盖?我从 Asus Merlin 获得了 dnsmasq 2.76-g0007ee9,但它不起作用 @Hengjie 我刚刚使用 dnsmasq 官方 2.76 版本的构建测试了上述示例配置中的覆盖。我将这两行放在一个临时配置文件中,执行dnsmasq -p 5353 -k -C /tmp/dnsmasq.conf
并使用dig @127.0.0.1 -p 5353 sub.domain.tld
进行测试。无论如何,我不记得在任何特定版本的 dnsmasq 中都添加了这种覆盖设置。它基本上应该适用于任何 dnsmasq 版本。
可以address=.example/*/foo
吗?似乎对我不起作用。
@chovy 您可能应该问一个单独的问题。目前还不清楚,你打算做什么,什么不起作用。我可以肯定地说,地址选项中的通配符是#
而不是*
。
可以做类似address=localhost.*/127.0.0.1
的事情吗?那就是将任何具有 localhost 子域的主机指向 127.0.0.1?以上是关于带有 dnsmasq 的通配符子域的主要内容,如果未能解决你的问题,请参考以下文章
在 apache 2.2.3 上设置通配符子域(带有反向代理)