系统环境

标题 版本 备注
系统版本 ubuntu 22.04.3 LTS (Jammy Jellyfish) -
内核版本 5.15.0-88-generic #98-Ubuntu SMP Mon Oct 2 15:18:56 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux -
Dnsmasq v2.88 -

Dnsmasq 简介

dnsmasq 是一款轻量级的 DNS 转发器和 DHCP 服务器软件,适用于小型网络环境中的主机名解析和 IP 地址分配。它通常用于家庭网络、小型办公室和 SOHO(小型办公室/家庭办公室)环境中。以下是 dnsmasq 的一些主要特点:

  • 简单易用dnsmasq 设计简洁,易于安装和配置,不需要复杂的设置即可快速搭建 DNS 服务器和 DHCP 服务器。

  • 综合功能:除了基本的 DNS 和 DHCP 功能外,dnsmasq 还支持 TFTP、PXE 引导、IPv6 和 DNSSEC 等功能,使其在小型网络环境中成为一站式解决方案。

  • 资源占用低dnsmasq 是一款轻量级软件,占用资源少,运行稳定,适用于资源有限的嵌入式系统和路由器等设备。

  • 快速响应:由于采用了缓存机制和轻量级算法,dnsmasq 能够快速响应 DNS 查询请求,并有效地减少网络延迟。

  • 灵活可定制dnsmasq 提供了丰富的配置选项,用户可以根据实际需求定制 DNS 和 DHCP 的行为,灵活应用于各种网络场景中。

总的来说,dnsmasq 是一款简单实用、功能全面、性能优越的 DNS 和 DHCP 服务器软件,适用于小型网络环境中的主机名解析和 IP 地址分配。

Dnsmasq 官网站点:https://thekelleys.org.uk/dnsmasq/doc.html
Dnsmasq 归档地址:https://thekelleys.org.uk/dnsmasq/

Dnsmasq 安装

1.下载官方提供的源码包到服务器的 /usr/local/src/ 目录下:

1
$ sudo wget -O /usr/local/src/dnsmasq-2.88.tar.gz https://thekelleys.org.uk/dnsmasq/dnsmasq-2.88.tar.gz

2.将下载好的源码包解压至下载目录:

1
$ sudo tar -zxf /usr/local/src/dnsmasq-2.88.tar.gz -C /usr/local/src/

3.编辑解压目录下 /usr/local/src/dnsmasq-2.88Makefile 文件,修改参数 PREFIX ,重新指定 dnsmasq 安装路径(默认其安装在 /usr/local/ 目录下):

1
$ sed -i 's@PREFIX        = /usr/local@PREFIX        = /usr/local/dnsmasq@' Makefile

4.执行命令 make && make install 开始编译安装:

1
$ sudo make && sudo make install

5.在 /etc/profile.d/ 目录下创建 dnsmasq 环境脚本文件 dnsmasq.sh ,内容为:

1
2
3
4
5
6
7
8
9
# root 用户下这样执行
cat << 'EOF' > /etc/profile.d/dnsmasq.sh
PATH=$PATH:/usr/local/dnsmasq/sbin
EOF

# 普通用户下这样执行:
sudo sh -c 'cat <<EOF > /etc/profile.d/dnsmasq.sh
PATH=\$PATH:/usr/local/dnsmasq/sbin
EOF'

6.执行下 source /etc/profile 加载下 dnsmasq 环境脚本,使其在当前立即生效

1
$ sudo sh -c 'source /etc/prifle`

7.执行下命令 dnsmasq --version 看能否正常输出 dnsmasq 版本号,如果能,则说明 dnsmasq 安装成功

1
$ sudo dnsmasq --version

8.在 dnsmasq 安装目录创建 2 个目录,分别为 etclogs, etc 主要存放 dnsmasq 的配置文件,而 logs 则存放 dnsmasq 运行过程中产生的日志文件:

1
$ sudo mkdir /usr/local/dnsmasq/{etc, logs}

9.将解压目录下 /usr/local/src/dnsmasq-2.88 的 dnsmasq 配置案例文件 dnsmasq.conf.example 复制到上面创建的 /usr/local/dnsmasq/etc/ 目录中,并重命名为 dnsmasq.conf:

1
$ cp /usr/local/src/dnsmasq-2.88/dnsmasq.conf.example /usr/local/dnsmasq/etc/dnsmasq.conf

10.编辑配置文件,将其简单的配置成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
cat << 'EOF' >/usr/local/dnsmasq/etc/dnsmasq.conf
# 监听的端口,dns默认53端口,如果设置为0,则完全禁止DNS功能
port=53

# 指定上游 DNS 服务列表的配置文件, 默认是从/etc/resolv.conf获取。
#resolv-file=/usr/local/dnsmasq/etc/upstream_dns.conf
resolv-file=/etc/resolv.conf

# 服务运行的网卡,如果有多个话,可在再次添加一条记录
interface=eth0

# 指定服务不在以下网卡上运行
#except-interface=

# 指定一个 hosts 文件,默认是从 /etc/hosts 中获取
#addn-hosts=/usr/local/dnsmasq/etc/custom_hosts

# 表示不使用 /etc/hosts 配置文件来解析域名
#no-hosts

# 不使用上游 DNS 服务器的配置文件 /etc/resolv.conf 或者 resolv-file 选项
#no-resolv

# 不允许 Dnsmasq 通过轮询 /etc/resolv.conf 或者其他文件来动态更新上游 DNS 服务列表
#no-poll


# 表示严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。
strict-order


# 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址。
listen-address=172.27.255.103,8.134.135.38

# 增加一个域名,强制解析到所指定的地址上,dns 欺骗:指向本机地址可以屏蔽广告或非法的DNS
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1

# 指定 dnsmasq 默认查询的上游服务器
server=8.8.8.8
server=114.114.114.114

# 指定dnsmasq程序使用哪个DNS服务器进行解析。对于不同的网站可以使用不同的域名对应解析如下配置
# 指定 .cn 的域名全部通过 114.114.114.114 这台国内DNS服务器来解析
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114

# 给 *.google.com 使用专用的 DNS
server=/*.google.com/8.8.8.8

# 设置DNS缓存大小(单位:DNS解析条数)
cache-size=10000

# 为防止DNS污染,使用参数定义的DNS解析的服务器。注意:如果是阿里云服务器上配置dnsmasq要启用此项。
bogus-nxdomain=114.114.114.114


## DHCP 配置
# 指定分配的 IP 端和续约时间
#dhcp-range=192.168.1.50,192.168.1.100,12h

# 同上,指定了子网掩码
#dhcp-range=192.168.8.50,192.168.8.150,255.255.255.0,12h

# 指定网关地址
#dhcp-option=3,192.168.0.1

# 指定 DNS 服务器,net:eth1 用来指定网卡
#dhcp-option=net:eth1,6,114.114.114.114,8.8.8.8
#dhcp-option=net:wlano,6,114.114.114.114,8.8.8.8

# DHCP 所在的 domain
#domain=gz.cvte.com

# 静态地址绑定
#dhcp-host=00:0C:29:5E:F2:6F,192.168.1.201,os02
#dhcp-host=00:0C:29:15:63:CF,192.168.1.202,os03

# 忽略一下 MAC 地址主机的请求
#dhcp-host=11:22:33:44:55:66,ignore

# 租期保存文件
#dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases


# 记录日志,如果打开日志,要及时清理
log-queries
#log-facility=/var/log/dnsmasq.log
#启用异步日志记录,缓解阻塞,提高性能。默认队列长度为5,合理值为5-25,最大限制为100
#log-async=20
EOF

/etc/hosts 配置内容:

1
2
3
127.0.0.1  localhost
192.168.50.107 web01 web01.gz.cvte.com
192.168.50.108 web02 web02.gz.cvte.com

/etc/resolv.conf 配置内容:

1
2
nameserver 114.114.114.114
nameserver 8.8.8.8

10.在 /lib/systemd/system/ 目录下创建 dnsmasq 启动脚本文件 dnsmasq.service,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
sudo sh -c 'cat << EOF > /lib/systemd/system/dnsmasq.service
[Unit]
Description=dnsmasq - A lightweight DNS and DHCP server
After=network.target

[Service]
ExecStart=/usr/local/dnsmasq/sbin/dnsmasq -C /usr/local/dnsmasq/etc/dnsmasq.conf -k
Restart=always

[Install]
WantedBy=multi-user.target
EOF'

11.执行命令 systemctl daemon-reload 加载下启动脚本

1
$ sudo systemctl daemon-reload

12.执行命令 `` 启动 dnsmasq 并将其设置为开机启动

1
$ sudo systemctl enable --now dnsmasq.service