rndc的相关知识: 1.什么是rndc: Remote Name Domain Controller,远程名称域控制器 rndc 通过一个 TCP 连接与名字服务器通信,发送经过数字签名认证的命令。在当前版本的rndc 和 named 中,唯一支持的认证算法是 HMAC-MD5,在连接的两端使用共享密钥。它为命令请求和名字服务器的响应提供 TSIG类型的认证。所有经由通道发送的命令都必须被一个服务器所知道的 key_id 签名。 监听端口:953/tcp 语法: rndc [-b address] [-c config] [-s server] [-p port] [-k key-file ] [-y key] [-V] command command is one of the following: reload Reload configuration file and zones. #重新加载配置文件和区域文件 reconfig Reload configuration file and new zones only. #重新加载配置文件和新的区域文件 freeze Suspend updates to all dynamic zones.
stats Write server statistics to the statistics file. #将服务器统计信息写入统计文件中 stop Save pending updates to master files and stop the server. halt Stop the server without saving pending updates. flush Flushes all of the server's caches. #清空DNS缓存 status Display status of the server. #显示bind服务器的工作状态 2、rndc的调试和日志: 调试:显示程序运行中的详细信息(会产生I/O,正常情况下建议关闭) 调试级别:0,1,2,3... 提升调试级别: rndc trace rndc trace LEVEL rndc notrace 打开查询日志:记录查询动作(会增加磁盘I/O) —————————————————————————————————————————————————— 主从DNS服务器的配置 功能:避免因主DNS服务器挂了而影响一个域下的所有主机无法访问;服务器可均衡访问负载。 从服务器上的解析库文件内容要与主服务器一致,从服务器要随时从主服务器同步,这个同步是单向的,只有从服务器拉取主服务器的解析库文件 如何令解析请求均衡负载

如果是对本地缓存DNS服务器的请求,则只需令本地一半主机DNS地址配置为主服务器的IP,另一半配置为从的即可; 如果是对互联网上负责指定域的服务器,则只需在该服务器上级DNS服务器写两条NS记录即可,bind给客户主机答案时会采取轮询方式。 配置主从服务器 主从服务器时间要一致。 从服务器的解析文件从主DNS服务器同步而来,不能手动创建和修改。从服务器的解析库文件放置在/var/named/slaves目录下。 named进程对工作目录/var/named是没有写权限的,而在从服务器上又不能像在主服务器上那样以管理员的身份手动创建解析库,故bind提供了一个目录/var/named/slaves用来专门存放同步而来的解析文件。named进程对该目录是有写权限的

区域的定义: zone “区域名称” IN { type slave; #区域类型为从DNS服务器 file "slaves/ZONE_NAME.zone"; #区域文件必须保存在slaves目录下,放在其他目录没有权限 masters { #指出主服务器是谁,注意:花括号前后要有一个空格 MASTER_DNS_IP;主dns服务器IP地址,可一个也可以多个 MASTER_DNS2_IP; }; }; 我们在这里以正向解析的主从DNS服务器配置为例子 首先编辑主dns服务器上的区域解析库文件添加相应记录 编辑从DNS服务器的/etc/named.rfc1912.zones 添加相应区域记录 zone "lishuai.com" IN { type slave; file "slaves/lishuai.com.zone";//这里的区域名称和解析库文件名称要和主DNS服务器的保持一致 masters { 192.168.2.18; }; }; 在从DNS服务器上检查语法错误,重读配置文件 我们在主DNS服务器解析库文件里修改一下序列号 rndc reload 我们可以在主DNS服务器日志中看到 在从DNS服务器的/var/named/slaves内我们也可以看到同步的解析库文件 如果同步的解析库文件乱码,我们就在区域文件里指定格式即可 zone "lishuai.com" IN { type slave; file "slaves/lishuai.com.zone"; masters { 192.168.2.18; }; masterfile-format text; }; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

测试 1、每个DNS服务器必须要有一个对应的NS资源记录; 2、创建slave的时候,其配置文件类型必须是type slve; 必须指定主服务器的 IP地址 ; 3、可以使用dig -t axfr test.com @server_IP 从主DNS服务器拉取所有解析库资源记录; 4、主辅同步完成后,将自动在slave服务器上的slaves/目录下生成zone文件,这些区域文件是从主DNS同步过来的,一般为只读,不建议更改slave的zone文件; 5、在主DNS上修改区域文件时,必须将SOA记录的serial加1 因为slave是通过serial值来进行判断更新的(windows系统上是自动完成的); 6、DNS的日志默认全部保存在/var/log/messege 文件中; 7、DNS的解析依赖于解析库,所以就算是所配置的内容是完全不存在的也可以解析(且正向解析和反向解析的解析库是各自独立的)。需要注意,正向解析里没有PTR记录,而反向解析库里不需要A记录、MX记录和CNAME记录

创建子域 这里我们还是以从DNS服务器作为子域服务器(192.168.2.29)主DNS服务器作为父域(192.168.2.18) 我们在子域服务器编辑/etc/named.rfc1912.zones创建子域区域文件 zone "son.lishuai.com" IN { type master; file "son.lishuai.com.zone"; }; 创建子域区域文件的解析库文件 我们在父域服务器编辑解析库文件添加子域的NS记录和A记录

named-checkconf named-checkzone lisuai.com lishuai.com.zone extra GLUE A表示额外的粘附A记录 rndc reload

测试 此时我们把主从DNS服务器功能关掉 并且清除缓存我们测试一下子域是否能访问父域 rndc reload rndc flush 此时我们发现子域无法解析父域 授权是自上而下的,上级(父域)知道下级(子域)的存在,而下级(子域)并不知道上级(父域)的存在(因此子域的解析从根开始层层往下迭代) 我们可以通过转发让子域也能解析父域 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ** DNS名称解析转发器:**

(1)当本地DNS服务器(也是转发器)收到查询时,它会尝试使用它主持和缓存的主要和辅助区域解析该查询; (2)如果不能使用本地数据解析查询,此时它作为客户端,会将查询转发给外网DNS服务器; (3)本地DNS(转发器)收到客户端的请求后会等待一段很短的时间,等待来自外网DNS的应答; (4)对于外网DNS来说,它接收到的查询请求是递归查询,此时,它自己需要向外层层迭代找到最终答案返回给转发器(此时转发器作为DNS客户端) (5)转发器将外网DNS返回的查询结果送到客户端(非权威答案),完成解析过程。 注:转发的前提——接收转发请求的服务器(这里是外网DNS)必须能够为请求者(这里是本地DNS,也是转发器)做递归查询; 3、转发的类型: (1)无条件转发:转发所有针对非本机负责解析的区域的请求;

#在主配置文件/etc/named.conf的全局选项中添加如下内容: options {
forwarders { ip; }; #指明转发器是谁 forward only|first; #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询 };

(2)条件转发:仅转发对特定区域的请求(即转发域);

#在区域置文件/etc/named.rfc1912.zone中定义转发域: zone "区域名称" IN { type forward; #区域的类型为转发 forwarders { ip; }; #指明转发器是谁 forward only|first; #only表示仅转发 ;first表示先进行转发,如果没查询到结果,那么它自己还会根据根提示向外迭代查询

};

我们在子域服务器的全局配置文件里加入如下: 检查配置文件然后rndc reload 测试 此时子域已经能正常解析父域 我们把刚才在全局配置文件中加的转发给注释掉,然后rndc flush 在子域的的/etc/named.rfc1912.zones 配置条件转发,转发只针对父域的请求

zone "lishuai.com" IN { type forward;
forwarders { 192.168.2.18; }; forward first; };

检查配置文件并执行rndc reload 测试 此时针对lishuai.com的请求我们可以通过子域去解析