BIND软件: BIND软件的主要rpm包: bind:主程序包,包括: DNS服务程序(named) 解析库 检测工具; bind-libs:Bind软件的共享库程序包; bind-utils:通用工具包,包括各种服务测试工具,如:dig, host, nslookup等; bind-chroot:设置伪根,启用监牢模式;bind-9+版本中出现的安全功能实现;
应用层协议是DNS协议;DNS,Domain Name System;
DNS的应用程序实现:BIND;
BIND程序的服务主程序:named;
53/TCP:完成区域传送;
53/UDP:完成主机名的解析查询;
953/TCP:rndc程序的监听端口;
IETF:dnssec标准;dnssec,DNS安全扩展插件;
Bind软件的组成:
主配置文件:/etc/named.conf
辅助配置文件:可以在主配置文件中利用include命令包含其他配置文件;
/etc/named.rfc1912.zones:声明了区域;
安全认证密钥文件:
/etc/named.iscdlv.key
/etc/named.root.key
主程序:/usr/sbin/named
远程管理程序:/usr/sbin/rndc
配置文件检测工具:
/usr/sbin/named-checkconf
区域文件检测工具:
/usr/sbin/named-checkzone
日志文件:
/var/log/named.log
区域文件的存放目录:
/var/named
存放辅助区域文件的目录:
/var/named/slaves
主配置文件:/etc/named.conf
文件格式:
格式特点:分段式配置格式;
1.配置行的注释方式:
//:单行注释;
/*...*/:任意内容注释;
#:单行注释;
2.主配置文件中的常用配置段:
1) 访问控制列表配置段:
acl string { address_match_element; ... };
2) 全局选项配置段:
options { statements; ... };
3) 日志配置段:
logging { statements; ... };
4) 区域配置段:
zone string optional_class { statements; ... };
5) 视图配置段:
view string optional_class { statements; ... };
6) include命令:
include /PATH/TO/SOME_CONFIG_FILE;
全局配置段:
options {
listen-on port 53 { 127.0.0.1; 172.16.72.2; };
//在启动DNS服务时,named进程所监听的套接字;
directory "/var/named";
//定义解析库(区域数据库文件)的根目录;在主配置文件中添加此配置语句之后,可以在后面定义区域数据库时使用相对路径;
allow-query { localhost; };
//访问控制语句,意思是允许本服务器处理哪些主机发送来的解析查询请求;默认为localhost,即:只允许本机以127.0.0.1发送查询请求;
recursion yes;
//允许本服务器为所有查询请求做递归查询;
allow-recursion { 172.16.72.1/16; };
访问控制指令,允许为哪些客户端做递归查询;
pid-file "/run/named/named.pid";
//定义存放主进程pid文件的路径;
};
rndc命令:Remote Name Domain Controller, 远程名称域控制器;
953/TCP
常用的子命令:
status:查看服务器端的允许状态;
reload:通知服务器重载配置文件和区域文件,无需重新启动服务;
flush:清空服务器端的DNS缓存;
stop:较安全的停止DNS服务;
区域配置段:
zone "FQDN" IN {
//声明一个区域名称;此名称要是有FQDN表示;如:qhdlink.com
type master;
区域的类型:
master:主区域;
slave:辅助区域;
hint:提示区域,仅能在根域上设置;
forward:转发区域;
file "named.localhost";
存放与该域有关的解析信息的数据库文件的路径;如果是相对路径,则相对于主配置文件的全局配置段中的"directory"指令所定义的目录而言;
注意:文件的所有权和权限设置必须能够让named用户有读取权限;
allow-update { none; };
访问控制指令,允许哪些客户端对数据库内容进行动态更新;主要用于DDNS;
allow-transfer { 172.16.72.1; };
访问控制指令,允许哪些主机能够从当前服务器进行区域传送;
allow-query { address_match_element; ... };
访问控制指令,允许哪些主机进行区域内的解析查询;
allow-notify { address_match_element; ... };
访问控制指令,允许哪些主服务器向当前服务器发送区域变更通知;
};
正向查找区域声明示例:
zone "ytc.com" IN { type master; file "ytc.zone"; allow-update { none; }; allow-transfer { none; }; };
创建数据库文件,修改权限并添加相应资源记录;
/var/named/ytc.zone
检测区域文件的语法格式:
named-checkzone FQDN /PATH/TO/ZONE_FILE
例:# named-checkzone ytc.com /var/named/ytc.zone
对主配置文件或区域数据库文件进行修改之后,并不会立即生效;只有在重载配置文件和区域文件之后,配置才生效;重载配置文件的方法:
1.systemctl reload named.service
2.rndc reload
3.systemctl restart named.service(不推荐)
4.service named reload(CentOS 6-)
注意:对于应用程序服务进程重载配置文件的操作,如果能使用reload,就使用reload,不要轻易执行restart命令;
客户端测试工具:dig, host, nslookup dig命令: dig - DNS lookup utility 格式: dig [@server] [-t type] [-x addr] [queryopt...]
@server:表示此次查询请求使用指定的DNS服务器,而不使用/etc/resolve.conf文件中定义的nameserver;
-t RR_type:指定此次查询的资源记录的类型;
-x addr:进行反向解析查询时,用于指定IP地址;
queryopt:查询选项:
+[no]recurse:要求目标服务器必须[不]以递归方式进行查询;
+[no]trace:[不]跟踪显示整个查询请求的解析过程;
模拟区域传送:
dig -t axfr|ixfr DOMAIN_NAME_FQDN
host命令:
host - DNS lookup utility
格式:
host [-t RR_type] {name} [server]
示例:
~]# host -t A www.ytc.com 172.16.1.12
nslookup命令:
交互式命令;
server IP_ADDR:指定使用哪个DNS服务器进行查询;
set q=RR_type:指定此次查询的资源记录的类型及相关答案;
set type=RR_type:功能同set q=RR_type;
FQDN | IP_ADDR:根据FQDN进行正向查询解析或根据IP_ADDR进行反向查询解析;
命令行工具;
nslookup FQDN NS_SRV
示例:
~]# nslookup www.ytc.com 172.16.72.2
配置反向解析区域:
反向域的FQDN:172.16.0.0/16网段的反向域名:
16.172.in-addrp.arpa.
反向查找区域示例:
zone "16.172.in-addr.arpa" IN { type master; file "172.16.local"; allow-transfer { none; }; };
正向区域库文件配置示例:
$ORIGIN ytc.com.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018041101;
1H;
20M;
2W;
1D);
IN NS ns1.ytc.com.
IN MX 10 mail.ytc.com.
ns1 IN A 172.16.1.11
mail IN A 172.16.1.11
www IN A 172.16.100.100
www IN A 172.16.100.101
web.ytc.com. IN CNAME www.ytc.com.
ftp.ytc.com. IN CNAME web.ytc.com.
反向区域配置示例:
$ORIGIN 16.172.in-addr.arpa.
$TTL 86400
@ IN SOA ns1.ytc.com. root.ytc.com. (
2018041102;
2H;
10M;
2W;
5H);
IN NS ns1.ytc.com.
11.1 IN PTR ns1.ytc.com.
11.1 IN PTR mail.ytc.com.
50.50 IN PTR www.ytc.com.
51.50 IN PTR www.ytc.com.
主从DNS服务器:(主辅) 注意: 1.主服务器和辅助服务器都是域级别的概念; 2.必须保证主辅服务器之间的网络通信的顺畅以及时间同步; 3.为了确保所有的名称服务器都能被识别和使用,需要在区域数据库中为所有的名称服务器添加NS资源记录; 4.区域数据库中每条NS资源记录都必须有A记录与之对应; 5.从服务器上可以默认将复制而来的数据库文件保存至/var/name/slaves目录中; 6.在主服务器上应该通过访问控制指令允许从服务器进行区域传送;同时从服务器要指定主服务器;
从服务器配置示例: zone "ytc.com" IN { type slave; masters { 172.16.1.12; }; file "slaves/ytc.slave.zone"; allow-transfer { none; }; };
zone "16.172.in-addr.arpa" IN { type slave; masters { 172.16.1.12; }; file "slaves/172.16.slave.local"; allow-transfer { none; }; };
转发器: 全局转发: 对于凡是不能由本服务器管理的域的请求,全部以转发的方式由指定的服务器进行递归查询;
在bind的主配置文件的全局配置段中定义;
options {
forward first;
forwarders { FORWARD_SERVER_IP_ADDR; };
};
在A服务器上定义ytc.com域; zone "ytc.com" IN { type master; file "ytc.zone"; allow-transfer { 172.16.1.12; } ; };
配置库文件: $ORIGIN ytc.com. $TTL 86400 @ IN SOA ns1.ytc.com. root.ytc.com.( 2018041111; 1H; 10M; 3D; 4H); IN NS ns1 ns1 IN A 172.16.1.11 www IN A 1.1.1.2
在B服务器上,仅仅在全局配置段添加转发器; zone "ytc.com" IN { type forward; forward only; forwarders { 172.16.1.11; }; };
再用客户端测试: dig @172.16.1.12 -t A www.ytc.com
区域转发:
专门针对于某个特定的域的请求,如果不能给出权威答案,则转发至指定的服务器进行递归查询;
在bind的主配置文件的区域配置段中定义;
区域转发配置示例:
在A服务器上定义ytc.com.cn域; zone "ytc.com.cn" IN { type master; file "ytc.cn.zone"; allow-transfer { none; }; };
还需要定义该域的区域数据库:/var/name/ytc.cn.zone
在B服务器上定义qhdlink.com.cn域的区域转发器: zone "ytc.com.cn" IN { type forward; forward only; forwarders { 172.16.1.11; }; };
forward first|only;
first:首先转发,当转发器中指定的服务器无响应时,再自行迭代查找;
only:只使用转发器中指定的服务器进行递归查询,如果无法获得答案,则直接返回否定答案;自身不再迭代查找;
注意:任何形式的请求转发,都必须依靠被指定的服务器允许自身做递归查询;
子域委派授权: 将子域的管理权授权给子域中的名称服务器;父域中不保存任何子域数据库中资源记录;但为了能够成功授权,需要添加一条NS记录,指向子域的名称服务器;
子域委派授权的示例: 在A服务器上维护父域ytc.org域; 在A服务器上的ytc.org域的数据库中添加NS记录,以实现委派授权;
$ORIGIN ytc.org. $TTL 86400 @ IN SOA ns1.ytc.org. root.ytc.org. ( 2018041103; 2H; 5M; 5D; 1D); IN NS ns1.ytc.org. qhd.ytc.org. IN NS ns1.qhd.ytc.org. ns1 IN A 172.16.1.11 ns1.qhd.ytc.org. IN A 172.16.1.12 www IN A 1.2.1.1
在B服务器上维护子域qhd.ytc.org域;
在B服务器上声明子域并创建数据库文件:
zone "qhd.ytc.org" IN { type master; file "qhd.ytc.org.zone"; allow-transfer { none; }; };
$ORIGIN qhd.ytc.org. $TTL 86400 @ IN SOA ns1.ytc.org. root.qhd.ytc.org. ( 201801104; 2H; 2M; 5D; 10H); IN NS ns1 ns1 IN A 172.16.1.12 www IN A 11.11.22.22
注意:子域的委派授权,实际上是为客户端提供迭代查询机制;
Bind中的基础安全相关的配置: 1.访问控制列表: acl,Access Control List,将一个或多个IP地址,归并为一个集合,随后可以通过实现定义好的名称对集合中的多个IP地址进行统一调用或设置;
bind内部有四个内置的acl:
any:包括所有的IP地址,整个IP地址栈中的所有有效IP地址;
none:不包括任何一个IP地址;
local:仅包含本地已经配置生效的所有IP地址;
localnet:包含本机所有已经配置并生效的IP地址所在的网段的IP地址;
定义acl的语法格式:
acl acl_name {
[!] ip_addr;
[!] network/prefix;
};
示例:
acl myacl {
172.16.0.0/16;
! 172.16.100.100;
172.17.100.101;
};
注意:
1.在调用ACL之前,确保事先已经定义了指定的ACL;
2.通常在主配置文件/etc/named.conf中定义ACL,建议将自定义的ACL放置在配置文件的最前面,以保证后面的操作可以成功调用到此ACL;
所有的allow*语句,都是可以调用ACL的,包括:
allow-update { acl_name; };
allow-transfer { acl_name; };
allow-recursion { acl_name; };
allow-query { acl_name; };
allow-notify { acl_name; };
...
视图的配置:View; 实现智能DNS解析服务;根据客户端发送的请求报文中的某个封装信息,判断客户端的网络类型和服务类型,从而能够提供最适合此用户使用的解析结果;
定义视图:
view VIEW_NAME {
match_clients { acl; };
zone "DOMAIN1" IN {
...
};
zone "DOMAIN2" IN {
...
};
...
};
注意:一旦在Bind中启用视图功能,在所有的zone的声明必须都设置在视图中;
配置示例:
1.给DNS服务器配置两个不同网段的IP地址;
eno16777736:172.16.72.2/16
eno16777736:0:100.100.100.1/24
2.修改主配置文件:
1) 创建一个intranet的ACL;
acl intranet { 172.16.0.0/16; 192.168.1.0/24; 10.1.1.0/24; }; 2) 定义视图:将所有的zone放置到视图中; view intranet { match-clients { intranet; }; zone "." IN { type hint; file "named.ca"; };
zone "ytc.com" IN { type master; file "ytc.intra.zone"; allow-update { none; }; allow-transfer { 172.16.1.11; }; }; };
view internet { match-clients { any; };
zone "ytc.com" IN { type master; file "ytc.inter.zone"; allow-update { none; }; allow-transfer { 172.16.1.11; }; }; };
/var/named/qhdlink.intra.zone
$ORIGIN ytc.com. $TTL 86400 @ IN SOA ns1.ytc.com. root.ytc.com. ( 2018040701;Serial 1H;Refresh 15M;Retry 1W;Expire 1D);Minimal TTL IN NS ns1.ytc.com. ns1 IN A 172.16.1.12 www IN A 172.16.100.100
/var/named/ytc.inter.zone
$ORIGIN ytc.com. $TTL 86400 @ IN SOA ns1.ytc.com. root.ytc.com. ( 2018040701;Serial 1H;Refresh 15M;Retry 1W;Expire 1D);Minimal TTL IN NS ns1.ytc.com. IN MX 10 mail.ytc.com. ns1 IN A 100.100.100.1 www IN A 61.72.178.82
利用不同的客户端进行测试: client1:172.16.1.11/16 --> www.ytc.com ==> 172.16.100.100 cleint2:100.100.100.100/24 --> www.ytc.com ==> 61.72.178.82
总结:www.ytc.com域名的解析过程: 客户端首选DNS服务器的名称解析过程: 1.客户端请求解析的内容是服务器管理和维护的内容: client --> First DNS --> client 答案:权威答案;
2.客户端请求解析的内容不是服务器管理和维护的内容:
1) 如果此服务器能够为客户端实施递归查询:
client --> First DNS --> NS(.) --> FirstDNS {NS(com)}
First DNS --> NS(com) --> FirstDNS {NS(ytc)}
First DNS --> NS(ytc) --> Answer(www.ytc.com)
First DNS --> client
迭代查询的过程;
2) 如果此服务器不能为客户端实施递归查询:
直接返回否定答案;