您的位置:

CentOS7 DNS详解

一、DNS基础

DNS(Domain Name System),域名系统是互联网的一项非常重要的基础设施,它将人类可读的主机名转换成计算机可读的IP地址,DNS系统是一种分布式数据库系统,它由许多DNS服务器组成,这些服务器通过共同工作来完成DNS查询请求。

在DNS中,域名被分为多个层次,每个层次中包含多个子域名。例如,edu.cn是一个域名,它包含了.edu和.cn两个子域名。在DNS树形结构中,最顶层是根域名点,它并不包含其他子域名,而是包含了所有顶级域名,如.com、.edu等。下面是一张DNS树形结构示意图:

.
|
+--com
|  |
|  +--example
|  |
|  +--...
|
+--edu
   |
   +--china
   |
   +--...

当我们在浏览器中输入一个域名时,浏览器首先从本地DNS缓存中寻找是否有该域名的解析结果。如果没有,则向本地DNS服务器发送查询请求。本地DNS服务器将查询请求进一步转发到更高层次的DNS服务器,直到找到该域名对应的IP地址,然后将结果返回给浏览器,浏览器再通过该IP地址访问对应的服务器。

二、CentOS7下的DNS配置

CentOS7默认使用的是systemd-resolved服务,该服务通过systemd来管理,并且已经被集成到systemd的网络配置中,作为CentOS7下的系统级DNS服务器。在CentOS7中,可以通过以下命令来查看systemd-resolved服务的状态:

systemctl status systemd-resolved

如果该服务没有启动,则可以通过以下命令来启动:

systemctl start systemd-resolved

CentOS7下的DNS配置文件为/etc/resolv.conf,该文件保存了系统级别的DNS解析配置。使用该文件可以设置DNS服务器地址、域名搜索路径等信息,格式如下:

nameserver DNS服务器地址
search 域名搜索路径

在/etc/resolv.conf文件中如果添加了nameserver和search配置,则查询DNS时会优先使用这里配置的DNS服务器和域名搜索路径,如果没有配置,则会使用127.0.0.53作为DNS服务器,默认使用systemd-resolved服务解析。

三、使用DNS查询命令

DNS的查询工具有很多,其中最常用的工具是nslookup和dig。

1、nslookup

nslookup是一个非常常用的DNS查询命令工具,它可以查询指定主机的DNS信息,例如主机名、IP地址、域名Server等。使用该命令可以检查DNS服务器是否能够正确解析域名。例如,通过以下命令可以查询baidu.com的IP地址:

nslookup baidu.com

执行结果为:

Server:    8.8.8.8
Address 1: 8.8.8.8
Address 2: 8.8.4.4

Name:      baidu.com
Addresses: 220.181.38.148
           220.181.57.217
           39.156.66.14
           180.101.49.11

在查询域名时,nslookup也会自动读取/etc/resolv.conf文件中的DNS服务器信息,并使用它来进行DNS解析。

2、dig

dig是另一个强大而又灵活的DNS查询命令,它不仅可以查询DNS解析结果,还可以输出DNS的详细信息、控制查询策略等。例如,通过以下命令可以查询baidu.com的IP地址:

dig baidu.com

执行结果为:

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.2 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13440
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;baidu.com.			IN	A

;; ANSWER SECTION:
baidu.com.		212	IN	A	39.156.69.79
baidu.com.		212	IN	A	39.156.69.83
baidu.com.		212	IN	A	39.156.69.84
baidu.com.		212	IN	A	39.156.69.85

;; Query time: 0 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Jul 15 10:02:01 CST 2020
;; MSG SIZE  rcvd: 87

与nslookup类似,dig也会从/etc/resolv.conf文件中读取DNS服务器信息,然后使用它进行DNS解析。

四、BIND的安装和配置

BIND是一个非常流行的DNS服务器软件,它支持大多数的UNIX和Linux操作系统,以及Windows等。在CentOS7中,我们可以使用yum来安装BIND:

yum install bind bind-utils

安装完成之后,可以通过以下命令来启动BIND服务:

systemctl start named

BIND服务的配置文件保存在/etc/named.conf文件中,该文件包含了DNS服务器的配置信息,我们可以通过修改该文件来配置BIND服务器。例如,以下是一个基本的named.conf配置文件示例:

options {
        listen-on port 53 { 127.0.0.1; };
        listen-on-v6 port 53 { none; };
        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";
        allow-query     { localhost; };
        recursion yes;
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

以上named.conf配置文件中包含了DNS的基本设置,可以根据实际情况进行修改。

五、使用BIND服务器

在使用BIND服务器时,我们需要将其配置为系统级别DNS服务器,即将/etc/resolv.conf文件中的nameserver地址修改为BIND服务器地址,如:

nameserver 192.168.0.1
search mydomain.com

然后重启named服务:

systemctl restart named

现在,我们就可以使用nslookup或dig来查询BIND服务器配置的DNS解析结果了。例如:

nslookup www.baidu.com
dig www.baidu.com

六、总结

本文简单介绍了CentOS7下的DNS服务和两个常用的DNS查询命令nslookup和dig,以及如何安装、配置和使用BIND服务器。通过不断深入学习和实践,我们可以更好地理解和掌握DNS系统相关的知识和技能。