dnsmasq
可提供 DNS
、 DHCP
、 TFTP
服务。
本文以 Debian 11 为例,介绍 dnsmasq 的安装与配置方法。
参考资料:
安装 dnsmasq
程序包。
sudo apt install dnsmasq
主要配置文件为 /etc/dnsmasq.conf
,可通过在 /etc/dnsmasq.d
目录下添加配置文件的方式进行扩展(适用于debian系)。
# 设置启动 uid 。 user=nobody # 设置启动 gid 。 group=nogroup # 监听地址。必须加上 127.0.0.1 listen-address=::1,127.0.0.1
dnsmasq
在接受到用户的一个 DNS
请求时,首先会查找 /etc/hosts
这个文件,如果 /etc/hosts
文件没有请求的记录,则查找 /etc/resolv.conf
中定义的外部 DNS
(也叫上游 DNS
服务器, nameserver
配置),外部 DNS
通过递归查询查找到请求后响应给客户端,然后 dnsmasq
将请求结果缓存下来(缓存到内存)供后续的解析请求。
因此使用 dnsmasq
进行自定义域名解析时,只需要更改 /etc/hosts
即可。
# 示例 DNS 服务器配置 # DNS 服务监听端口。默认为 53 。设为 0 时,禁用 DNS 服务。DHCP 和 TFTP 不受此影响。 port=53 # 上游 DNS 服务器配置文件,默认为 /etc/resolv.conf 。 resolv-file=/etc/resolv.conf # 按照 resolv-file 中从上到下的 dns server 顺序进行指派解析。 strict-order # address 指定一个域名的解析值。 # 如把 *.example.com 解析成 192.168.1.1 。 address=/example.com/192.168.1.1 # server 指定上游 dns 服务器。 server=223.5.5.5 # 如把 *.google.com 域名通过 8.8.8.8 这个 DNS 服务器进行解析。 server=/google.com/8.8.8.8 # 额外的hosts文件。 addn-hosts=/etc/hosts2
# Optionally set a domain name domain=example.com # Set default gateway dhcp-option=3,0.0.0.0 # Set DNS servers to announce dhcp-option=6,0.0.0.0 # DHCP 地址段和租约时间。地址段从 192.168.1.100 到 192.168.1.200 ,租约时间为 12 小时。 dhcp-range=192.168.1.100,192.168.1.200,12h # 静态 ip 地址分配。指定 MAC 及其 ip 。 dhcp-host=aa:bb:cc:dd:ee:ff,192.168.1.50 dhcp-host=aa:bb:cc:ff:dd:ee,192.168.1.51 # 静态 ip 分配通过外部文件来定义,格式跟上面的一样。优点是变更之后不需要重启 dnsmasq 。 dhcp-hostsfile=/etc/hostsfile # 最大租约数,默认为 150 dhcp-lease-max=150 # 租约列表文件。默认为 /var/lib/misc/dnsmasq.leases dhcp-leasefile=/var/lib/misc/dnsmasq.leases
# 启用 tftp enable-tftp # tftp 根路径 tftp-root=/var/ftpd # 安全选项,启用之后,只有属于 dnsmasq 用户的文件可以通过 tftp 进行访问 tftp-secure
如果需要启用 PXE
服务,则需要同时启用 DHCP
和 TFTP
功能。
# 指明 pxe 启动文件,该文件放到 tftp 根目录下 dhcp-boot=lpxelinux.0 # 不同的启动方式,显示不同的菜单,并加载不同的 pxe 启动文件 pxe-service=x86PC,"PXELINUX (BIOS)",bios/lpxelinux pxe-service=X86-64_EFI,"PXELINUX (EFI)",efi64/syslinux.efi dhcp-match=set:efi-x86_64,option:client-arch,7 dhcp-match=set:efi-x86_64,option:client-arch,9 dhcp-match=set:efi-x86,option:client-arch,6 dhcp-match=set:bios,option:client-arch,0 dhcp-boot=tag:efi-x86_64,efi64/syslinux.efi dhcp-boot=tag:efi-x86,efi32/syslinux.efi dhcp-boot=tag:bios,bios/lpxelinux.0