DNS服务安装部署教程(非常详细)
在 Linux 中,用来提供 DNS 服务的软件包叫“bind”,软件安装好之后所启动的进程叫“named”,该进程所提供的协议叫“DNS”。
DNS 服务的安装过程非常简单,只需要通过 Yum/DNF 软件包管理器执行 dnf install bind 命令,将 bind 软件包安装到 Linux 操作系统上,示例如下:
DNS 服务安装完成后,其主要配置文件路径如下:
主配置文件中每一行配置的含义如下:
一次完整的 DNS 服务器配置的大致过程为:搭建 DNS 服务器,解析域名 baidx.com,这里的 baidx.com是我们凭空捏造的域名,通过 DNS 服务器可以将这个域名指向任何一个IP地址,当用户通过搭建的 DNS 服务器访问 baidx.com 域名时,就会访问指定的IP地址。
需要注意的是,如果这个演示过程由我们来完成,就是一次正常的 DNS 服务器维护,若这个过程由黑客来完成,就可能是一次域名劫持攻击。
1) 修改主配置文件,增加关于 baidx.com 域名的 zone 配置(正向解析):
2) 在 /var/named/ 目录下创建第一步中定义的 zone 文件:
可以想象一下,假设这两个域名本来指向的是某个导航网站,而用户通过 DNS 服务器访问这两个域名,访问成功的并不是导航网站,而是另一个网站。其实黑客的 DNS 劫持就是通过修改 DNS 服务器上域名与 IP 地址的对应关系,来达到让用户访问指定网站的目的。
3) 修改新创建的 zone 文件的权限和属组:
4) 让 DNS 服务重新加载配置文件:
5) 使用 dig 命令验证刚才设置的域名:
6) 找一台主机,让主机的 DNS 服务地址指向这台 DNS 服务器,这样就达到了用户通过 DNS 服务器查找域名对应关系的目的。直接在 Linux 操作系统上修改 DNS 服务的指向。
7) 在 Linux 操作系统的桌面上用浏览器直接访问域名,效果如下图所示:

图 1 用浏览器直接访问域名
至此,一台 DNS 服务器已经搭建完成了,剩下的步骤就是完善 DNS 服务内部的域名对应记录。综上所述,任何一台网络设备只要将 DNS 服务指向指定的 DNS 服务器,则所有的域名请求都会在该服务器进行解析。
国内有很多公共的 DNS 服务器,这里给大家推荐几个:
DNS 服务的安装过程非常简单,只需要通过 Yum/DNF 软件包管理器执行 dnf install bind 命令,将 bind 软件包安装到 Linux 操作系统上,示例如下:
[root@clinux ~]# dnf install bind 依赖关系解决 ======================================================================= 软件包 架构 版本 仓库 大小 ======================================================================= 安装: bind x86_64 32:9.11.26-6.el8 appstream 2.1 M 事务概要 ======================================================================= 安装 1 软件包 ---省略部分内容--- 已安装: bind-32:9.11.26-6.el8.x86_64 完毕! [root@clinux ~]# systemctl start named #启动 DNS 服务, [root@clinux ~]# ps -ef | grep named #查看 DNS 服务进程 named 51365 1 0 09:41 ? 00:00:00 /usr/sbin/named -u named -c /etc/named.conf root 51373 4039 0 09:41 pts/0 00:00:00 grep --color=auto named [root@clinux ~]# netstat -anpt | grep named #查看 DNS 服务占用的端口 tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 51365/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 51365/named tcp6 0 0 :::1:53 :::* LISTEN 51365/named tcp6 0 0 :::1:953 :::* LISTEN 51365/namedDNS 服务启动之后默认占用 53 端口来做 DNS 解析,另外的 953 端口是 RNDC(Remote Name Domain Controller)的端口,RNDC 是一个远程管理 DNS 服务工具,通过这个工具可以在本地或远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除 zone 等操作。
DNS 服务安装完成后,其主要配置文件路径如下:
- /etc/named.conf:主配置文件,bind 进程的工作属性和区域定义;
- /etc/rndc.key:远程域名服务控制器(秘钥文件);
- /etc/rndc.conf:远程域名服务控制器(配置信息);
- /var/named/:区域数据文件目录;
- /var/named/named.ca:存放的是全球的根域名服务器;
- /var/named/named.localhost:专门将 localhost 解析为 127.0.0.1;
- /var/named/named.loopback:专门将 127.0.01 解析为 localhost;
- /var/log/named.log:日志文件;
- /usr/lib/systemd/system/named.service:服务文件;
- /etc/resolv.conf:Linux 操作系统配置文件,主要用来配置 DNS 服务器的指向。
主配置文件中每一行配置的含义如下:
[root@clinux ~]# vim /etc/named.conf options { ###监听在哪一个端口(any 表示监听所有 IP 地址的 53 端口) listen-on port 53 { 127.0.0.1; }; ##监听 IPv6 的 53 端口 listen-on-v6 port 53 { ::1; }; ##数据文件目录路径 directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; ##定义允许查询的 IP 地址,any 代表所有 ip allow-query { localhost; }; ##是否选代查询,一般只有缓存 DNS 服务器开启 recursion yes; ##是否使用秘钥 dnssec-enable yes; ##是否确认秘钥 dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; include "/etc/crypto-policies/back-ends/bind.config"; }; ##缓存文件的配置 logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; ##根 zone 文件的配置 ##zone 表示这是个 zone 配置,引号中间为配置的 zone,IN 为固定格式 zone "." IN { ##包含多种类型,常用的包括:hint 表示根 DNS 服务器,master 表示主 DNS 服务器,slave 表示从 DNS 服务器 type hint; ##对应的 zone 文件的位置 file "named.ca"; }; ##读取以下两个文件 include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";除了要了解主配置文件之外,还需要知道 /var/named/ 目录下的所有 zone 文件。正常在企业中配置 DNS 服务器,需要我们手动编写一个 zone 文件。
一次完整的 DNS 服务器配置的大致过程为:搭建 DNS 服务器,解析域名 baidx.com,这里的 baidx.com是我们凭空捏造的域名,通过 DNS 服务器可以将这个域名指向任何一个IP地址,当用户通过搭建的 DNS 服务器访问 baidx.com 域名时,就会访问指定的IP地址。
需要注意的是,如果这个演示过程由我们来完成,就是一次正常的 DNS 服务器维护,若这个过程由黑客来完成,就可能是一次域名劫持攻击。
DNS 服务器配置的具体步骤如下:域名劫持是互联网攻击的一种方式,通过攻击 DNS 服务器或伪造 DNS 服务器的方法,把目标网站域名解析到错误的 IP 地址从而使得用户无法访问目标网站,或者蓄意要求用户访问指定IP地址(网站)。
1) 修改主配置文件,增加关于 baidx.com 域名的 zone 配置(正向解析):
[root@clinux ~]# vim /etc/named.conf ----省略部分内容---- ##增加关于 baidx.com 域名的 zone 配置(正向解析) zone "baidx.com" IN { type master; ##类型为主 DNS 服务器 file "baidx.com.zone"; ##对应的 zone 文件名 };
2) 在 /var/named/ 目录下创建第一步中定义的 zone 文件:
[root@clinux ~]# cd /var/named/ [root@clinux named]# ls data named.ca named.localhost slaves dynamic named.empty named.loopback ##直接拷贝一个模板,改成对应的 zone 文件名称 [root@clinux named]# cp named.localhost baidx.com.zone [root@clinux named]# vim baidx.com.zone $TTL 1D ##生存周期 ##定义 SOA 记录 主 DNS 服务器 管理员邮箱地址 @ IN SOA baidx.com. root.baidx.com. ( 0 ; serial ##序列号 1D ; refresh ##刷新间隔 1H ; retry ##重试间隔 1W ; expire ##过期间隔 3H ) ; minimum ##无效记录缓存时间 ##从这里开始就可以写针对此域名的各种类型的记录 ##可以写 A 记录、NS 记录等,记录格式在上文已经介绍过,可以按照对应的语法格式填写 IN NS www IN NS mail www IN A 192.168.1.130 mail IN A 192.168.1.130 ##检查配置文件中的语法错误 [root@clinux named]# named-checkconf [root@clinux named]# named-checkzone baidx.com /var/named/baidx.com.zone zone baidx.com/IN: loaded serial 0 OK [root@clinux named]#笔者这里将 www.baidx.com 和 mail.baidx.com 对应到 192.168.1.130 服务器上,在这个服务器上搭建一个网站页面。如果用户通过该 DNS 服务器访问这两个域名,将直接转到 192.168.1.130 服务器上的网页。
可以想象一下,假设这两个域名本来指向的是某个导航网站,而用户通过 DNS 服务器访问这两个域名,访问成功的并不是导航网站,而是另一个网站。其实黑客的 DNS 劫持就是通过修改 DNS 服务器上域名与 IP 地址的对应关系,来达到让用户访问指定网站的目的。
3) 修改新创建的 zone 文件的权限和属组:
[root@clinux named]# ll ------省略部分内容------ -rw-r-----. 1 root root 211 3月 13 16:09 baidx.com.zone [root@clinux named]# chown :named baidx.com.zone [root@clinux named]# chmod o= baidx.com.zone [root@clinux named]# ll ------省略部分内容------ -rw-r-----. 1 root named 211 3月 13 16:09 baidx.com.zone
4) 让 DNS 服务重新加载配置文件:
[root@clinux named]# systemctl reload named
5) 使用 dig 命令验证刚才设置的域名:
[root@clinux named]# dig -t A www.baidx.com ; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> -t A www.baidx.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41728 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags; udp: 1232 ; COOKIE: d50108287999f372eabbc530f622da75bf66db932eec3440f (good) ;; QUESTION SECTION: ;www.baidx.com. IN A ;; ANSWER SECTION: www.baidx.com. 86400 IN A 192.168.1.130 ;; AUTHORITY SECTION: baidx.com. 86400 IN NS mail.baidx.com. baidx.com. 86400 IN NS www.baidx.com. ;; ADDITIONAL SECTION: mail.baidx.com. 86400 IN A 192.168.1.130 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: 日 3 月 13 16:12:11 CST 2022 ;; MSG SIZE rcvd: 135 [root@clinux named]#通过 dig 命令可以查询到域名对应关系是否配置成功。
6) 找一台主机,让主机的 DNS 服务地址指向这台 DNS 服务器,这样就达到了用户通过 DNS 服务器查找域名对应关系的目的。直接在 Linux 操作系统上修改 DNS 服务的指向。
[root@clinux named]# vim /etc/resolv.conf ##修改本系统的 DNS 服务指向 # Generated by NetworkManager search localdomain ##指向到本机所搭建的 DNS 服务,这样这台机器所访问的域名都会经过这台 DNS 服务器来解析 nameserver 127.0.0.1 [root@clinux named]# nmcli c reload ens33 ##重新加载网卡,让配置生效 [root@clinux named]# ping www.baidx.com ##测试一下此域名对应的 IP 地址,已生效 PING www.baidx.com (192.168.1.130) 56(84) bytes of data. 64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=1 ttl=64 time=0.722 ms 64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=2 ttl=64 time=0.721 ms 64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=3 ttl=64 time=0.572 ms 64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=4 ttl=64 time=0.596 ms ^C --- www.baidx.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3102ms rtt min/avg/max/mdev = 0.572/0.652/0.722/0.076 ms [root@clinux named]#
7) 在 Linux 操作系统的桌面上用浏览器直接访问域名,效果如下图所示:

图 1 用浏览器直接访问域名
至此,一台 DNS 服务器已经搭建完成了,剩下的步骤就是完善 DNS 服务内部的域名对应记录。综上所述,任何一台网络设备只要将 DNS 服务指向指定的 DNS 服务器,则所有的域名请求都会在该服务器进行解析。
国内有很多公共的 DNS 服务器,这里给大家推荐几个:
- 114DNS:114.114.114.114;
- AliDNS:223.5.5.5;
- Baidu Public DNS:180.76.76.76;
- Tencent Public DNS:119.29.29.29。