/etc/hosts (域名解析缓存文件)
分布式层次型
主机名+域名
DNS的解析过程(以解析www.baidu.com.cn为例)
1.查看本地缓存
2.默认查询本地/etc/hosts文件进行解析(具体先使用hosts文件或DNS由/etc/nsswitch.conf文件决定)
3.由本地域名服务器(/etc/resolv.conf)查询根域名服务器(进行迭代解析)和下级服务器
4.本地域名服务器得到结果后会进行缓存,然后再将结果告诉客户端
查询www.baidu.com.cn
递归查询:客户机-->本地域名服务器(查询没有结果,接着下面的步骤)
迭代解析:本地域名服务器-->根域名服务器(dig @a.root-servers.net . ns)(得到cn服务器的IP地址)
本地域名服务器-->cn服务器(得到com.cn服务器的IP地址)
本地域名服务器-->com.cn服务器(得到baidu.com.cn的IP地址)
本地域名服务器-->baidu.com.cn服务器(得到最终域名服务器,解析相应的主机名)
DNS服务器的类型
主域名服务器(省级代理)
负责一个或一个以上原始区域的域名解析,有自己的区域数据文件,是一个权威服务器
从域名服务器(市级代理)
区域数据文件是从主域名服务器复制过来的,从域名服务器不是一个权威服务器
缓存域名服务器(个人代理)
纯粹的没有区域数据文件(本身不能响应任何DNS请求,所有记录全部向其它服务器查询)
DNS的记录类型
SOA:起始授权机构,至少是一个区域的权威服务器(主域名服务器),记录的是权威服务器的IP地址
NS:名称服务器,能解析特定域名的主机都是名称服务器(主域名服务器和从域名服务器)
A:正向记录,用于将域名解析为IP地址
PTR:反向记录,用于将IP地址解析为域名(邮件服务器)
MX:邮件交换记录,用于设置某个区域的邮件服务器地址
CNAME:别名记录,将服务器名另外设置一个名称
HINFO:硬件信息记录,并不向客户端发送回应
TXT:域名服务器版本记录,可以更改域名服务器的版本
DNS的客户端工具(10.0.100.251为DNS服务器IP)
host
host www.sjjy.com 10.0.100.251
host -t mx sjjy.com 10.0.100.251(针对没有定义具体IP的记录)
host -t ns sjjy.com 10.0.100.251
host 10.0.100.100 10.0.100.251
dig
dig @10.0.100.251 blogs.sjjy.com
dig @10.0.100.251 -t mx sjjy.com
nslookup
nslookup www.sjjy.com 10.0.100.251
nslookup
server 10.0.100.251
set type=mx
sjjy.com
部署DNS服务器步骤
1.安装DNS服务器软件
yum install bind*
2.在主配置文件里面定义相关的区域及信息
vim /etc/named.conf(注意是以“//”作为注释,不是“*”)
options {
listen-on port 53 { 127.0.0.1; }; --- 监听端口和IP地址
listen-on-v6 port 53 {};--- IPV6格式
directory "/var/named"; --- 区域数据文件
dump-file ""; --- 缓存文件
statistics-file ""; ---
memstatistics-file ""; ---
allow-query { localhost; }; --- 只允许本地查询,可以添加网段
recursion yes; --- 允许递归查询
dnssec-enable yes; --- DNS加密
dnssec
dnssec
bindkeys-file
managed-keys-directory
};
logging { ---- 日志通道(默认/var/log/messages)
channel default_debug {
file "";
}
};
zone "." IN(internet) {
type hint; --- 类型为缓存域名服务器(masetr(主域名服务器)|slave(从域名服务器))
file "name.ca"; --- 存在于上面配置的directory目录下面,记录根域名服务器的地址
};
zone "sjjy.com" IN { --- 定义正向解析
type master; --- 定义为主域名服务器
file "sjjy.com.zone"; --- 定义具体的区域文件
};
zone "0.10.in-addr.arpa" IN { --- 定义反向解析
type master; --- 同上面定义的正向解析
file "10.0.rev"; --- 定义具体的区域文件
};
//当/etc/hosts文件删除,才会调用下面两个文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
};
编辑具体的区域文件
vim /var/named/sjjy.com.zone
$TTL 1D --- 缓存生存时间:1天
$ORIGIN sjjy.com. --- 显示的声明区域名
@(代表具体的区域名称(sjjy.com.zone)) IN SOA(权威服务器记录) dns.sjjy.com. admin.sjjy.com.(管理员的邮件地址,“admin.”表示为“admin@”) (
0 ; serial(序列号,用于主从域名服务器之间,为了识别何时进行更新,常用时间表示)
1D ;refresh(刷新时间,从域名服务器刷新的频率)
1H ;retry(间隔时间,当连接失败后,重连的间隔)
1W(1个星期) ;expire(清除时间)
3H(3个小时) ;minimum
)
IN NS dns.sjjy.com. --- 定义名称服务器,多个换行写
IN NS 5(优先级,小的高,1-255) dns2.sjjy.com.
IN MX mail.sjjy.com.
dns IN A 10.0.100.251 --- 具体的主机对应的IP地址
dns IN A 10.0.100.250
mail IN A 10.0.100.100
www IN A 10.0.100.101
ftp IN A 10.0.100.102
blogs IN A 10.0.100.103
bk IN CNAME blogs
vim /var/named/10.0.rev(可以不用写别名)
$TTL 1D --- 缓存生存时间:1天
$ORIGIN 0.10.in-addr.arpa. --- 显示的声明区域名
@(代表具体的区域名称(sjjy.com.zone)) IN SOA(权威服务器记录) dns.sjjy.com. admin.sjjy.com.(管理员的邮件地址,“admin.”表示为“admin@”) (
0 ; serial(序列号,用于主从域名服务器之间,为了识别何时进行更新,常用时间表示)
1D ;refresh(刷新时间,从域名服务器刷新的频率)
1H ;retry(间隔时间,当连接失败后,重连的间隔)
1W(1个星期) ;expire(清除时间,更新失败后,多长时间后清除对应的缓存)
3H(3个小时) ;minimum(缓存服务器不能与主服务联系上后多长时间清除相应的记录)
)
IN NS dns.sjjy.com.
251.100 IN PTR dns.sjjy.com.
100.100 IN PTR mail.sjjy.com.
101.100 IN PTR www.sjjy.com.
102.100 IN PTR ftp.sjjy.com.
103.100 IN PTR blogs.sjjy.com.
检查主配置文件和区域文件的语法是否有错
named-checkconf /etc/named.conf --- 检查主配置文件语法
named-checkzone sjjy.com /var/named/sjjy.com.zone --- 检查正向区域配置文件语法
named-checkzone 0.10.in-addr.arpa /var/named/10.0.rev --- 检查反向区域配置文件语法
启动域名服务器
service named start
service named reload --- 不中断重启(在不对主配置文件进行操作的情况下)
更改正向区域文件和反向区域文件的属主和属组(因为运行named服务时是以named用户执行的)
chown named:named /var/named/sjjy.com.zone
chown named:named /var/named/10.0.rev
根域名服务器的更新:dig @a.root-servers.net . ns > /var/named/named.ca
练习:使用自己姓名的拼音作为域名搭建域名服务器,域名服务器要求有正反向区域,要求有soa、ns、mx、a、ptr、cname记录的定义,部署完成后要能够正常的提供相关域名的解析服务。
错误排除步骤
1.检查配置文件语法是否正确
named-checkconf /etc/named.conf
named-checkzone zlj.com zlj.com.zone
named-checkzone 0.10.in-addr.arpa 10.0.rev
2.检查53号端口是否处于监听状态,监听什么地址
lsof -i:53
netstat -antpul | grep named
3.查看域名服务器配置是否正确
vim /etc/resolv.conf
4.查看日志文件
vim /var/log/messages
5.查看SELinux是否关闭
getenforce
setenforce 0
错误集:
dns_rdata_fromtext: zlj.com.zone:10: near 'mail.zlj.com.': not a valid number
解决办法:邮件服务器必须设置优先级
10.0.10.rev:3: SOA record not at top of zone (10.0.10.in-addr.arpa.10.0.10.in-addr.arpa)
解决办法:注意区域名后面需要带上".
从域名服务器(里面的数据是非权威数据,给主域名服务器提供容错功能和辅助解析,当主域名服务器宕机时,就会接管服务,在生存时间内有效)
vim /etc/named.conf
options {
listen-on port 53 { 127.0.0.1; }; --- 监听端口和IP地址
listen-on-v6 port 53 {};--- IPV6格式
directory "/var/named"; --- 区域数据文件
dump-file ""; --- 缓存文件
statistics-file ""; ---
memstatistics-file ""; ---
allow-query { localhost; }; --- 只允许本地查询,可以添加网段
recursion yes; --- 允许递归查询
dnssec-enable yes; --- DNS加密
dnssec
dnssec
bindkeys-file
managed-keys-directory
};
zone "." IN {
type hint; --- 类型为缓存域名服务器(masetr(主域名服务器)|slave(从域名服务器))
file "name.ca"; --- 存在于上面配置的directory目录下面,记录根域名服务器的地址
};
zone "sjjy.com" IN {
type slave;
file "slaves/sjjy.com.zone";
master { 10.0.100.251; };
};
zone "0.10.in-addr.arpa" IN {
type slave;
file "slaves/10.0.100.rev"
masters { 10.0.100.251; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
编辑主域名服务器的正向和反向区域文件,添加从域名服务器,并且加大serial
vim /var/named/sjjy.com.zone
添加 从域名服务器
IN NS dns1.sjjy.com.
dns1 IN A 10.0.100.10
vim /var/named/10.0.0.rev
添加 从域名服务器
IN NS dns1.sjjy.com.
10 IN PTR dns1.sjjy.com.
增加安全性,指定只有这个IP才能进行传输
vim /etc/named.conf
zone "sjjy.com" IN {
添加 allow-transfer { 10.0.100.252; };
};
DNS的其他相关配置
1.转发设置
vim /etc/named.conf
options { --- 全局定义,全部转发
forward first|only; first:表示先进行转发;only:表示先只选用转发
};
2.acl访问控制列表(对allow-query生效)
vim /etc/named.conf
acl mynet(列表名,自定义) { --- 不放在options里面
10.0.0.0/16;
192.168.10.10;
172.16.0.0/24
};
特殊字符串
any 匹配任意主机
none 不匹配任何主机
localhost 匹配本机上的任何ipv4网络接口
localnets 匹配本机上的任何ipv4的本地网络
3.also-notify主动通知从域名服务器进行更新(当主域名服务器有更改时,但只是进行了service named reload,就需要它)
vim /etc/named.conf
options {
also-notify { 10.0.5.151; };
};
从域名服务器上进行配置允许
options {
allow-notify { 主域名服务器IP; };
};
4.黑名单配置(写进options里面)
blackhole {
10.0.10.100;
102.10.10.0/24;
};
------------------------------------------------------
DNS智能解析
1.视图的基本配置语法
view 视图名 {
match-clients { 客户端地址列表; };
区域文件声明;
};
示例:
view "hunan" {
match-clients { 172.16.0.0/16; }; --- 当ip地址很多时,使用acl,可以单独对acl生成一个文件,用include进行定义
recursion yes;
zone "sxjy.com" IN {
type master;
file "hn.sxjy.com.zone";
allow-update { none; };
allow-transfer { 172.16.20.223; };
};
zone "0.10.in-addr.arpa" IN {
type master;
file "hn.10.0.100.rev";
allow-update { none; };
allow-transfer { 172.16.20.223; };
};
};
view "hubei" {
match-clients { 172.20.0.0/16; }; --- 当ip地址很多时,使用acl,可以单独对acl生成一个文件,用include进行定义
recursion yes;
zone "sxjy.com" IN {
type master;
file "hb.sxjy.com.zone";
allow-update { none; };
allow-transfer { 172.16.20.223; };
};
zone "0.10.in-addr.arpa" IN {
type master;
file "hb.10.0.100.rev";
allow-update { none; };
allow-transfer { 172.16.20.223; };
};
};
编辑区域配置文件
vim hn.sxjy.com.zone(下面的设置是zlj.com,如果要使用的话,要修改为hn.sxjy.com)
$TTL 1D
$ORIGIN zlj.com.
@ IN SOA dns.zlj.com. admin.zlj.com. (
2016082309; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.zlj.com.
IN NS dns1.zlj.com.
IN MX 5 mail.zlj.com.
dns IN A 10.0.10.178
dns1 IN A 10.0.10.186
mail IN A 10.0.10.178
www IN A 10.0.0.254
ftp IN A 10.0.10.178
tftp IN CNAME ftp
相应的在编辑hb.sxjy.com.zone时,保持NS服务器的IP地址不变,其他的主机IP地址作相应的改变
$TTL 1D
$ORIGIN zlj.com.
@ IN SOA dns.zlj.com. admin.zlj.com. (
2016082309; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.zlj.com.
IN NS dns1.zlj.com.
IN MX 5 mail.zlj.com.
dns IN A 10.0.10.178
dns1 IN A 10.0.10.186
mail IN A 10.0.100.178
www IN A 10.0.100.254
ftp IN A 10.0.100.178
tftp IN CNAME ftp
错误集:
** server can't find www.zlj.com:SERVFAIL
解决办法:将相应的区域配置文件的属主该为named
扩展
TSGI事务签名实现安全通信
首先,得要注释掉/etc/named.conf配置文件里面的dnssec,
第一步:在主服务器上生成密钥(每个视图都要生成一个密钥)
# cd /etc
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST hunan
# cat Kchangsha.+157+36507.private
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST hubei
第二步:在所有服务器的配置文件中加载密钥
# vim /etc/named.conf
key "hunan" {
algorithm hmac-md5;
secret "9U4I7Ft1AGIm+d+MQ/rkaw==";
};
key "hubei" {
algorithm hmac-md5;
secret "9+tJAJ1soJT0daCB5evExw==";
};
第三步:设置主服务器的named.conf配置文件,在具体视图中使用密钥访问
注意:需要添加的地方有:
match-clients { key changsha(当前视图名称); };
server 其他服务器IP地址 { keys { changsha; }; };
zone {
allow-transfer { key changsha; };
};
第四步:设置从服务器的named.conf配置文件,在具体视图中使用密钥访问
注意:需要添加的地方跟第三步差不多,但是不需要在zone中添加,添加server时,注意,添加相互通信的就可以了