1. 什么是DNS
DNS--Domain Name System 域名系统
2. DNS是用来干什么的
顾名思义,DNS是用来解析域名的,当然同时也可以反向解析IP地址对应的域名
3. 域名的分层
(1) 根域(“.”表示根域,现在所有的域名后面的根域已经省略了,因为浏览器会自动为域名加上如: baidu.com,实际为baidu.com.)
根域现在由全球13台服务器共同维护,这13台服务器分布如下:美国(9),英国(1),法国(1),瑞典(1),日本(1)
(2) 顶级域
顶级域分为:
a. 组织域 :如com(商业组织) , org(民间组织),net(网络组织),mil(军事组织)等
b. 国家或地区域:如cn(中国),jp(日本),kr(韩国)
c. 反向域:如in-addr.arpa
(3)二级域
二级域下可以包括主机以及子域,如www.baike.baidu.com(www即为主机名称,baike.baidu.com就是子域名称,其中.com是顶级域)
(4)主机
主机是域的最底层,通常位于FQDN(Fully qualified Domain Name完全限定域名,由主机和域名共同组成的全称)的最左端
4.域名的查询
(1) 按查询内容通常分为正向查询(根据域名查询IP)和反向查询(根据IP查询域名)
(2) 按查询方式通常分为递归查询和迭代(或循环)查询
a. 递归查询:
由客户端发出查询请求,DNS服务器接收到请求开始查询,如果查询失败,则该DNS服务器会代替客户端向其他DNS服务器发出查询请求,直至失败或成功
递归查询请求由客户端发出
b. 迭代查询:
DNS服务器之间的查询请求
域名查询过程如下图所示:
4.DNS资源记录类型
DNS在对域名进行解析时,会查询自己的数据库,该数据库包含了所有DNS区域资源信息的记录,具体信息如下:
(1) SOA ( Start Of Authority 授权开始):定义了该区域的全局配置参数
格式: 区域名称 IN SOA 域名服务器 管理员邮箱 ( 序列号 刷新时间 重试时间 失效时间 TTL )
(2) NS ( Name Server 域名服务器) :定义域名服务器
格式: FQDN IN NS 域名服务器
(3) A ( Address IP地址):定义了域名所对应的IP地址
格式: FQDN IN A IP地址
(4) MX ( Mail eXchange 邮件交换记录):定义了邮件服务器及邮件@后缀名称
格式: 邮件服务器后缀 IN MX 邮件服务器
(5) CNAME ( Canonical Name 别名):定义域名的别名
格式: 别名 IN CNAME 对应真实域名
(6) PTR ( 反向解析记录 ) :定义IP地址对应的域名
格式: IP IN PTR FQDN
(7) SRV : 定义与微软的活动目录相关的应用
(8) NXT / DNSSEC: 指定某个特定名称不在该域中
(9) KEY: 保存一个关于DNS名称的记录
5. DNS名称解析的顺序
(1) Linux名称解析顺序
Linux名称解析主要由两个文件控制(/etc/hosts.conf和/etc/nsswitch.conf),其中/etc/hosts.conf是以前或老一点的系统用的,现在统一都改成
了/etc/nsswitch.conf,该文件中有一行
hosts: files dns
表示DNS名称解析时先查找本地文件/etc/hosts,如果未找到相关记录,再将信息发送给指定的DNS服务器进行查询
(2) Windows名称解析顺序
Windows系统因为有NetBIOS名称,所以解析要稍显复杂:
a. 检查所解析名称是否为本机
b. 尝试通过DNS缓存进行查询解析(通过ipconfig /displaydns查看DNS缓存)
c. 尝试通过%systemroot%/system32/drivers/etc/hosts文件进行解析
d. 将查询请求发送给指定的DNS服务器进行查询
e. 尝试通过NetBIOS名称缓存进行名称解析(通过nbtstat -c查看NetBIOS名称缓存信息)
f. 将请求发送给指定WINS服务器
g. 尝试通过广播进行名称解析
h. 尝试通过%systemroot%/system32/drivers/etc/lmhosts文件进行名称解析(类似hosts文件)
6. DNS软件(BIND9)安装
# aptitude install bind9 dnsutils
7. BIND9配置
除了全局配置文件named.conf.options外,还有若干主配置文件和区域配置文件,当bind启动时,首先读取全局配置文件named.conf.options,
然后再通过读取主配置文件来获取所管辖区域的相关信息,最后读取相应区域配置文件来获取相关DNS信息,而配置文件named.conf是这整个流程的控制中心。
(1)全局配置文件named.conf.options结构
a. options块
- listen-on port 53 : 指定bind侦听DNS查询请求的本机IP和端口,例如 listen-on port 53 { 192.168.1.5;};
- directory :指定区域配置文件所在路径/var/cache/bind
- allow-query { ... } :指定接受DNS查询请求的客户端,如 allow-query { 192.168.1.5;192.168.1.6;192.168.1.7;};只允许以上IP发送查询DNS请求
- forwarders { ... } :指定DNS转发服务器,若有多个,则按顺序依次转发,直至成功为止
- forward only|first :转发方式,first表示首先转发到forwarders指定的DNS服务器查询,然后再查询本机,only表示只转发给forwarders指定的DNS服务器,不再查询本机
- tcp-clients :DNS同时接受客户端TCP连接的最大数量,默认100
- allow-tranfer :允许区域传输的辅助区域,若设置了辅助区域,则需要在主要区域中设定该值,用于将主要区域信息传输给辅助区域
b. logging块:指定DNS服务器的日志参数
c. view块:指定主配置文件存放的路径及名称
- match-clients:指定提交DNS请求客户端源IP地址范围
- match-destinations:指定提交DNS请求客户端的目标IP地址范围
- include:指定主配置文件
view form0 {
match-clients { 192.168.0.0/24;};
match-destinations { any; };
include "/etc/bind/named0.conf";
}
view form1 {
match-clients { 192.168.1.0/24;};
match-destinations { any; };
include "/etc/bind/named1.conf";
}
说明:以上view块中的信息表示,192.168.0.0段的客户端发送的任何DNS请求,将采用主配置文件/etc/bind/named0.conf相关配置进行解析,
同理192.168.1.0段的将采用/etc/bind/named1.conf进行解析
(2)主配置文件
主配置文件通过zone关键字定义当前所管辖的区域,格式如下:
zone "区域名称" IN {
参数;
};
type区域类型如下:
a. master:主要区域
b. slave :辅助区域,同步主要区域所有信息
c. stub :类似辅助区域,只同步主要区域的NS信息以及NS信息对应的A记录信息
d. forward:转发区域,用于转发客户端的递归查询信息
e. hint :当bind启动时,用来查询根域名服务器
(3)区域配置文件
区域配置文件结构如下:
$TTL 86400
区域名称 记录类型 SOA 域名服务器FQDN. 管理员邮箱. ( 序列号 刷新时间 重试时间 失效时间 TTL)
区域名称 IN NS FQDN
FQDN IN A IP地址
别名 IN CNAME 对应A记录
区域名称 IN MX 优先级 邮件服务器对应A记录
IP地址 IN PTR FQDN
说明:其中管理员邮箱中的@由“.”来替代,刷新时间,重试时间,失效时间均是针对辅助区域与主要区域的信息同步而言的,
邮件交换记录中的优先级,数字越小,优先级越高
8. 辅助区域配置:
(1)首先要在主要区域服务器的全局配置文件中添加如下参数:allow-transfer { 辅助区域服务器IP地址; };
(2)修改辅助区域的主要配置文件
zone "example.com" IN {
type slave;
masters {主要区域服务器IP地址};
file “/etc/bind/named0.conf”;
};
9.转发区域配置
BIND在配置转发时有完全转发和条件转发两种方式:
(1)完全转发。在全局配置文件options块中增加如下内容后,BIND先将客户端DNS查询信息转发到202.103.24.68DNS服务器,若未查询到信息,则再转发到下一个DNS服务器,直至最后转发到本机查询
forwarders { 202.103.24.68;202.103.0.117;};
forward first;
(2) 条件转发。在主要配置文件中增加如下内容,BIND将客户端DNS查询请求中后缀为demo.com的文件转发到202.103.24.68
zone "demo.com" IN {
type forward;
forwarder { 202.103.24.68; };
};
10. TSIG(Transaction Signature 事务签名):主要用于辅助区域与主要区域数据同步传输的加密,提高数据同步过程的安全性
(1)主要区域配置
a. 生成密钥
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST rndc-key
说明: -a:指定加密算法为HMAC-MD5
-b:指定使用128位密钥长度
-n:指定主机为rndc-key文件中的密钥所指定的主机
b. 查看密钥
通过上述命令会在当前目录下生成一个密钥对文件,通过cat获取该文件中的密钥字符串
c.主要全局配置文件/etc/bind/named.conf.options,在其中添加如下内容:
key tiddyzhangtransfer {
algorithm hmac-md5;
secret 3JhG17t8kduTisdj234jylsdf==;
};
server 192.168.0.11 {
keys { tiddyzhangtransfer; };
};
d. 修改主配置文件/etc/named.conf.local,添加如下黑体字内容
zone "example.com" IN {
type master;
file "/etc/bind/example.com";
allow-transfer { key tiddyzhangtransfer; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/0.168.192.local";
allow-transfer { key tiddyzhangtransfer; };
};
(2)辅助区域配置
a. 在主要全局配置文件/etc/bind/named.conf.options,在其中添加如下内容:
key tiddyzhangtransfer {
algorithm hmac-md5;
secret 3JhG17t8kduTisdj234jylsdf==;
};
server 192.168.0.11 {
keys { tiddyzhangtransfer; };
};
b. 修改主配置文件/etc/named.conf.local,注意如下黑体字内容
zone "example.com" IN {
type slave;
masters { 192.168.0.10;};
file "/etc/bind/example.com";
};
zone "0.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.0.10;};
file "/etc/bind/0.168.192.local";
};
(2)如何配置DDNS
a. 运用如下命令生成密钥
dnssec-keygen -a HMAC-MD5 -b 128 -n USER tiddyzhangdns
说明: -a:指定加密算法为HMAC-MD5
-b:指定使用128位密钥长度
-n:指定用户名为tiddyzhangdns
b. 获取密钥
通过上述命令会在当前目录下生成一个密钥对文件,通过cat获取该文件中的密钥字符串
c. 修改DNS全局配置文件/etc/bind/named.conf.options,增加如下内容
key tiddyzhangdns {
algorithm hmac-md5;
secret 3JhG17t8kduTisdj234jylsdf==;
};
d. 修改DNS主配置文件/etc/bind/named.conf.local,增加黑体字部分
zone "example.com" IN {
type master;
file "/etc/bind/example.com";
allow-update { key tiddyzhangdns; };
};
zone "0.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/0.168.192.local";
allow-update { key tiddyzhangdns; };
};
e. 修改DHCP配置/etc/dhcp/dhcpd.conf,注意如下黑体字部分
key tiddyzhangdns {
algorithm hmac-md5;
secret 3JhG17t8kduTisdj234jylsdf==;
}
zone example.com. {
primary 192.168.0.10;
key tiddyzhangdns;
}
zone 0.168.192.in-addr.arpa. {
primary 192.168.0.10;
key tiddyzhangdns;
}
subnet 192.168.0.0 netmask 255.255.255.0 {
option domain-name "example.com";
option domain-name-servers 192.168.0.10;
...
}
f. Linux客户端配置
在/etc/dhcp下建立文件dhclient.conf,内容如下:
send fqdn.fqdn "client2"
send fqdn.encoded on;
send fqdn.server-update off;
g. 检查DDNS配置是否成功
在配置完成DDNS后,在/etc/bind下会生成两个.jnl文件,这两个文件时当前正在区域配置文件的运行时文件,所有动态更新的记录首先会记录到这两个文件中。