DNS查询方式
迭代查询:客户端向本地DNS服务器发出请求后,一直处于等待状态,直到本地名称服务器返回查询结果。
递归查询:客户端和本地DNS服务器的查询就属于递归查询,客户端发出查询请求后处于等待状态,本地DNS以客户端身份询问下一个DNS服务器,直到本地DNS服务器返回确定回复或否定回复。
一次完整的查询请求经过的流程:Client-->hosts文件-->DNS Server Local Cache --> DNS Server(recursion)--Server Cache -->iteration(迭代)-->根-->顶级DNS-->二级域名DNS……
DNS服务器类型
主名称服务器(Primary name server):从域管理员构造的本地磁盘文件中加载域信息,该文件(区域文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主服务器是一种权威性服务器,因为它以绝对的权威云回复对其管辖域的任何查询。
从名称服务器(Second name server):它可从主服务器中复制一整套域信息。区域文件是从主服务器中复制出来的,并作为本地磁盘文件存储在辅助服务器中。这种复制称为“区域文件复制”。在辅助域名服务器中有一个所有域信息的完整拷贝,可以有权威地回答对该域的查询。因此,辅助域名服务器也称作权威性服务器。配置辅助域名服务器不需要生成本地区域文件,因为可以从主服务器中下载该区域文件。
唯高速缓存名称服务器(caching-only server):可运行域名服务器软件,但是没有域名数据库软件。它从某个远程器取得域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威服务器,因为它提供的所有信息都是间接信息。当BIND被配置为缓存服务器的时候,它只会回应已缓存的请求,并将所有其他的请求转发到上游的DNS服务器。缓存名称服务器只需要.这个zone file即可。
DNS配置的主要文件组
/etc/hosts 主机的一个文件列表,默认请求DNS或NIS网络域名服务器前,/etc/named.conf通常会告诉程序先查看此文件。
/etc/resolv.conf DNS服务器列表
/etc/named.conf BIND主文件
/var/named/named.ca 根域名配置服务器指向文件
/var/named/localhost.zone localhost区正向域名解析文件,用于将localhost解析为127.0.0.1
/var/named/name.local localhost区反向域名解析文件,用于将localhost转换为127.0.0.1
/etc/named.rfc1912.zones 区块设置文件
name.conf文件的配置
acl 定义ip地址的访问控制清单
control 定义rndc使用的控制通道
include 把其他的文件包含到配置文件中
key 定义授权的安全密钥
logging 定义日志内容和位置
options 定义全局配置选项和默认值
server 定义远程服务的特征
zone 定义一个区域
DNS的资源记录(Resource Record,RR)格式
DNS域名数据库有资源记录和区域文件指令组成,由SOA(Start Of Authority起始授权记录,SOA记录定义了主从服务器之间通信的相关属性)RR开始:正向解析包括:
- A(internet Address,作用,fqdn-->ip)RR
- MX(Mail eXchanger,邮件交换器)RR
- CNAME(Canonical NAME别名)RR
- 反向解析文件包括PTR(PoinTeR,IP-->fqdn)RR
RR 语法:name [TTL] IN type value
- TTL可从全局继承
- @可用于引用当前区域的名称
- 同一个名称可能通过多条记录定义多个不同的值:此时DNS服务器会以轮询方式响应
- 同一个值也可能朋多个不同的定义名字
value有多部分组成: - 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
- 当前区域管理员的邮箱地址:地址中不能使用@符号,一般用.替换
- 主从服务区域传输相关定义以及否定的答案统一的TTL
DNS服务器端配置
BIND的安装配置:dns服务程序包bind,程序包named
一台服务器可同时为多个区域提供解析
必须要有根区域文件:named.ca
应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址解析库主配置文件:/etc/named.conf(用户和属组需要为root权限,否则BIND无法启动)。
全局配置:options {};
日志子系统配置:logging {};
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone zone "ZONE_NAME" in {};
主配置文件语法检查:named-chkconfig
搭建DNS正向解析服务器
安装软件包
yum install bind -y
修改主配置文件
options {
listen-on port 53 { any; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; };
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
把listen-on的127.0.0.1改为any,把allow-query的localhost改为any
在/etc/named.rfc1912.zones追加以下内容:
zone "magedu.com" IN {
type master;
file "magedu.com.zone"
};
创建正向区域文件
vim magedu.com.zone
内容如下:
$TTL 600
@ IN SOA dns1.magedu.com admin.magedu.com. (
2019011301;serial
1D;refresh
1H;retry
1W;expire
3H);minimum
@ NS dns1
dns1 A 192.168.2.104
web A 192.168.2.21
www CNAME web
检查配置文件语法
named-checkconf
测试结果:
root@node2:~# dig -t A www.magedu.com @192.168.2.72
; <<>> DiG 9.11.3-1ubuntu1.2-Ubuntu <<>> -t A www.magedu.com @192.168.2.72
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47417
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.magedu.com. IN A
;; ANSWER SECTION:
www.magedu.com. 600 IN CNAME web.magedu.com.
web.magedu.com. 600 IN A 192.168.2.21
;; AUTHORITY SECTION:
magedu.com. 600 IN NS dns1.magedu.com.
;; ADDITIONAL SECTION:
dns1.magedu.com. 600 IN A 192.168.2.104
;; Query time: 6 msec
;; SERVER: 192.168.2.72#53(192.168.2.72)
;; WHEN: Sun Jan 13 21:26:23 CST 2019
;; MSG SIZE rcvd: 112
在以上文件中增加一条A记录
* A 192.168.2.21
此为泛域名解析,ping测试即使www写错也可以正确解析。
创建反向解析区域
配置文件
在/etc/named.rfc1912.zones中追加以下内容
zone "2.168.192.in-addr.zrpa" IN {
type master;
file "2.168.192.zone";
};
创建反向解析区域文件
$TTL 600
@ IN SOA dns1.magedu.com. admin.magedu.com. (
2019011301;
10m;
2m;
1h;
1h);
IN NS dns1.magedu.com.
72 IN PTR dns1.magedu.com.
21 IN PTR www.magedu.com.
测试结果:
root@node2:~# dig -x 192.168.2.21
; <<>> DiG 9.11.3-1ubuntu1.2-Ubuntu <<>> -x 192.168.2.21
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36642
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;21.2.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
21.2.168.192.in-addr.arpa. 600 IN PTR www.magedu.com.
;; AUTHORITY SECTION:
2.168.192.in-addr.arpa. 600 IN NS dns1.magedu.com.
;; ADDITIONAL SECTION:
dns1.magedu.com. 600 IN A 192.168.2.104
;; Query time: 5 msec
;; SERVER: 192.168.2.72#53(192.168.2.72)
;; WHEN: Sun Jan 13 21:57:40 CST 2019
;; MSG SIZE rcvd: 117
dig 命令使用
dig [-t type] name [@server] [query options]
(dig只用于测试dns系统,不查询hosts文件)
查询选项:+[no]trace: 跟踪解析过程
+[no]recurse:进行递归解析
测试反向解析:dig -x IP.AD.DR.RESS @SERVER
模拟区域传送:dig -t axfr ZONE_NAME @SERVER