一、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系统相关的知识和技能。