dnsmasq将不存在的子域指向本地IP

dnsmasq将不存在的子域指向本地IP

有一个特定的远程子域mymachine.home.com,其 IP 一直在变化,我需要更新 DNSMasq 才能正确解析它。

但我测试了xxxxxx.home.com不存在的 ping,它似乎都想指向我的 NginX 反向代理。 (我的很多条目都指向那里。)

如何阻止 DNSMasq 将不存在的子域解析为本地 IP? (始终是同一个IP)

或者

如何告诉 DNSMasq 始终对特定条目使用外部 DNS?

这是我的安装配置。

#DNS_Config
#Dont use external file for custom dns
no-hosts
#Use this file for DNS nameservers (contains googles DNS)
resolv-file=/etc/resolv.dnsmasq.conf

##CUSTOM_DNS
#PING home.com = 192.168.1.210
address=/home.com/192.168.1.210
##DHCP##

##DHCP_Config
#Listen only on eth0
interface=eth0
#DHCP Range 192.168.1.2-127 (12hr lease time)
dhcp-range=192.168.1.2,192.168.1.127,12h
#RESERVE DNSMasq SERVER IP
dhcp-host=00:0c:29:c2:56:bf,192.168.1.149
#Change DEFAULT GATEWAY (Default is same IP as DNSMasq Server)
dhcp-option=option:router,192.168.1.1


##STATIC_DHCP
#STATIC IP to 2 MAC Address that WILL NOT be used simultaneously [IE: Laptop with WiFi + LAN]
dhcp-host=00:00:00:00:00:00,00:00:00:00:00:00,192.168.1.210
#Assign STATIC IP by MAC
dhcp-host=00:00:00:00:00:00,192.168.1.211

答案1

您获得不存在的域名的虚假 IP 地址的最常见原因是您的 ISP 将否定答案转换为其广告服务器的地址,以便在您输入错误的网站地址时为您提供更多广告。这绝对是一种不正当的做法,但不幸的是一些 ISP 会这样做。

您通常可以通过使用不同的上游 DNS 服务器来应对这种情况,例如开放DNS(server=208.67.222.222server=208.67.220.220) 或 Google (server=8.8.8.8server=8.8.4.4)。如果您需要 ISP 的服务器来提供自己的客户服务,则只能在特定域 ( server=/myisp.com/203.0.113.1) 中使用它们。

话虽这么说,就您而言,问题是您的配置没有执行您想要的操作。

如何阻止 DNSMasq 将不存在的子域解析为本地 IP。

通过不声明域存在。 Dnsmasq 不会用 IP 地址替换不存在的域。

我如何告诉 DNSMasq 始终对特定条目使用外部 DNS。

通过不声明该主机名的值或包含该主机名的通配符。

您的配置中的问题在于该行

address=/home.com/192.168.1.210

这是一个通配符:它声明这是该域下的192.168.1.210地址和所有主机名。home.com您不需要此通配符,因此请将其删除。

相反,将home.com和 的任何单独域声明home.com主机名,而不是作为通配符,通过将它们列出在/etc/hosts.删除该no-hosts行 - 您想要声明特定的主机,所以您需要它!或者,如果您不想使用/etc/hosts,请保留此行并添加指向使用 声明的不同文件的行addn-hosts=/path/to/hosts-file。或者,如果您想将其全部保留在内部dnsmasq.conf,请将该行替换为host-record=home.com,192.168.1.210

如果您想要有例外的通配符(xxx.home.com除了 for 之外的所有内容都返回 192.168.1.210 mymachine.home.com,或者始终查询上游服务器并仅在否定答案时替换 192.168.1.210),我认为 dnsmasq 无法做到这一点。

答案2

只是为了扩展吉尔的正确答案:

来自 TheKelleys.org DNSMasq 手册页

-A, --address=/<domain>/[domain/][<ipaddr>]

指定要为给定域中的任何主机返回的 IP 地址。域中的查询永远不会被转发,并且始终使用指定的 IP 地址(可以是 IPv4 或 IPv6)进行回复。要为域提供 IPv4 和 IPv6 地址,请使用重复的 -A 标志。请注意,/etc/hosts 和 DHCP 租约会覆盖单个名称的此设置。其常见用途是将整个 doubleclick.net 域重定向到一些友好的本地 Web 服务器以避免横幅广告。域规范的工作方式与 --server 相同,但具有 /#/ 匹配任何域的附加功能。因此,对于任何未从 /etc/hosts 或 DHCP 应答且未由更具体的名称服务器发送到上游名称服务器的查询, --address=/#/1.2.3.4 将始终返回 1.2.3.4--服务器指令。至于 --server,一个或多个没有地址的域会返回 no-such-domain 答案,因此 --address=/example.com/ 相当于 --server=/example.com/ 并返回 NXDOMAIN 例如。 com 及其所有子域。

--host-record=<name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]

将 A、AAAA 和 PTR 记录添加到 DNS。这会将一个或多个名称以及关联的 IPv4 (A) 和 IPv6 (AAAA) 记录添加到 DNS。一个名称可能出现在多个主机记录中,因此会被分配多个地址。只有第一个地址才会创建将地址链接到名称的 PTR 记录。这与读取主机文件所使用的规则相同。主机记录选项被认为是在主机文件之前读取的,因此如果名称也出现在主机文件中,那么出现在那里的名称会抑制 PTR 记录的创建。与主机文件不同,即使扩展主机有效,名称也不会扩展。短名称和长名称可能出现在同一主机记录中,例如。 --host-record=laptop,laptop.thekelleys.org,192.168.0.1,1234::100 如果给出了生存时间,它将覆盖默认值,即零或 --local-ttl 的值。该值是一个正整数,给出了以秒为单位的生存时间。

答案3

我的域名有一个条目是

address=/domain.com/192.168.1.7(我的 NginX 反向代理)

它导致所有不存在的子域(例如 acoimasdin.domain.com)解析为 192.169.1.7。

因为我已经在 apache 中完成了将 domain.com 转发到 www.domain.com 的所有设置,所以我输入了

address=/www.domain.com/192.168.1.7

现在,我的远程子域 DNS 按应有的方式转发到 Google DNS,并且不存在的 DNS 返回为“主机不存在”,这正是我想要的!

本质上,我不能有一个底部/顶部(不确定正确的术语)级别的条目,即domain.com,或者所有不存在的DNS条目都将使用该DNS条目。

相关内容