BIND
2018-04-13 21:58
148 查看
BIND软件:
BIND软件的主要rpm包:
bind:主程序包,包括:
DNS服务程序(named)
解析库
检测工具;
bind-libs:Bind软件的共享库程序包;
bind-utils:通用工具包,包括各种服务测试工具,如:dig, host, nslookup等;
bind-chroot:设置伪根,启用监牢模式;bind-9+版本中出现的安全功能实现;
zone "ytc.com" IN {
type master;
file "ytc.zone";
allow-update { none; };
allow-transfer { none; };
};
客户端测试工具:dig, host, nslookup
dig命令:
dig - DNS lookup utility
格式:
dig [@server] [-t type] [-x addr] [queryopt...]
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; };
};
转发器:
全局转发:
对于凡是不能由本服务器管理的域的请求,全部以转发的方式由指定的服务器进行递归查询;
在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
在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; };
};
子域委派授权:
将子域的管理权授权给子域中的名称服务器;父域中不保存任何子域数据库中资源记录;但为了能够成功授权,需要添加一条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
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地址进行统一调用或设置;
视图的配置:View;
实现智能DNS解析服务;根据客户端发送的请求报文中的某个封装信息,判断客户端的网络类型和服务类型,从而能够提供最适合此用户使用的解析结果;
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
答案:权威答案;
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) 如果此服务器不能为客户端实施递归查询: 直接返回否定答案;
相关文章推荐
- Bind Mounts and File System Mount Order
- JQuery中绑定事件(bind())和移除事件(unbind())
- apache启动报错(98)Address already in use: make_sock: could not bind to address [::]:80
- 使用BIND安装智能DNS服务器(三)---添加view和acl配置
- Tomcat启动产生错误严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048] ??????
- (二)跟我一起玩Linux网络服务:BIND的自动部署(附上完整的代码)
- 服务启动时log4j提示Could not bind factory to JNDI
- jquery阻止冒泡事件:$('span').bind("click",function(event){event.stopPropagation();})(有用源)
- 使用jfinal-routebind出现bug导致修改代码后jetty无法正常重启
- Spark:java.net.BindException: Address already in use: Service 'SparkUI' failed after 16 retries!
- DNS BIND之dnsjava java客户端操作
- JQuery中事件one、bind、unbind、live、delegate、on、off、trigger、triggerHandler的各种使用区别
- javascript Function.prototype.bind
- Address already in use: make_sock: could not bind to address [::]:80
- 理解 std::function 和 function::bind 的用法
- Android 之 bindServer服务
- tomcat运行时候出现java.net.BindException: Address already in use: JVM_Bind错误解决方法
- tomcat使用过程中Socket bind failed问题的解决
- Jquery绑定事件(bind和live的区别)
- bind udp 数据处理