许多技术爱好者发现能够控制他们的 主机名解析很重要. 设置服务器和服务通常需要某种形式的固定地址,有时还需要特殊形式的解析,例如定义 Kerberos 或 LDAP 服务器、邮件服务器等,这一切都可以通过 dnsmasq 来实现。
dnsmasq 是一个轻量级且简单的程序,它可以在您的网络上发布 DHCP 地址并在 DNS 中注册主机名和 IP 地址。 此配置还允许外部解析,因此您的整个网络将能够与自身对话并找到外部站点。
本文介绍在虚拟机或小型物理机(如 Raspberry Pi)上安装和配置 dnsmasq,以便它可以在您的家庭网络或实验室中提供这些服务。 如果您有一个现有的设置并且只需要调整本地工作站的设置,请阅读上一篇文章,其中介绍了在 NetworkManager 中配置 dnsmasq 插件。
安装 dnsmasq
首先,安装 dnsmasq 包:
sudo dnf install dnsmasq
接下来,启用并启动 dnsmasq 服务:
sudo systemctl enable --now dnsmasq
配置 dnsmasq
首先,备份 dnsmasq.conf 文件:
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
接下来,编辑文件并对以下内容进行更改以反映您的网络。 在本例中,mydomain.org 是域名,192.168.1.10 是 dnsmasq 服务器的 IP 地址,192.168.1.1 是默认网关。
sudo vi /etc/dnsmasq.conf
插入以下内容:
domain-needed bogus-priv no-resolv server=8.8.8.8 server=8.8.4.4 local=/mydomain.org/ listen-address=::1,127.0.0.1,192.168.1.10 expand-hosts domain=mydomain.org dhcp-range=192.168.1.100,192.168.1.200,24h dhcp-option=option:router,192.168.1.1 dhcp-authoritative dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases
测试配置以检查拼写错误和语法错误:
$ sudo dnsmasq --test dnsmasq: syntax check OK.
现在编辑主机文件,它可以包含静态和动态分配的主机。 静态地址应位于您之前指定的 DHCP 范围之外。 使用 DHCP 但需要固定地址的主机应在此处输入 DHCP 范围内的地址。
sudo vi /etc/hosts
前两行应该已经存在。 添加剩余的行以配置路由器、dnsmasq 服务器和两个额外的服务器。
127.0.0.1 localhost localhost.localdomain ::1 localhost localhost.localdomain 192.168.1.1 router 192.168.1.10 dnsmasq 192.168.1.20 server1 192.168.1.30 server2
重启 dnsmasq 服务:
sudo systemctl restart dnsmasq
接下来将服务添加到防火墙以允许客户端连接:
sudo firewall-cmd --add-service={dns,dhcp}
sudo firewall-cmd --runtime-to-permanent
测试名称解析
首先,安装 bind-utils 以获取 nslookup 和 dig 包。 这些允许您执行正向和反向查找。 如果您不想安装额外的软件包,可以使用 ping。 但是这些工具值得安装,因为它们可以提供额外的故障排除功能。
sudo dnf install bind-utils
现在测试分辨率。 首先,测试正向(主机名到 IP 地址)解析:
$ nslookup server1 Server: 127.0.0.1 Address: 127.0.0.1#53 Name: server1.mydomain.org Address: 192.168.1.20
接下来,测试反向(IP 地址到主机名)解析:
$ nslookup 192.168.1.20 20.1.168.192.in-addr.arpa name = server1.mydomain.org.
最后,测试解析网络外的主机名:
$ nslookup fedoramagazine.org Server: 127.0.0.1 Address: 127.0.0.1#53 Non-authoritative answer: Name: fedoramagazine.org Address: 35.196.109.67
测试 DHCP 租约
要测试 DHCP 租用,您需要启动一台使用 DHCP 获取 IP 地址的机器。 任何 Fedora 默认情况下,变体将执行此操作。 一旦你启动了客户端机器,检查它是否有一个地址并且它对应于 dnsmasq 的租用文件。
从运行 dnsmasq 的机器:
$ sudo cat /var/lib/dnsmasq/dnsmasq.leases 1598023942 52:54:00:8e:d5:db 192.168.1.100 server3 01:52:54:00:8e:d5:db 1598019169 52:54:00:9c:5a:bb 192.168.1.101 server4 01:52:54:00:9c:5a:bb
扩展功能
您可以通过 DHCP 为主机分配一个固定的 IP 地址,方法是将它添加到您的主机文件中,并使用您想要的地址(在您的 DHCP 范围内)。 为此,请将以下行添加到 dnsmasq.conf 文件中,该行将列出的 IP 分配给具有该名称的任何主机:
dhcp-host=myhost
或者,您可以指定一个 MAC 地址,该地址应始终被赋予一个固定的 IP 地址:
dhcp-host=11:22:33:44:55:66,192.168.1.123
如果需要自动化机器构建,可以指定 PXE 引导服务器
tftp-root=/tftpboot
dhcp-boot=/tftpboot/pxelinux.0,boothost,192.168.1.240
这应该指向您的 TFTP 服务器的实际 URL。
如果您需要指定 SRV 或 TXT 记录,例如 LDAP、Kerberos 或类似的记录,您可以添加这些:
srv-host=_ldap._tcp.mydomain.org,ldap-server.mydomain.org,389
srv-host=_kerberos._udp.mydomain.org,krb-server.mydomain.org,88
srv-host=_kerberos._tcp.mydomain.org,krb-server.mydomain.org,88
srv-host=_kerberos-master._udp.mydomain.org,krb-server.mydomain.org,88
srv-host=_kerberos-adm._tcp.mydomain.org,krb-server.mydomain.org,749
srv-host=_kpasswd._udp.mydomain.org,krb-server.mydomain.org,464
txt-record=_kerberos.mydomain.org,KRB-SERVER.MYDOMAIN.ORG
dnsmasq 中还有许多其他选项。 原始配置文件中的注释描述了其中的大部分。 有关完整详细信息,请阅读本地或本地手册页 在线的.