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。
 
 ICP备案:
 公安联网备案: