一.DNS基础知识
1.DNS相关名词解释:
1、Serial:只是一个序号,但这个序号可被用来作为slave与master更新的依据。举例来说,master序号为100但slave序号为90时,那么这个zone file的资料就会被传送到slave来更新了。由于这个序号代表新旧资料,通常我们建立你可以利用日期来设定!
举例来说,上面的资料是在2016/01/01所修改的第一次,所以用2016010101作为序号代表!(yyymmddnn,nn代表这一天是第几次修改)
2、Refresh:除了根据Serial来判断新旧之外,我们可以利用这个refresh(更新)命令slave多久进行一次主动更新;
3、Retry:如果到了Refresh的时间,但是slave却无法连接到master时,那么在多久之后,slave会再次的主动尝试与主机连线;
4、Expire:如果slave一直无法与master连接上,那么经过多久的时间之后,则命令slave不要再连接master了!也就是说,此时我们假设master DNS可能遇到重大问题而无法上线,则等待系统管理员处理完毕后,再重新来到slave DNS重新启动bind吧!
5、Minimun:这个就有点像是TTL
NS 域的授权名称服务器
NSDName:DNS的FQDN
a.shifen.com. 611 IN NS ns4.a.shifen.com.
a.shifen.com. 611 IN NS ns3.a.shifen.com.
a.shifen.com. 611 IN NS ns2.a.shifen.com.
a.shifen.com. 611 IN NS ns1.a.shifen.com.
a.shifen.com. 611 IN NS ns5.a.shifen.com.
MX 域的邮件交换器,要跟这一个优先级值,越小越高
baidu.com. 7200 IN MX 20 jpmx.baidu.com.
baidu.com. 7200 IN MX 20 mx50.baidu.com.
baidu.com. 7200 IN MX 10 mx.n.shifen.com.
baidu.com. 7200 IN MX 20 mx1.baidu.com.
A记录:
将域名指向一个IPv4地址(例如:10.10.10.10),需要增加A记录
CNAME记录:
如果将域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录
MX记录:
建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录
NS记录:
域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录
TXT记录:
可任意填写(可为空),通常用做SPF记录(反垃圾邮件)使用
AAAA记录:
将主机名(或域名)指向一个IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA记录
SRV记录:
记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:_example-server._tcp)
显性URL:
将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址(例如:将www.net.cn显性转发到www.hichina.com后,访问www.net.cn时,地址栏显示的地址为:www.hichina.com)。
隐性URL:
与显性URL类似,但隐性转发会隐藏真实的目标地址(例如:将www.net.cn隐性转发到www.hichina.com后,访问www.net.cn时,地址栏显示的地址仍然为:www.net.cn)。
2.DNS三个查询命令:
host nslookup dig
二.Bind服务主从安装
1.Bind主服务安装(Bind是一款DNS服务器软件):
yum install bind-utils bind bind-devel bind-chroot
2.修改主配置文件(生产环境):
vim /etc/named.conf
options {
version "1.1.1";
listen-on port 53 {any;};
directory "/var/named/chroot/etc/";
pid-file "/var/named/chroot/var/run/named/named.pid";
allow-query { any; };
Dump-file "/var/named/chroot/var/log/binddump.db";
Statistics-file "/var/named/chroot/var/log/named_stats";
zone-statistics yes;
memstatistics-file "log/mem_stats";
empty-zones-enable no;
forwarders {223.5.5.5;8.8.8.8; };
};
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
logging {
channel warning {
file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
severity warning;
print-category yes;
print-severity yes;
print-time yes;
};
channel general_dns {
file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category default {
warning;
};
category queries {
general_dns;
};
};
include "/var/named/chroot/etc/view.conf";
相关注释:
options {
version "1.1.1";
listen-on port 53 {any;}; #监控端口和ip
directory "/var/named/chroot/etc/"; #A记录等配置文件所在的目录
pid-file "/var/named/chroot/var/run/named/named.pid"; #服务运行的进程号
allow-query { any; }; #允许谁访问{}可以写IP
Dump-file "/var/named/chroot/var/log/binddump.db"; #内存数据存放位置
Statistics-file "/var/named/chroot/var/log/named_stats"; #可以看到DNS解析记录的数量,成功率有多少域(可以做监控)DNS状态等
zone-statistics yes; #配成yes之后监控会分区域
memstatistics-file "log/mem_stats"; #内存状态
empty-zones-enable no; #不支持空Zone
forwarders {223.5.5.5;8.8.8.8; }; #转发(如果我这没有域名就转发)
};
#rndc认证的密钥和运行的IP,rndc是bind的一种reload方法
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
#日志相关配置
logging {
channel warning { #警告日志相关信息
file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m;
severity warning;
print-category yes;
print-severity yes;
print-time yes;
};
channel general_dns { #访问日志相关信息
file "/var/named/chroot/var/log/dns_log" versions 10 size 100m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category default { #默认日志警告级别
warning;
};
category queries { #访问日志级别
general_dns;
};
};
include "/var/named/chroot/etc/view.conf"; #其他域的配置文件目录(view.conf可以实现简单的只能DNS的功能,为以后的只能DNS做准备)
3.修改Rndc配置文件:
rndc是bind的一种reload方法,否则只能重启生效
vim /etc/rndc.key
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
vim /etc/rndc.conf
key "rndc-key" {
algorithm hmac-md5;
secret "Eqw4hClGExUWeDkKBX/pBg==";
};
options {
default-key "rndc-key";
default-server 127.0.0.1;
default-port 953;
};
4.修改zone相关配置:
vim /var/named/chroot/etc/view.conf
view "View" { #“View 说明 以后可以修改为电信 联通”
zone "wmj.com" {
type master; #配置master或者slave
file "wmj.com.zone"; #配置这个zone的file文件名称
allow-transfer { #允许谁来找我同步,填slave的IP
172.16.1.210;
};
notify yes; #当我的master发生变更了,去通知下面slave的IP
also-notify {
172.16.1.210;
};
};
};
# 如果有多个需要一zone"wmj.com开头"以};结尾
vim /var/named/chroot/etc/wmj.com.zone
$ORIGIN .
$TTL 3600 ; 1小时域名生存周期(内网可调节短)
wmj.com IN SOA op.wmj.com. dns.wmj.com. (
2000 ; serial
900 ; refresh (15 minutes)
600 ; retry (10 minutes
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.wmj.com.
$ORIGIN wmj.com.
#上面NS配置的域名在下面一定要有一个A记录
thanks A 172.16.1.241
op A 172.16.1.211
a A 172.16.1.240
cname CNAME a.wmj.com.
mx MX 5 172.16.1.29
相关解释:
1. SOA(start of authority)资源记录:它定义了一个域的全局特性,必须是出现在zone文件中的第一个资源记录,而且一个zone文件中必须只有一个SOA资源记录。其中SOA后面的op与dns分别是域名服务器和管理员邮箱(dns@wmj.com),其全写分别是ns1.cobb.com.和root.cobb.com,因为$ORIGIN指明了域名,所以这个地方可以略去。
1、Serial:只是一个序号,但这个序号可被用来作为slave与master更新的依据。举例来说,master序号为100但slave序号为90时,那么这个zone file的资料就会被传送到slave来更新了。由于这个序号代表新旧资料,通常我们建立你可以利用日期来设定!
举例来说,上面的资料是在2016/01/01所修改的第一次,所以用2016010101作为序号代表!(yyymmddnn,nn代表这一天是第几次修改)
2、Refresh:除了根据Serial来判断新旧之外,我们可以利用这个refresh(更新)命令slave多久进行一次主动更新;
3、Retry:如果到了Refresh的时间,但是slave却无法连接到master时,那么在多久之后,slave会再次的主动尝试与主机连线;
4、Expire:如果slave一直无法与master连接上,那么经过多久的时间之后,则命令slave不要再连接master了!也就是说,此时我们假设master DNS可能遇到重大问题而无法上线,则等待系统管理员处理完毕后,再重新来到slave DNS重新启动bind吧!
5、Minimun:这个就有点像是TTL
5.启动主Bind服务:
chown -R named:named /var/named/
/etc/init.d/named start
dig @127.0.0.1 thanks.wmj.com #测试
6.Bind从服务器安装:
yum install bind-utils bind bind-devel bind-chroot
7.修改配置文件:
vim /etc/named.conf
vim /etc/rndc.key
vim /etc/rndc.conf
#上面三个与主一样
vim /var/named/chroot/etc/view.conf
view "SlaveView" {
zone "wmj.com" {
type slave;
masters {172.16.1.211; };
file "slave.wmj.com.zone";
};
};
8.启动Bind从服务器:
chown -R named:named /var/named/
/etc/init.d/named start
dig @127.0.0.1 thanks.wmj.com #验证下从服务器
9.验证修改配置后的主从同步:
vim /var/named/chroot/etc/wmj.com.zone
2001 ; 修改serial让他加一
a A 172.16.1.241 ;添加一条新纪录
rndc reload #使用rndc重载配置
三.DNS负载均衡和智能DNS
1.Bind实现DNS负载均衡:
vim /var/named/chroot/etc/wmj.com.zone
a A 172.16.1.241
a A 172.16.1.242
# rndc reload
ps:DNS的负载均衡的特性是高效和粗暴,只能实效轮询机制,没有健康检测。
2.配置DNS视图和智能DNS(在主上面操作):
vim /var/named/chroot/etc/named.conf
acl group1 {
172.16.1.28;
};
acl group2 {
172.16.1.29;
};
# 加在include前面就可以
#解释: 这里把172.16.1.28划分到group1当中,172.16.1.29划分到group2当中(支持网段)
vim /var/named/chroot/etc/view.conf
#删掉原来的
view "GROUP1" {
match-clients { group1; };
zone "mywmj.com" {
type master;
file "group1.mywmj.com.zone";
};
};
view "GROUP2" {
match-clients { group2; };
zone "mywmj.com" {
type master;
file "group2.mywmj.com.zone";
};
};
vim /var/named/chroot/etc/group1.mywmj.com.zone
$ORIGIN .
$TTL 3600 ; 1 hour
mywmj.com IN SOA op.mywmj.com. dns.mywmj.com. (
2005 ; serial
900 ; refresh (15 minutes)
600 ; retry (10 minutes)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.mywmj.com.
$ORIGIN mywmj.com.
op A 172.16.2.20
view A 172.16.2.20
vim /var/named/chroot/etc/group2.mywmj.com.zone
#2和1基本一样,只是指向的IP变了。
$ORIGIN .
$TTL 3600 ; 1 hour
mywmj.com IN SOA op.mywmj.com. dns.mywmj.com. (
2005 ; serial
900 ; refresh (15 minutes)
600 ; retry (10 minutes)
86400 ; expire (1 day)
3600 ; minimum (1 hour)
)
NS op.mywmj.com.
$ORIGIN mywmj.com.
op A 172.16.2.21
view A 172.16.2.21
# chown -R named:named /var/named/
# rndc reload
#重新加载生效,然后再不同的机器发起dig请求,会得到不同IP解析
四.DNS知识扩展
1.Bind状态查询:
rndc stats #生成状态信息
cat /var/named/chroot/var/log/named_stats #每次都会在这个文件追加当前状态信息
2.DNS服务器压测工具queryperf:
wget http://ftp.isc.org/isc/bind9/9.7.3/bind-9.7.3.tar.gz
tar -zxvf bind-9.7.3.tar.gz
cd bind-9.7.3/contrib/queryperf/
./configure
make
vim testdns.txt
#把你要压测的域名下在文本里,每个域名多写几次
a.wmj.com A
a.wmj.com A
a.wmj.com A
b.wmj.com A
b.wmj.com A
b.wmj.com A
./queryperf -d testdns.txt -s 172.16.1.211
# -d: 指定压测域名文档
# -s: 指定压测的服务器
3.BIND服务器生产需要监控项:
1.服务器本事状态。
2.loopback地址监控。
3.DNS数据与Master一致性监控。(对比serial是否相同)
4.DNS相应时间监控。
4.BIND配置 管理自动化:
可以使用自带的bind-dlz,这个把ZONE保存在Mysql里面,可以通过WEB管理。
缺点是每次请求都要读数据库,影响性能和增加故障点(可以结合使用)。
https://github.com/shanks1127/dns #这个是一套开源的bind-dlz的web管理修改,通过mysql生成静态的ZONE文件,这样不影响DNS性能