目录

dnsmasq 安装与配置

dnsmasq 可提供 DNSDHCPTFTP 服务。

本文以 Debian 11 为例,介绍 dnsmasq 的安装与配置方法。

参考资料:

1. 安装

安装 dnsmasq 程序包。

sudo apt install dnsmasq

2. 配置

主要配置文件为 /etc/dnsmasq.conf ,可通过在 /etc/dnsmasq.d 目录下添加配置文件的方式进行扩展(适用于debian系)。

2.1 基本配置

# 设置启动 uid 。
user=nobody
 
# 设置启动 gid 。
group=nogroup
 
# 监听地址。必须加上 127.0.0.1
listen-address=::1,127.0.0.1

2.2 DNS 服务器配置

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

2.3 DHCP 服务器配置

# 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

2.4 TFTP 服务器配置

# 启用 tftp
enable-tftp
 
# tftp 根路径
tftp-root=/var/ftpd
 
# 安全选项,启用之后,只有属于 dnsmasq 用户的文件可以通过 tftp 进行访问
tftp-secure

2.5 PXE 服务器配置

如果需要启用 PXE 服务,则需要同时启用 DHCPTFTP 功能。

# 指明 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