一、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程序的监听端口;
配置文件:
主配置文件:/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
3.全局配置段:
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发送查询请求,allow-query { any; }则可以处理所有主机发来的解析查询请求
recursion yes;
//允许本服务器为所有查询请求做递归查询,建议关闭,使用条件递归
allow-recursion { 172.16.72.1/16; };
//访问控制指令,允许为哪些客户端做递归查询;
pid-files "/run/named/named.pid"
//定义存放主进程pid文件的路径
};
4.配置区域段:
zone "FQDN" IN {
//声明一个区域名称;此名称要是有FQDN表示,如:ppp213.com
type master;
/*区域的类型
master:主区域,主服务器
slave:辅助区域,从区域
hint:提示区域,仅能在根域上设置
file "name.localhost"
forward:转发区域*/
file "named.localhost"
//存放与该域有关的解析信息的数据库文件的路径;如果是相对路径,则相对于主配置文件的全局配置段中的"directory"指令所定义的目录而言;
//注:文件的所有权和权限设置必须能够让named用户有读取权限;
allow-update { none; };
//访问控制指令,允许哪些客户端对数据库内容进行动态更新:主要用于DDNS;
allow-transfer { 172.16.0.0/16; };
//允许哪些主机能够从当前服务器进行区域传送;
allow-query { address_match_element; ... };
//访问控制指令,允许哪些主机进行区域内的解析查询
allow-notify { address_match_element; ... };
//访问控制指令,允许哪些主服务器向当前服务器发送区域变更通知;
};
例:在主配置文件中添加区域段
zone "ppp213.com" IN { type master; file "ppp213.zone"; allow-update { none; }; allow-transfer { none; }; };
三、创建资源记录的一般步骤
1.创建数据库文件,修改权限并添加相应资源记录:
vim /var/named/ppp213.zone
示例:
@ IN SOA ns1.ppp213.com. root.ppp213.com. (2018040701 1H 15M 1W 1D) IN NS ns1 IN MX 10 mail.ppp213.com. ns1 IN A 192.168.109.136 mail IN A 192.168.109.136 www IN A 192.168.109.100 www IN A 192.168.109.101 web IN CNAME www ftp IN CNAME web * IN A 192.168.109.136 ppp213.com. IN A 192.168.109.136
2.检测区域文件的语法格式:
named-checkzone FQDN /PATH/TO/ZONE_FILE
3.对主配置文件或区域数据库文件进行修改之后并不会立即生效;只有在重新加载配置文件和区域文件之后文件才生效
重载配置文件的方法:
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
1.dig命令
格式: dig [@server] [-t type] [-x addr] [queryopt]
@server:表示此次查询请求使用指定的DNS服务器而不使用在/etc/resolve.conf文件中定义的nameserver;
-t RR_type:指定此次查询的资源记录的类型:
-x addr:进行反向解析查询时,用于指定IP地址:
queryopt:查询选项:
+[no]recurse:要求目标服务器必须[不]以递归的方式进行查询
+[no]trace:[不]跟踪显示整个查询请求的解析过程
模拟区域传送(需要在主配置文件区域段中修改Allow-transfer{ };)
dig -t axfr|ixfr DOMAIN_NAME_FQDN
2.host命令
host [-t RR_type ] {name} [server]
格式:
host [-t RR_type] {name} [server]
host -t A www.ppp213.com 192.168.109.136
3.nslookup命令
交互式命令:
server IP_ADDR:指定使用哪个DNS服务器进行查询
set q=RR_type:指定此次查询的资源记录的类型及相关答案
set type=RR_type:同q
FQDN | IP_ADDR :根据FQDN进行正向查询解析或根据IP_ADDR进行反向查询解析;
命令行工具:
nslookup FQDN NS_SERV
示例:
nslookup www.ppp213.com 192.168.109.136
五、配置反向解析区域
反向域的FQDN:
172.16.0.0/16 反向域名: 16.172.in-addr.arpa
添加区域段
zone "109.168.192.in-addr.arpa" IN { type master; file "192.168.109.local"; allow-transfer { none; }; };
创建192.168.109.local文件(同时修改权限)
$ORIGIN 109.168.192.in-addr.arpa. $TTL 86400 @ IN SOA ns1.ppp213.com. root.ppp213.com. (2018041301 1H 15M 1W 6H) IN NS ns1.ppp213.com. 136 IN PTR ns1.ppp213.com. 136 IN PTR mail.ppp213.com. 100 IN PTR www.ppp213.com. 101 IN PTR www.ppp213.com.
检测:
named-checkzone 109.168.192-addr.arpa 192.168.109.local
rndc reload
dig -x 192.168.109.136
六、主从DNS服务器:(主辅)
1.注意事项:
1)主服务器和辅助服务器都是域级别的概念
2)必须保证主辅服务器之间的网络通信的顺畅以及时间同步
3)为了确保所有的名称服务器都能被识别和使用,需要在区域数据库中添加所有的名称服务器的NS资源记录
4)区域数据库中每条ns资源记录都必须有A记录与之对应
5)从服务器上可以默认将复制而来的数据库文件保存至/var/named/slaves/目录中
6)在主服务器上应该通过访问控制指令允许从服务器进行区域传送,同时从服务器要指定主服务器
2.配置从DNS服务器
将主服务器(192.168.109.136)的对应区域段修改为允许从服务器(192.168.109.2)区域传送
allow-transfer { 192.168.109.2; };:
将从服务器的全局配置段修改为允许解析查询
allow-query { any; };
在从服务器中添加区域段:
zone "ppp213.com" IN { type slave; masters { 192.168.109.136; }; file "slaves/ppp213.slave.zone"; allow-transfer { none; }; }; zone "109.168.192.in-addr-apra" IN { type slave; masters { 192.168.109.136; }; file "slaves/192.168.109.slvae.local"; allow-transfer { none; }; };
之后在从服务器使用dig进行名称解析时,会自动调用主服务器的数据库,注意将主辅服务器的防火墙关闭
iptables -F; setenforce 0
七、转发器:
全局转发:对于凡是不能由本服务器管理的域的请求,全部以转发的方式由指定的服务器进行递归查询;
在bind的主配置文件的全局配置段中定义;
options { forward first; forwarders { 192.168.109.136; }; };
区域转发:专门针对于某个特定的域的请求,如果不能给出权威答案,则转发至指定的服务器进行递归查询;
在bind的主配置文件的区域配置段中定义;
zone "ppp213.com" IN { type forward; //类型为转发区域 forward only; //only:只转发,不找本地。first:先转发,再找本地 forwarders; { 192.168.109.136; }; };
八、子域委派授权
将子域的管理权授权给子域中的名称服务器;父域中不保存任何子域数据库中资源记录;但为了能够成功授权,需要添加一条NS记录,指向子域的名称服务器;
在子域名称服务器(192.168.109.2)中添加区域段:
zone "pp.ppp213.com" IN { type master; file "pp.ppp213.com.zone"; allow-transfer { none; }; };
创建pp.ppp213.com.zone文件
$ORIGIN pp.ppp213.com. $TTL 86400 @ IN SOA ns1.pp.ppp213.com. root.pp.ppp213.com. ( 2018041301 3H 30M 10D 8H ) IN NS ns1 ns1 IN A 192.168.109.2 www IN A 1.2.3.4
在父域名称服务器(192.168.109.136)中,在ppp213.zone文件添加两行
pp.ppp213.com. IN NS ns1.pp.ppp213.com. ns1.pp.ppp213.com. IN A 192.168.109.2
此时在其他服务器使用
dig -t a www.pp.ppp213.com @192.168.109.136
可以得到 1.2.3.4 的结果
九、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 { 192.168.109.136/24; ! 192.168.109.2; 192.168.109.3; };
注意:
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; };
...