使用 dnsmasq 按名称寻址机器并解析外部主机名

使用 dnsmasq 按名称寻址机器并解析外部主机名

我在设置 dnsmasq 时遇到了一些问题。我只想让它将某些主机名解析为网络上任何机器的某些 IP 地址。更具体地说,我试图使网络上的所有设备能够仅使用指定的主机名访问网络上的某些机器。我想我一定错过了一些重要的东西,因为即使我让它工作了一次,在我的 DNS 服务器重新启动后,它就停止转发 LAN 外的服务器请求。

这是我的设置:(所有 IP 地址都只有 IPv4 地址的最后一位数字)

  • Apple Airport Extreme 设置为 DHCP 和 NAT 模式(此路由器上不能只使用 NAT,因此为了获得 NAT,我将 DHCP 范围设置为 253-254,并为这些 IP 保留了一些虚假的 MAC 地址)。在我的网络上,它的 IP 地址为 1

  • 运行 raspbian 和 dnsmasq 的 Raspberry PI。它的 IP 地址为 4,主机名为“pi”

  • 一台名为“塔”的机器在 3

Dnsmasq 被设置为 DNS 和 DHCP 服务器。所有连接到网络的机器都会获得我在 dnsmasq 中指定的正确范围内的 IP 地址,并且树莓派 (IP 4) 会自动指定为 DNS 服务器。Dnsmasq 还设置为将其无法找到的任何请求转发到其他公共 DNS 服务器。以下是我的全部 DNS 服务器,其中已删除完整的 IP 地址:

/etc/dnsmasq.conf:

# Dnsmasq.conf for raspberry pi    
# Full examples found here:  
# http://www.thekelleys.org.uk/dnsmasq/docs/dnsmasq.conf.example  

# Set up your local domain here    
domain=hyrule.home

# Example: The option local=/localnet/ ensures that any domain name query which ends in .localnet will be answered if possible from /etc/hosts or DHCP, but never sent to an upstream server
# don't forward requests (andrewoberstar.com/blog/2012/12/30/raspberry-pi-as-server-dns-and-dhcp)
local=/hyrule.home/

#resolv-file=/etc/resolv.dnsmasq  
resolv-file=/etc/resolv.conf  
#min-port=4096   

## DNS SERVERS
#openNic california
server=173.230.156.28

#openNic Washington
server=23.226.230.72

#google public DNS
server=8.8.8.8
server=8.8.4.4

# Max cache size dnsmasq can give us
cache-size=10000

# Use the hosts file on this machine
expand-hosts

# ethernet - ip address mappings from /etc/ethers file
read-ethers

# Below are settings for dhcp. 
dhcp-range=XXX.XXX.X.10,XXX.XXX.X.200,12h
dhcp-option=3,XXX.XXX.X.1
dhcp-authoritative
log-queries

/etc/resolv.conf:

domain hyrule.home 
#search hyrule.home
#nameserver 8.8.8.8

/etc/hosts

127.0.0.1   localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0     ip6-localnet
ff00::0     ip6-mcastprefix
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters

127.0.1.1   raspberrypi
XXX.XXX.X.3 tower
XXX.XXX.X.4 pi

还有/etc/ethers文件包含相应机器的以太网接口的 mac 地址

我可以看到 dnsmasq 正在记录请求,一切看起来都很正常,所有请求看起来都像

Nov  2 17:29:21 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com.hsd1.ca.comcast.net from 10.0.1.1
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 173.230.156.28
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 23.226.230.72
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 8.8.8.8
Nov  2 17:29:21 raspberrypi dnsmasq[2067]: forwarded time.apple.com.hsd1.ca.comcast.net to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[A] north-america.pool.ntp.org from 10.0.1.59
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded north-america.pool.ntp.org to 173.230.156.28
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[TXT] push.apple.com from 10.0.1.3
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 173.230.156.28
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded push.apple.com to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com.hyrule.home from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: config time.apple.com.hyrule.home is NXDOMAIN-IPv6
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[A] time.apple.com.hyrule.home from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: config time.apple.com.hyrule.home is NXDOMAIN-IPv4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: query[AAAA] time.apple.com from 10.0.1.14
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 8.8.4.4
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 8.8.8.8
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 23.226.230.72
Nov  2 17:29:24 raspberrypi dnsmasq[2067]: forwarded time.apple.com to 173.230.156.28

编辑: 我决定将 pi 重置为默认的 raspbian,因为我正在对它进行大量实验,所以我想删除任何其他变量。我继续加载米尼比安并安装了 dnsmasq。我将 resolv.conf 编辑成如下形式(感谢 @Chuck Kollars 指出该文件的实际作用):

domain hyrule.home
search hyrule.home
nameserver XXX.XXX.X.4

并且仅设置我的 dnsmasq.conf 来查询这些名称服务器(默认读取我的主机文件):

server=/localnet/192.168.0.1 <--- still have the feeling this isn't right
## DNS SERVERS
#openNic california
server=173.230.156.28

#openNic Washington
server=23.226.230.72

在我的 hosts 文件中,我还将别名设置为@Chuck Kollars建议使用以下格式

<ipv4>   <subdomain>  <fqdn>

此时,我仍然遇到问题,因此我注意到,每当我 ping 类似“tower”的内容时,dnsmasq 都会尝试解析“tower.hsdn.comcast.com”或类似内容,并将其转发到外部名称服务器,因为它无法在内部解析。comcast 部分看起来很熟悉,所以在我看来机场公用设施(5.6.1)在 Internet 选项卡下的 TCP/IP 下,在域名字段中填写了相同的地址(幻影,就像继承了一样),所以我将其更改为 hyrule.home,一切都按预期工作!

我仍然不明白为什么该域名必须在路由器中,以及为什么它不被 resolv.conf 文件所尊重......

答案1

尽管我不能完全弄清楚您的系统出现故障的所有细节,但我确实有以下建议,您可以参考一下:

1) Dnsmasq 仅对来自同一台机器的查询使用 /etc/resolv.conf - 来自所有其他机器的查询直接进入 Dnsmasq。因此 /etc/resolv.conf 通常包含指向名称服务器 127.0.0.1 的指针,以便将来自该机器上的应用程序的请求放入 Dnsmasq。事实上,Dnsmasq 启动时甚至可能覆盖 /etc/resolv.conf。在 /etc/resolv.conf 中放入操作指令时要非常谨慎;特别是我不认为“domain hyrule.home”对某些主机的作用与你想象的一样。

2)处理本地短名称的另一种方法(我的做法)是明确地两个都将每台本地机器的短名称和长名称放入 /etc/hosts 中(而不是依赖任何软件机制),如下所示:

XXX.XXX.X.1   router router.hynet.home
XXX.XXX.X.3   tower tower.hynet.home
XXX.XXX.X.4   pi pi.hynet.home

3) 我不太清楚将“raspberrypi”等同于“localhost”的定义是什么。我担心这种等同有时会在错误的时间对错误的系统产生错误的响应,导致某些查询进入循环文件而不是它们应该进入的位置。我的系统没有这样的定义。

4) 为了使各种日志更清晰,您可能还需要“localnet”的定义(类似于“ip6-localnet”的定义)。您可能希望将其放入 /etc/networks 中……事实上,这可能有效。但 Dnsmasq 本身只查看 /etc/hosts,因此您可能必须将定义放入 /etc/hosts 中,即使它是针对网络的,如下所示:

XXX.XXX.X.0 localnet hynet.home

相关内容