带有 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),遗憾的是无法指定一些内容(serveraddressipset

只有一个域名,即没有子域的域名 仅适用于域名的子域

您唯一能做的就是为域名及其所有子域指定一些内容,并为特定子域覆盖它,例如

address=/domain.tld/192.168.0.1
address=/sub.domain.tld/10.10.0.1

这种单一域名的情况,可以用不同的选项来解决,例如host-recordsrv-record,在某些情况下可能就足够了,但肯定不是全部。例如,如果您确实需要仅对单个域名使用 serveripset 选项,则它不起作用。

【讨论】:

哪个版本的 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 SSL 重写

在 apache 2.2.3 上设置通配符子域(带有反向代理)

markdown 使用dnsmasq在localhost开发中的OS X上的通配符DNS记录

需要通配符子域帮助

二级子域的通配符

在 Netlify 上使用通配符子域