DNS and Bind
BIND:Berkeley Internet Name Domain,伯克利互联网名称域;
名称域——名字空间:
倒置的树
根域(.)
顶级域(Top Level Domain,TLD)
组织域:com, org, edu, gov, mil, net, ...
info, cc, 中国, ...
地理域:cn, tw, hk, jp, iq, ...
反向域:in-addr.arpa
DNS的名称解析方式:
正向解析:名称 --> IP地址
反向解析:IP地址 --> 名称
注意:正向解析和反向解析所使用的名称非同一空间,非同一棵树;也就是非同一数据库;
DNS查询类型:
递归查询
迭代查询
DNS服务器的分类:
至少负责一个域的数据库:
主DNS服务器
辅助DNS服务器(从DNS服务器)
不负责任何域的数据库:
缓存DNS服务器(存根DNS服务器)
一次完整的DNS查询请求流程:
Client --> hosts --> Local Cache --> first DNS(recursive) -->
--> 服务器本地缓存或本地数据库中有结果,直接响应客户端;
--> ROOT(iteration) --> TLD_DNS_SERVER --> 二级域DNS_SERVER --> ... --> ns.xxx. --> 解析结果;
查询得到的解析答案:
权威答案:由直接负责管理对应信息的DNS服务器返回的答案;
非权威答案:由指定的服务器从缓存中或者利用迭代的方式查询到的答案;
还有两种可能:
肯定答案:能够按照客户端请求完成正确的名称解析的答案;
否定答案:无法安装客户端的请求完成正确的名称解析所返回的答案;即客户端所请求的解析内容,不存在或无法找到映射资源;
回顾:
OpenSSH
dropbear
DNS:
主从DNS服务器:
主DNS服务器:维护所负责解析的区域数据库文件的主体服务器,即:可以在区域数据库中进行增,删,改等管理操作;读写操作均可进行;
从DNS服务器:也称为辅助DNS服务器,从主DNS服务器或其他的从DNS服务器以区域传送的方式复制对方的区域数据库;从DNS服务器无法完成管理类操作,只能进行读操作;
为了保证主DNS服务器中的数据库和从DNS服务器中的数据库一致:
序列号:Serial,即数据库的版本号;主DNS服务器的数据库内容如果发生变化,序列号应该自增;如果从服务器接收到的新的数据库,如果其序列号没有变化,则忽略;如果发现其比当前自身的数据库序列号更大,则更新;
刷新时间间隔:refresh,从DNS服务器每隔多长时间到主DNS服务器上检查序列号的变化更新情况;
重试时间间隔:retry,从DNS服务器向主DNS服务器要求同步数据库失败之后,再次发起尝试请求的时间间隔;
过期时间:expire,从DNS服务器始终联系不上主DNS服务器时,从DNS服务器多长时间之后停止服务;
否定答案的缓存时长:minimal TTL
题外话:
服务器时间同步的方法:
1.到互联网同步时间;
2.自架时间服务器;
CentOS 6-:ntpd服务器
CentOS 7:ntpd服务器,chrony服务器
ntpd的配置:/etc/ntp.conf
restrict 172.16.0.0 mask 255.255.0.0 nomodify
CentOS6-:service ntpd start
CentOS7:systemctl start ntpd.service
区域数据传送:
主DNS服务器可以主动通知从DNS服务器更新数据;
从DNS服务器可以主动的向主DNS服务器发出更新请求;
两种类型:
全量传送:AXFR,All Transfer,传送整个数据库;
增量传送:IXFR,Increment Transfer,仅传送自上次变化之后的数据内容
对于BIND,默认是允许所有客户端请求区域传送;需要进行访问控制;
域是DNS服务器用于进行正常的权威解析活动的必要的基础;
称存放于区域数据库文件中的那些用于解析工作的数据,为资源记录,简称RR;
资源记录:
记录的类型:A, AAAA, PTR, SOA, NS, CNAME, MX
SOA:Start of Authority,起始授权记录;
在任何一个数据库中有且只能有一条SOA记录,必须是数据库的第一条记录
A:Address,主机记录;
标识从完全合格域名到IP地址的映射关系,FQDN --> IPv4;
AAAA: Address,FQDN --> IPv6;
PTR:PoinTeR,指针记录;
标识从IP地址到完全合格域名的映射关系,IP --> FQDN
NS:Name Server,名称服务器记录;
用户标明当前域中所有的DNS服务器;
CNAME:Conanical Name,别名记录;
标识从完全合格域名到完全合格域名的映射关系,FQDN --> FQDN
MX:Mail eXchanger,邮件交换器记录;
标识域中邮件服务器的主机名,从域名映射到完全合格域名,Domain name --> FQDN
优先级:0-65536,数字越小优先级越高;
区域数据库中资源记录的定义格式:
语法:name|FQDN [TTL] IN RR_TYPE VALUE
注意:
1.名称部分可以写FQDN,也可以除去域名部分的主机名,其域名会从配置文件中继承,也可以使用宏$Origin来定义;
2.TTL是以每秒为单位的时间概念,如果省略,则从全局定义的宏$TTL继承
3."@"符号可以用于引用当前区域的域名;
4.同一个name可以通过多条记录定义多个不同的VALUE;DNS在查询此类记录的时候,会以轮询的方式一次调取每个记录的内容;
5.多个name通过多条记录对应一个VALUE,通常用于多个名称对应同一IP地址,可以使用CNAME记录来进行标识;
七种资源记录在区域数据库中的具体格式:
SOA资源记录:
name:当前域的域名,如:qhdlink.com.;或者可以使用"@"代替域名;
value:
1.当前区域的主DNS服务器的FQDN;
2.当前区域数据库的管理员的邮件地址;但是使用"."来代替"@";
mailmaster.qhdlink.com.
3.主从服务器进行区域传送的相关时间定义及否定答案的统一TTL;
(Serial 1H 15M 1W 1D)
(
Serial;
1H;refresh
15M;retry
1W;expire
1D;minimal ttl)
例如:
$TTL 86400
qhdlink.com. 86400 IN SOA ns1.qhdlink.com. master.qhdlink.com.(
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D;ttl)
NS记录:
name:当前域的域名
value:当前区域内某DNS服务器的完全合格域名,如:ns.qhdlink.com.
注意:
1.一个域中可以有多个NS资源记录;
2.每个NS资源记录都必须要有一个A记录与之对应;
例如:
1.正常写法
qhdlink.com. 86400 IN NS ns1.qhdlink.com.
qhdlink.com. 86400 IN NS ns2.qhdlink.com.
2.使用宏继承的写法:
$Origin qhdlink.com.
$TTL 86400
IN NS ns1
IN NS ns2
MX记录:
name:当前域的域名;
value:当前域中某有效的邮件服务器的主机名;
注意:
1.一个域中,可以有多条MX资源记录;
2.每个MX资源记录都必须要有一条A记录与之对应;
例如:
qhdlink.com. 86400 IN MX 10 mail1.qhdlink.com.
@ IN MX 20 mail2
A记录:
name:域中某主机的FQDN或主机名称;
value:与主机名对应的IPv4地址;
例如:
www.qhdlink.com. 86400 IN A 192.168.1.1
www.qhdlink.com. 86400 IN A 192.168.1.2
www.qhdlink.com. 86400 IN A 192.168.1.3
www.qhdlink.com. 86400 IN A 192.168.1.4
www IN A 192.168.1.1
泛域名:*.qhdlink.com. IN A 1.2.3.4
直接域名:qhdlink.com. IN A 2.3.4.5
泛域名和直接域名都是防止用户写错名称而导致无法给出正确的解析结果;
CNAME记录:
name:别名的FQDN或简单的名称;
value:真正的名称的FQDN或其简单名称;
例如:
web.qhdlink.com. 86400 IN CNAME www.qhdlink.com.
web IN CNAME www
AAAA记录:规则与A记录一致;
ftp.qhdlink.com. 86400 IN AAAA ::1
PTR记录:
name:将IP地址反过来写,并在其后缀加反向域的标准后缀;所以其完整写法应该是:1.72.16.172.in-addr.arpa.
value:FQDN
例如:
1.72.16.172.in-addr.arpa. 86400 IN PTR www.qhdlink.com.
如果有全局宏定义的话:
1.72 IN PTR www www.qhdlink.com.
注意:
1.网络部分的地址和标准后缀可以省略;
2.PTR记录的value部分,必须写FQDN;
3.如果剩余的IP地址中的主机部分仍然是多段,主机部分依然需要反着写;
BIND软件:
BIND——Berkeley Internet Name Domain,ISC(isc.org)
bind-libs:为bind的其他应用程序提供共享库文件;
bind-utils:通用工具包,如:dig, host, nslookup等;
bind:主程序包,包括:DNS服务器程序(named),解析库,检测工具;
bind-chroot:设置伪根,启用监牢的模式;安全体现;
实现DNS协议的程序是BIND,BIND的服务器的主程序named;
named:DNS Server
53/udp:完成主机名查询;
53/tcp:完成区域传送;
bind:
主配置文件:/etc/named.conf
可以在此配置文件中使用include命令包含其他的配置文件;
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
声明区域;
/etc/named.root.key
主配置文件的格式:
1.注释方式:
//:单行注释;
/* ... */:任意内容注释;
2.分段配置的特点:
a.访问控制列表定义段:
acl ACL_NAME {...};
b.全局选项段:
options {...};
c.日志配置段:
logging {...};
d.区域配置段:
zone "ZONE_NAME" IN {...};
e.视图配置段:
view VIEW_NAME {...};
f.include包含段:
include /PATH/TO/SOME_CONFIG_FILE
全局配置段:
options {
listen-on port 53 { 127.0.0.1; 172.16.72.1; };
在启动DNS服务之后,named进程监听的IP地址;
directory "/var/named";
规定的解析库(区域数据库)的根目录;
allow-query { localhost; };
访问控制语句,允许哪些主机将查询请求发送至本服务器;默认为localhost,即只为服务器自身提供查询请求处理;
recursion yes;
全局开启递归查询;默认为所有客户端开启递归查询;
初学时,建议关闭dnssec功能;
dnssec-enable no;
dnssec-validation no;
dnssec-lookaside no;
};
测试工具:
dig,host,nslookup
dig命令:
dig - DNS lookup utility
dig [@Server] [-t RR_TYPE] [query_options]
@Server:表示为此次的查询请求使用指定的DNS服务器完成;如果不给,那么就读取/etc/resolv.conf中的nameserver配置项的值;
-t RR_TYPE:指定此次查询请求的资源记录类型;
查询选项:
+[no]trace:跟踪整个解析过程;
+[no]recurse:要求目标DNS服务器必须[不]进行递归查询;
反向解析查询:
dig -x IPADDR
模拟区域传送:
dig -t axfr DOMAIN_NAME [@Server]
host命令:
host [-t RR_TYPE] DOMAIN_NAME SERVER 【domain域名】 【RR_TYPE资源记录类型】
nslookup命令:
命令行工具+交互式命令:
命令行工具:nslookup DOMAIN_NAME
交互式命令:nslookup
> server IP_ADDR
指定此次查询使用的DNS服务器IP地址;
> set q=RR_TYPE
要查询的资源记录的类型;
> QUERY_NAME
压迫查询解析的主机名;
> set type=RR_TYPE
同set q=RR_TYPE
rndc命令:
DNS服务器端的控制命令;
remote name domain controller,远程名称域控制器;
953/tcp
rndc status:查看服务器端的运行状态;
rndc reload:通知服务器端程序重载配置为文件和区域文件;
DNS服务的配置:
1.基本的正向和反向区域的配置和解析;
2.主从服务器的设置;
3.子域和子域的委派;
4.转发器;
5.访问控制列表和视图;
基本的正向和反向区域的配置和解析
1.配置一个正向的区域:
1) 定义区域:/etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type {master|slave|forward|hint}; 主|从|转发|提示
file "ZONE_NAME.zone";
};
zone "qhdlink.com" IN {
type master;
file "qhdlink.com.zone";
};
2) 创建区域数据文件
/var/named/qhdlink.com.zone
注意修改权限:
# chown :named qhdlink.com.zone
# chmod o-r qhdlink.com.zone
$ORIGIN qhdlink.com.
$TTL 86400
@ IN SOA ns1.qhdlink.com. admin.qhdlink.com. (
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1.qhdlink.com.
MX 10 mx1.qhdlink.com.
ns1.qhdlink.com. IN A 172.16.72.1
www IN A 172.16.100.1
www IN A 172.16.100.2
www IN A 172.16.100.3
web IN CNAME www
mx1 IN A 172.16.100.4
3) 重载配置文件和区域文件,使配置生效;
a.检测语法是否正确:
named-checkconf FILE_PATH
检测named.conf及其辅助配置文件的语法正确与否;
named-checkzone "ZONE_NAME" FILE_NAME
检测域名和区域数据库文件是否对应和是否存在语法错误;
b.重载配置文件:
# rndc reload
# systemctl reload named.service
# service named reload(CentOS 6-)
2.配置一个反向的区域:
1) 定义区域:/etc/named.rfc1912.zones
zone "ZONE_NAME" IN {
type {master|slave|forward|hint};
file "ZONE_NAME.zone";
};
zone "16.172.in-addr.arpa" IN {
type master;
file "172.16.zone";
};
2) 创建区域数据文件
/var/named/172.16.zone
注意修改权限:
# chown :named 172.16.zone
# chmod o-r 172.16.zone
$ORIGIN 16.172.in-addr.arpa.
$TTL 86400
@ IN SOA ns1.qhdlink.com. admin.qhdlink.com. (
2017081001;serial
1H;refresh
15M;retry
1W;expire
1D);TTL
IN NS ns1.qhdlink.com.
1.72 IN PTR ns1.qhdlink.com.
1.100 IN PTR www.qhdlink.com.
2.100 IN PTR www.qhdlink.com.
3.100 IN PTR www.qhdlink.com.
4.100 IN PTR mx1.qhdlink.com.
3) 重载配置文件和区域文件,使配置生效;
a.检测语法是否正确:
named-checkconf
检测named.conf及其辅助配置文件的语法正确与否;
named-checkzone "ZONE_NAME" FILE_NAME
检测域名和区域数据库文件是否对应和是否存在语法错误;
b.重载配置文件:
# rndc reload
# systemctl reload named.service
# service named reload(CentOS 6-)
2.主从服务器:
注意:主从服务器都是区域级别的概念;
配置一个从区域:
ON slave:
1) 定义区域
zone "ZONE_NAME(域名)" IN {
type slave;
file "slaves/ZONE_NAME.zone";
masters { MASTER_IP; };
};
示例:
zone "qhdlink.com" IN {
type slave;
file "slaves/qhdlink.com.zone";
masters { 172.16.72.1; };
};
2) 检测并重载配置文件;
named-checkconf
rndc reload
On Master:
1.确保区域数据文件中为每个名称服务器都提供NS记录;
2.在正向区域文件中,需要为每个NS记录提供A记录;
3.为NS记录提供的A记录所指向的IP地址必须是从服务器的真实IP地址;
4.注意主从服务器的时间同步;
回顾:
BIND组成:
bind
bind-libs
bind-utils
bind-chroot
主配置文件:/etc/named.conf include包含辅助配置文件:
/etc/named.rfc1912.zones
主配置文件的格式:
acl acl_name {};
options {};
logging {};
zone
view
include file
named-checkconf [file_path]
dig
dig -t RR_TYPE @Server [Query options]
host
nslookup
正向和反向区域的配置:
$ORIGIN
$TTL
SOA
NS
A|PTR
CNAME
MX PRIORITY
主从服务器:
区域级别的概念
On slave:
zone "qhdlink.com" IN {
type slave;
file "slaves/qhdlink.com.zone";
masters { 172.16.72.1; };
};
On master:
1.提供足够的NS记录;
2.为每个NS记录提供一个A记录;
3.明确允许从服务器可以进行区域传送;
转发器:
1.区域转发:
专门针对于某个特定的区域,实现的转发器转发;
定义在/etc/named.rfc1912.zones文件中的zone声明中;
zone "baidu.com" IN {
type forward;
forward {first|only};
forwarders { 172.16.72.1; };
};
first:首先转发,当指定的转发器无响应时,再自行迭代;
only:只使用转发器进行转发,不执行自行迭代;
2.全局转发:
针对那些没有通过zone在本地定义的区域的查询请求,全部转发给转发器,请求转发器予以递归查询;
/etc/named.conf
options {
...
forward {first|only};
forwarders { SERVER_IP; };
...
};
子域委派授权:
在父域的区域文件中直接授权即可;
qhdlink.com区域的文件/var/named/qhdlink.com.zone
tech.qhdlink.com. IN NS ns.tech.qhdlink.com.
ns.tech.qhdlink.com. IN A 172.16.69.1
在子域的NS服务器上,直接创建子域的区域文件,管理资源记录即可;
/etc/named.rfc1912.zones
zone "tech.qhdlink.com" IN {
type master;
file "tech.qhdlink.com.zone";
};
touch /var/named/tech.qhdlink.com.zone
chown :named /var/named/tech.qhdlink.com.zone
chmod 640 /var/named/tech.qhdlink.com.zone
如果想要从子域的NS服务器解析父域的资源记录,则需要转发器的定义;
定义区域转发:
在子域的NS服务器上的/etc/named.rfc1912.zones中定义父域转发器;
zone "qhdlink.com" IN {
type forward;
forward first;
forwarders { 172.16.72.1; };
};
定义全局转发:
在子域的NS服务器的主配置文件/etc/named.conf文件中定义:
options {
...
forward first;
forwarders { 172.16.72.1; };
...
};
总结:
1.可以通过委派授权,使父域可以直接找到子域的NS服务器,从而解析子域中的资源记录;
2.可以通过区域转发或全局转发,是子域能够通过父域的NS服务器,查找父域中的资源记录;
bind中的基础安全相关的配置:
acl:访问控制列表,将一个或多个IP地址,归并为一个命名的集合,随后可以通过定义好的acl的名称对该集合内的所有的IP地址进行统一的调用或设置;
bind有四个内置的acl:
none:不包括任何一个IP地址;
any:包括所有的IP地址;
local:本机的IP地址;
localnet:包括本机IP地址所在的网段内的所有IP地址;
172.16.72.1/16 172.16.0.0/16
定义acl的语法:
acl acl_name {
[!] ip;
[!] network/prefix;
};
acl mynet {
172.16.0.0/16;
127.0.0.1;
! 172.16.100.100;
};
注意:
1.在调用acl之前,确保其已经被定义;
2.通常在主配置文件/etc/named.conf中定义,并且放在options之前;
经常与acl配合使用的访问控制指令:
allow-query { acl|IP|Network; };
允许向本服务器发起查询请求的主机,即:白名单;
allow-transfer { acl|IP|Network; };
允许哪些从服务器可以从本机进行区域传送;默认是所有主机都可以;建议应该只允许从服务器完成此项工作,白名单;
allow-recursion { acl|IP|Network; };
允许哪些主机向当前DNS服务器发起递归查询请求;
allow-update { acl|IP|Network; };
DDNS,Dynamic DNS;
允许哪些主机动态更新区域数据库中的资源记录;因为其不安全,所以应该禁用;
视图:view
定义视图:
view VIEW_NAME {
match_clients { acl; };
zone
zone
zone
...
};
注意:一旦在bind中启用的视图,则所有的zone都必须定义在视图中;