DNS从浅到深
1. DNS基础知识
1. DNS全称:Domain Name System
2. DNS的作用:
A记录
CNAME记录
MX记录
PTR反向解析
2. DNS解析流程原理
1. DNS本身是一个倒树结构.
它的顶点是根,全球有13台根服务器。
顶级域:com,cn
一级域:sohu.com
二级域:tiyu.souhu.com
具体某台主机:www.tiyu.sohu.com

3. DNS查询类型
1. 递归(对于DNS客户端)
2. 迭代(对于DNS服务器)
4. DNS的资源记录
1. A: FQDN---->IPv4 允许一个域名解析到多个IP上,采用轮询的方式,解析域名。
2. AAAA: FQDN---->IPv6
3. PTR: IP---->FQDN
4. SOA: start of Authority 起始授权记录,一个区域解析库文件只能有一个SOA
5. NS: Name Service: 域名服务记录,可以有多个,其中一个为主
6. CNAME: 别名
7. MX: 邮件交换记录 多个MX,优先级0-99,数值越小,优先级越高
5. DNS资源记录的定义格式
1. SOA
name [TTL] IN RR_TYPE value
name: 当前区域的名字
例如: magedu.com.
2.3.4.In-addr.arpa.
value: 有多部分组成
1. 当前区域名字
2. 当前区域管理员邮箱地址,但是不能使用@符号,一般使用.来代替
3. 主从服务协调属性的定义,以及否定答案的TTL
例子:
magedu.com. 86400 IN SOA magedu.com. admin.magedu.com. {
20170108; serial
2H; refresh
10M; retry
1W; expire
1D; negative answer ttl 否定答案的TTL
}
注意: SOA必须在第一条
2. NS
name [TTL] IN RR_TYPE value
name: 当前区域的区域名称
value: 当前区域的主DNS服务器的名字,例如:ns1.magedu.com.
例如:
magedu.com. 86400 IN NS ns1.magedu.com.
magedu.com. 86400 IN NS ns2.magedu.com.
3. MX
name IN RR_TYPE value
name: 当前区域的区域名称
value: 当前区域某个邮件交换服务器的主机名
例如:
magedu.com. IN MX 10 mx1.magedu.com.
magedu.com. IN MX 20 mx2.magedu.com.
4. A
name: 某个FQDN
value: IPv4
例如:
www.magedu.com. IN A 1.1.1.1
5. AAAA
name: 某个FQDN
value: IPv4
6. PTR
name: IP地址,IP反过来写
value: FQDN
例如:
4.3.2.1-in-addr.arpa. IN PTR www.magedu.com.
7. CNAME
name: FQDN的别名
value: FQDN的正式名字
例如:
web.magedu.com. IN CNAME www.magedu.com.
注意:
1. TTL可以从全局继承
2. @表示当前区域的名称
3. 相邻的两条记录name相同,后面的一条可以省略name
4. 对于正向区域来说,各mx,NS等类型为FQDN,此时FQDN应该有一个A记录
6. 安装配置bind9
1. 安装
yum install bind -y
2. 配置文件
/etc/named.conf 主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
3. 解析库区域文件
/var/named/ZONE_NAME.zone
4. 主配置文件格式
options {
listen-on port 53 { 192.168.1.68; };
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";
allow-query { any; };
recursion yes;
notify yes;
allow-transfer {192.168.1.130; };
dnssec-enable no;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
ll
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";
5. 检查配置文件语法
named-checkconf
6. 检查区域文件语法
named-checkzone 1.168.192.in-addr.arpa 192.168.1.arpa 区域名称 区域文件名称
7. DNS客户端命令
1. dig
安装: yum install bind-utils -y
dig [-t RR_TYPE] name [@server] [query options]
例子:
dig -t A www.baidu.com
dig -x 119.75.222.17
模拟完整区域传送
dig -t axfr domain [@server]
2. host
host -t A www.baidu.com dns_server_IP
host -t PTR 119.57.222.17
3. nslookup
4. rndc
rndc status 查看状态
rndc stats 查看状态
rndc flush 刷新
rndc reload 重新加载配置文件
使用tcp 953,默认监听127.0.0.1地址
8. 配置一个正向解析区域
1. 定义区域(/etc/named.rfc1912.zones)
zone "zhen.net" IN {
type master;
file "zhen.net.zone";
allow-update { none; };
notify yes;
allow-transfer { 192.168.1.130; };
also-notify { 192.168.1.130; };
};
2. 建立区域数据库文件(/var/named目录下)
$TTL 3H
@ IN SOA @ rname.invalid. (
2015092506 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ns1.zhen.net.
ns1 A 192.168.1.68
@ NS ns2.zhen.net.
ns2 A 192.168.1.130
3. 让服务器重载配置文件和区域数据文件
rndc reload
9. 配置一个反向解析区域
1. 定义区域(/etc/named.rfc1912.zones)
zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.arpa";
allow-update { none; };
};
2. 定义区域解析库文件(/var/named目录下)
$TTL 3H
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ NS ns1.zhen.net.
68 PTR ns1.zhen.net.
@ NS ns2.zhen.net.
130 PTR ns2.zhen.net.
30 PTR zpapi.zhen.net.
8 PTR file.zhen.net.
3. 让服务器重载配置文件和区域数据文件
rndc reload
10. 检查当前DNS服务器的状态
rndc status
11. 添加一个新的区域
1. 在主DNS服务器
在/etc/named.rfc1912.zones中,添加以下内容:
zone "yoboshop.net" IN {
type master;
file "yoboshop.net.zone";
allow-update { none; };
notify yes;
allow-transfer { 192.168.1.130; };
also-notify { 192.168.1.130; };
};
在/var/named,创建一个名为yoboshop.net.zone的区域文件。
$TTL 3h
@ IN SOA ns1.yoboshop.net. admin@yoboshop.net. (
7
3h
1h
1w
1h )
@ IN NS ns1.yoboshop.net.
@ IN NS ns2.yoboshop.net.
ns1 IN A 192.168.1.68
ns2 IN A 192.168.1.130
erp IN A 192.168.1.38
重启named服务,/etc/init.d/named restart
2. 在从服务器中
在/etc/named.rfc1912.zones中,添加以下内容:
zone "yoboshop.net" IN {
type slave;
file "slaves/yoboshop.net.zone";
masters {192.168.1.68; };
allow-update { none; };
};
重启/etc/init.d/named restart,不然会有报错: client 192.168.1.68#35482: received notify for zone 'yoboshop.net': not authoritative
分析日志:/var/named/data/named.run
12. 配置DNS转发
1. 区域转发
当contoso.com域存在一个blog.contoso.com的子域,controso.com域中的客户如果想访问ark.blog.contoso.com时,他首先会请求本区域的DNS服务器,由于本区域的DNS服务器有对blog.contoso.com子域的授权记录,所以他会直接找到子域的DNS服务器从而获得ark.blog.contoso.com的IP地址;而子域中的客户如果要访问父域中的www.contoso.com时,同样是先请求本区域的DNS服务器,但是子域中没有父域的DNS服务器记录,所以子域DNS服务器会向过根发起请求,并通过一级级的迭代查询最终获得www.contoso.com的IP地址。

这样对服务器带来不必要的消耗,我们子域希望在解析父域时可以使用父域上的DNS服务器而不是直接去找根。
1.首先要将需要将contoso.com域和blog.contoso.com域的DNS都配置为缓存DNS服务器,需要注意的是:dnssec是一种安全的DNS传输机制,他通过彼此间的密钥来防止DNS被污染,这里需要改为no,即使注销掉他默认值也为yes。

2.父域DNS服务器只需要创建自己的zone,并且在区域解析数据库中指明子域的DNS服务器(即授权)即可。

3.因为子域的DNS服务器在父域中有指向,所以父域可以解析到子域的ark.blog.contoso.com地址(此时子域的DNS服务器必须能够正常提供服务,否则无法解析,在/var/log/message记录中提示无法与子域DNS服务器通信)。

5.在子域DNS服务器配置文件/etc/named.rfc912.zones中不仅要创建自己的zone,还要创建父域的zone,转发方式可以为first或only(first表示先转发,转发不成功再递归;only表示只转发),此处以only为例,并指明转发到的DNS服务器地址。

6.在子域DNS服务器主配置文件/etc/named.conf的options全局配置段中,将所有地址请求都转发到互联网上的DNS服务器,由于在子域中明确定义了contoso.com和blog.contoso.com,所以局部转发的优先级高于全局转发。

7.使用子域的DNS服务器解析www.contoso.com可以看到它是通过转发到父域DNS服务器完成的地址解析。

2. 全局转发
options {
listen-on port 53 { 192.168.1.68; };
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";
allow-query { any; };
recursion yes;
forwarders { 202.106.0.20; 114.114.114.114; 8.8.8.8; };
notify yes;
allow-transfer {192.168.1.130; };
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
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";
13. 智能DNS
14. 红帽系统与centos做父域与子域
1. 需要在父域的区域文件中,建立对应子域的NS记录。
dev NS ns2.dev.zp.com. ns2.dev.zp.com. A 172.168.1.231
2. 在子域服务器上,安装bind,并修改辅助配置文件
zone "dev.zp.com." IN {
type master;
file "dev.zp.com.zone";
allow-update { none; };
};
3. 在子域服务器上,修改区域配置文件dev.zp.com.zone
$TTL 600
@ IN SOA ns2.dev.zp.com. dnsadmin.dev.zp.com. (
20200726
1H
10M
3D
1D )
IN NS ns2.dev.zp.com.
ns2 IN A 172.168.1.231
4. 在父域上,解析子域的ns记录报错
dig -t NS dev.zp.com @172.168.1.222
正常情况,配置好子域的区域文件,父域解析子域是没有问题的。但是因为我的父域使用的红帽系统,子域使用的是centos,父域解析子域总是报错,后来的解决方法就是,在父域的辅助配置文件,添加了一个转发区域,内容如下:
zone "dev.zp.com" IN {
type forward;
forward only;
forwarders { 172.168.1.231; };
};
5. 在子域上,解析父域的ns记录报错
dig -t NS ns1.zp.com @172.168.1.231
需要在子域的辅助配置文件上,添加内容:
zone "zp.com" IN {
type forward;
forward only;
forwarders { 172.168.1.222;};
};

浙公网安备 33010602011771号