BIND高级应用
来源:互联网 发布:安卓效率软件 编辑:程序博客网 时间:2024/06/17 16:24
上一篇我们介绍了BIND的客户端(dig,host,nslookup),BIND的正向反向解析,主辅DNS服务器配置及其传送,以及rndc的简单介绍。这一篇来介绍bind的高级应用: 子域授权,转发域,ACL,视图(view)
实验环境:3台CentOS 7.4 x64虚拟机(selinux和firewall已关闭)
说明:只作正向解析
Domain Name: example.com. 10.0.0.0/24 主DNS服务器: mster.example.com. 10.0.0.10 辅DNS服务器: slave.example.com. 10.0.0.11 WEB服务器: www.example.com. 10.0.0.10,10.0.0.11 FTP服务器: ftp.example.com. CNAME www.example.com MX服务器: mx.example.com. 10.0.0.10 #############################规划子域####################################### 子域:ops.example.com. 子域DNS:ns1.ops.example.com. 10.0.0.12 WEB服务器:www.ops.example.com. 10.0.0.12 POP3服务器:pop3.ops.example.com. CNAME www.ops.example.com.
BIND子域授权
1.DNS服务器的主辅配置(只做正向解析)
DNS服务器的主辅配置上一篇已做介绍,这里不再说明。详情请参考BIND的安装与配置
主DNS配置好后,example.com区域文件如下所示
辅助DNS服务器的区域文件是从主DNS服务器复制过去的,因此辅助DNS服务器的区域文件与主DNS服务器是一样的
[root@slave ~]# ll /var/named/slaves/example.com.zone -rw-r--r-- 1 named named 592 Dec 12 19:18 /var/named/slaves/example.com.zone
2.划分子域
根据规划,划分的子域为ops.example.com. ,在10.0.0.12这台主机上,配置子域的区域解析文件
(1)配置子域区域的数据信息
[root@ops ~]# vim /etc/named.rfc1912.zoneszone "ops.example.com" IN { type master; file "ops.example.com.zone"; allow-update { none; };};
(2)创建子域区域数据文件
[root@ops ~]# vim /var/named/ops.example.com.zone$TTL 86400@ IN SOA ns1.ops.example.com. admin.ops.example.com. ( 2017121201 1D 1H 1W 3H ) IN NS ns1ns1 IN A 10.0.0.12www IN A 10.0.0.12pop3 IN CNAME www
(3)更改子域区域解析库文件的权限为640,属主为root,属组为named
[root@ops ~]# chmod 640 /var/named/ops.example.com.zone [root@ops ~]# chown :named /var/named/ops.example.com.zone
(4)检测子域配置文件及子域区域文件是否存在语法错误(语法检查没问题了别急着启动或重载named服务,需要先到父域DNS上完成授权)
[root@ops ~]# named-checkconf [root@ops ~]# named-checkzone "ops.example.com" /var/named/ops.example.com.zone zone ops.example.com/IN: loaded serial 2017121201OK
3.完成授权
(1)在主DNS服务器(10.0.0.10)上完成子域授权,添加子域相应的NS和A记录
[root@master ~]# vim /var/named/example.com.zone
(2)检查区域文件是否有语法错误并重新加载主DNS的区域文件
[root@master ~]# named-checkzone "example.com" /var/named/example.com.zone zone example.com/IN: ops.example.com/NS 'ns1.ops.example.com' (out of zone) has no addresses records (A or AAAA)zone example.com/IN: loaded serial 2017121202OK[root@master ~]# rndc reloadserver reload successful
这里会报一个区域外的NS没有A或者AAAA的错误,并无影响
(3)子域DNS服务器启动或者重载named服务
[root@ops ~]# rndc reloadserver reload successful
4.验证
可以看出父域可以解析子域,那么子域能否解析父域呢?答案是不能,如下图
结论:授权是自上而下的,父域知道子域的位置,而子域并不知道父域的位置
子域要如何知道父域所在位置?通过转发
DNS转发
1.转发的过程:
(1)当本地DNS服务器(也是转发器)收到客户端查询时,它会尝试使用本地的缓存或区域解析该查询 (2)如果不能使用本地数据解析查询,此时它作为客户端,会将查询转发给外网DNS服务器,并等待其应答 (3)外网DNS服务器接收到的查询请求是递归查询,此时,它自己需要向外层层迭代找到最终答案返回给转发器(此时转发器作为DNS客户端) (4)转发器将外网DNS返回的查询结果送到客户端(非权威答案),完成解析过程
注: 接受转发的服务器需要能够为请求者做递归,即在接受转发的服务器的named的主配置文件(/etc/named.conf)中的 “recursion”选项必须为 “yes”
2.转发的类型
转发分全局转发和区域转发两种,它们的定义如下
(1)全局转发在主配置文件/etc/named.conf的Options选项中添加如下内容Options { forward { first|only }; <==first表示优先转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 ;only表示仅转发 fowwarders { IP; }; <==指明转发器的ip };(2)区域转发在区域配置文件/etc/named.rfc1912.zones中添加如下内容zone "ZONE_NAME" IN { type forward; <==区域类型为转发 forward { first|only }; forwarders { IP; } }
下面演示定义区域转发,使其子域能解析父域
(1)确保主DNS服务器开启了允许递归
[root@master ~]# vim /etc/named.confrecursion yes;
(2)编辑子域DNS服务器的区域配置文件,添加如下内容
[root@ops ~]# vim /etc/named.rfc1912.zoneszone "example.com" IN { type forward; forward only; forwarders { 10.0.0.10; };};
(3)子域DNS服务器重载配置文件并刷新DNS缓存
[root@ops ~]# rndc reloadserver reload successful[root@ops ~]# rndc flush
(4)测试
注意:无论是配置子域授权还是转发,请务必关闭dnssec,即主配置文件中(/etc/named.conf)的选项“dnssec-enable”和“dnssec-validation ”均为“no”
ACL功能
使用acl能够配置bind中的相关安全设置,acl就是把一个或多个地址归并为一个集合,并通过一个统一的名称调用,其格式为:
acl “ACL_NAME { address_match_element; …};
bind定义了四个内置的acl
none: 没有一个主机 any: 任意主机 local: 本机 localnet: 本机的IP同掩码运算后得到的网络地址
常用的控制指令有以下4个
allow-query {}: 允许查询的主机(白名单) allow-transfer {}:允许区域传送的主机(白名单) allow-recursion {}: 允许递归的主机 allow-update {}: 允许更新区域数据库中的内容
注意:只能先定义,后使用。因此,其一般定义在配置文件中options的上面
下面演示在子域DNS上配置ACL,只允许本机地址127.0.0.1查询ops.example.com
(1)定义acl
[root@ops ~]# vim /etc/named.confacl allow_query_net { 127.0.0.1; };
(2)修改区域配置文件/etc/named.rfc1912.zone,应用acl
(3)重载配置文件
[root@ops ~]# rndc reloadserver reload successful
(4)验证
视图(view)
view将请求者根据其来源进行分类,分类后实现使用不同的区域解析库来解析对某区域主机的请求。一个bind服务器可定义多个view,每个view中可定义一个或多个zone。通过view语句可以完成DNS的智能解析功能,其语法如下
view "VIEW_NAME" { match-clients { address_match_list }; match-destinations { address_match_list }; match-recursive-only yes|no; view_option;... zone_statement;... };
下面来演示view的应用
在10.0.0.10-10.0.0.12(NAT模式)这3台主机上都添加一块网卡 ,对应增加的地址为172.16.0.10-172.16.0.12(仅主机模式),NAT模式是将物理地址转化为10.0.0.1访问DNS,仅主机模式时将物理机的地址转化为172.16.0.1访问DNS
(1)在10.0.0.10主机上配置acl和view
编辑/etc/named.conf文件,清空其原有内容,加入如下内容
[root@master ~]# vim /etc/named.confoptions { directory "/var/named";};acl internal { 172.16.0.0/24;};acl external { 10.0.0.0/24;};view internal { match-clients { internal; }; recursion yes; zone "example.com" IN { type master; file "internal.example.com.zone"; };}; view external { match-clients { external; }; recursion yes; zone "example.com" IN { type master; file "external.example.com.zone"; };};
(2)创建internal和external访问example.com的正向区域解析文件
[root@master ~]# vim /var/named/internal.example.com.zone
[root@master ~]# vim /var/named/external.example.com.zone
(3)修改这两个文件权限为640,属主为root,属组为named
[root@master ~]# chmod 640 /var/named/{internal,external}.example.com.zone[root@master ~]# chown :named /var/named/{internal,external}.example.com.zone
(4)检查主配置文件以及两个区域配置文件是否有语法错误
[root@master ~]# named-checkconf [root@master ~]# named-checkzone "internal.example.com" /var/named/internal.example.com.zone zone internal.example.com/IN: loaded serial 2017121203OK[root@master ~]# named-checkzone "external.example.com" /var/named/external.example.com.zone zone external.example.com/IN: loaded serial 2017121203OK
(5)重现加载named配置文件并打开查询日志
[root@master ~]# rndc reloadserver reload successful[root@master ~]# rndc querylog
查看查询日志是否打开
[root@master ~]# rndc status
(6)验证
在win7物理机上测试
查看日志
[root@master ~]# tail /var/log/messages
这样一个简单的view实现智能DNS就建立起来了
- BIND高级应用
- BIND 9 的高级配置
- BIND 高级特性 转发 forwarder
- boost::bind应用示例
- 高级应用
- C++_std::bind std::function 高级用法
- BIND 高级特性-- 动态更新域名服务器教程
- C++11 std::bind std::function 高级用法
- C++11 std::bind std::function 高级用法
- C++11 std::bind std::function 高级用法
- 详解bind在网络编程中的应用
- call和apply及bind应用
- apply,bind,call应用小总结
- DNS服务及BIND基础应用
- 数据库高级应用
- SQL_Injection高级应用
- Java Annotation 高级应用
- ASP.NET高级应用
- Safe-SettingActivity设置
- python写算法题:leetcode: 36. Valid Sudoku
- Thinkphp关联模型BELONGS_TO
- idea 引入依赖版本错误
- Redis 数据类型及应用场景
- BIND高级应用
- LC 627. Swap Salary
- snmp配置
- 教你如何直接在github上预览html网页效果
- 17.12.12日报
- 什么是devops,基于Gitlab从零开始搭建自己的持续集成流水线(Pipeline)
- python下划线开头的命名风格与含义
- azkaban安装
- 【Python数据分析与展示】(二)NUMPY数据存取与函数