bind实现dns服务

本文详细介绍了如何安装和配置BIND DNS服务器,包括主从服务器的设置、区域定义、解析库文件、权限控制和故障排查。主要内容涉及监听端口、服务脚本、主配置文件、区域文件、反向区域、主从同步、安全配置和DNS排错。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BIND

  1. 安装
     NS服务器软件:bind,powerdns,unbound
     BIND相关程序包:yum list all bind*
     bind:服务器
     bind-libs:相关库
     bind-utils:客户端
     bind-chroot: /var/named/chroot/
     BIND程序名:named
  2. bind服务器
     端口号:53/udp 用于解析地址FQDN <-- --> IP,主从服务器数据同步(用于对主服务器数据库进行查询)
     53/tcp 用于主从服务器同步
  • 服务脚本和名称:
    /etc/rc.d/init.d/named(centos 6)
    /etc/named.conf(centos 7) – 修改下面两项
     listen-on … {localhost;}
     allow-query {any;}
    /usr/lib/systemd/system/named.service
  • 主配置文件:
    /etc/named.conf
    /etc/named.rfc1912.zones
    /etc/rndc.key
    解析库文件:/var/named/ZONE_NAME.ZONE (修改文件属组chgrp named ZONE_NAME.ZONE)
  • 注意:
    一台物理服务器可同时为多个区域提供解析
    必须要有根区域文件;named.ca
    应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
      rndc:remote name domain controller默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
    提供辅助性的管理功能;953/tcp
  • 配置文件
    主配置文件:
     全局配置:options {};
     日志子系统配置:logging {};
     区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
      zone “ZONE_NAME” IN {};
    注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
    缓存名称服务器的配置:
     监听外部地址即可
     dnssec: 建议关闭dnssec,设为no
  1. 配置主DNS服务器
    主DNS名称服务器:
     在主配置文件中定义区域
      ZONE_NAME<---->IP
      zone “ZONE_NAME” IN {
      type {master|slave|hint|forward};
      file “ZONE_NAME.zone”;
      };
    定义区域解析库文件
     出现的内容
     宏定义
     资源记录
     主配置文件语法检查
      named-checkconf
     解析库文件语法检查:
      named-checkzone “123.com” /var/named/123.com.zone
    配置生效:
     rndc reload 或 service named reload
    主区域示例

    	$TTL 86400
    	$ORIGIN 123.com.
    			@ 	IN		SOA		ns1.123.com.		admin.123.com (
    			2015042201
    			1H
    			5M
    			7D
    			1D )
    				IN 		NS 		ns1
    				IN 		NS 		ns2
    				IN 		MX 10 	mx1
    				IN 		MX 20 	mx2
    		ns1 	IN 		A 		172.16.100.11
    		ns2 	IN 		A 		172.16.100.12
    		mx1 	IN 		A 		172.16.100.13
    		mx2 	IN 		A 		172.16.100.14
    		websrv 	IN 		A 		172.16.100.11
    		websrv 	IN 		A 		172.16.100.12
    		www 	IN 		CNAME 	websrv
    
  2. 测试命令

    • dig [-t type] name [@SERVER] [query options]
      dig只用于测试dns系统,不会查询hosts文件进行解析
      查询选项:
       +[no]trace:跟踪解析过程 : dig +trace 123.com
       +[no]recurse:进行递归解析
      测试反向解析:
       dig -x IP = dig –t ptr reverseip.in-addr.arpa
      模拟区域传送:
       dig -t axfr ZONE_NAME @SERVER
       dig -t axfr 123.com @10.10.10.11
       dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
       dig -t NS . @114.114.114.114
       dig -t NS . @a.root-servers.net
    • host [-t type] name [SERVER]
       host –t NS 123.com 172.16.0.1
       host –t soa 123.com
       host –t mx 123.com
       host –t axfr 123.com
       host 1.2.3.4
    • nslookup命令: nslookup [-option] [name | -] [server]
      交互式模式:
       nslookup>
       server IP: 指明使用哪个DNS server进行查询
       set q=RR_TYPE: 指明查询的资源记录类型
       NAME: 要查询的名称
  3. 反向区域
    反向区域:
     区域名称:网络地址反写.in-addr.arpa.
      172.16.100. --> 100.16.172.in-addr.arpa.
     定义区域
      zone “ZONE_NAME” IN {
      type {master|slave|forward};
      file “网络地址.zone”
      };
    定义区域解析库文件
     注意:不需要MX,以PTR记录为主
    反向区域示例

    $TTL 86400
    $ORIGIN 100.16.172.in-addr.arpa.
    	@ 	IN 	SOA 	ns1.123.com. 	admin.123.com. (
    					2015042201
    					1H
    					5M
    					7D
    					1D )
    	IN 	NS 		ns1.123.com.
    	IN	NS 		ns2.123.com.
    11 	IN 	PTR 	ns1.123.com.
    11 	IN 	PTR 	www.123.com.
    12 	IN 	PTR 	mx1.123.com.
    12 	IN 	PTR 	www.123.com.
    13 	IN 	PTR 	mx2.123.com.
    
    
  4. 从服务器
    应该为一台独立的名称服务器
    主服务器的区域解析库文件中必须有一条NS记录指向从服务器
    从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
    主服务器得允许从服务器作区域传送
    主从服务器时间应该同步,可通过ntp进行;
    bind程序的版本应该保持一致;否则,应该从高,主低
    定义从区域的方法:

    zone "ZONE_NAME" IN {
    		type slave;
    		masters { MASTER_IP; };
    		file "slaves/ZONE_NAME.zone";
    };
    
    
  5. rndc命令:
    rndc --> rndc (953/tcp)
    rndc COMMAND
    COMMAND:
     reload: 重载主配置文件和区域解析库文件
     reload zonename: 重载区域解析库文件
     retransfer zonename: 手动启动区域传送,而不管序列号是否增加
     notify zonename: 重新对区域传送发通知
     reconfig: 重载主配置文件
     querylog: 开启或关闭查询日志文件/var/log/message
     trace: 递增debug一个级别
     trace LEVEL: 指定使用的级别
     notrace:将调试级别设置为 0
     flush:清空DNS服务器的所有缓存记录

  6. 子域
    子域授权:分布式数据库
    正向解析区域子域方法
    定义一个子区域:

     	ops.123.com. 	IN 	NS 		ns1.ops.123.com.
     	ops.123.com. 	IN 	NS 		ns2.ops.123.com.
     	ns1.ops.123.com. IN 	A 		1.1.1.1
     	ns2.ops.123.com. IN 	A 		1.1.1.2
     	fin.123.com. 	IN 	NS 		ns1.fin.123.com.
     	fin.123.com. 	IN 	NS 		ns2.fin.123.com.
     	ns1.fin.123.com. IN 	A 		3.1.1.1
     	ns2.fin.123.com. IN 	A 		3.1.1.2
    
  7. 转发服务器
    注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
    全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器

     Options {
     	forward first|only;
     	forwarders { ip;};
     };
    

    特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高

     zone "ZONE_NAME" IN {
     	type forward;
     	forward first|only;
     	forwarders { ip;};
     };
    

    first 先转发到指定的dns查找,如果找不到在自己去查找
    only 只进行转发到指定的dns查找
    注意:关闭dnssec功能
     dnssec-enable no;
     dnssec-validation no;
    示例:
     能连网的dns:
      修改namd.conf禁用下面两项
       // listen-on port 53 …
       // allow-query …
     不能联网的dns
      修改namd.conf
       禁用:

     	// listen-on port 53 ...
     	// allow-query ...
    

       添加:

     	forward only;
     	forwarders {ip;};
    
  8. bind实现智能dns
    bind中ACL
    bind中基础的安全相关的配置:
     acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
     格式:

    	acl acl_name {
    		ip;
    		net/prelen;
    		……
    	};
    

    示例:

    	acl mynet {
    		172.16.0.0/16;
    		10.10.10.10;
    	};
    

    bind有四个内置的acl:
     one 没有一个主机
     any 任意主机
     localhost 本机
     localnet 本机的IP同掩码运算后得到的网络地址
    注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面
    访问控制
    allow-query {}: 允许查询的主机;白名单
    allow-transfer {}:允许区域传送的主机;白名单
    allow-recursion {}: 允许递归的主机,建议全局使用
    allow-update {}: 允许更新区域数据库中的内容
    GSLB
     GSLB:Global Server Load Balance全局负载均衡
     GSLB是对服务器和链路进行综合判断来决定由哪个地点的服务器来提供服务,实现异地服务器群服务质量的保证
     GSLB主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)
     GSLB分为基于DNS实现、基于重定向实现、基于路由协议实现,其中最通用的是基于DNS解析方式
    bind view
     CDN: Content Delivery Network内容分发网络
     服务商:蓝汛,网宿,帝联等
     智能DNS:dnspod 、dns.la
    view:视图:实现智能DNS
     一个bind服务器可定义多个view,每个view中可定义一个或多个zone
     每个view用来匹配一组客户端
     多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
     注意:
      一旦启用了view,所有的zone都只能定义在view中
      仅在允许递归请求的客户端所在view中定义根区域
      客户端请求到达时,是自上而下检查每个view所服务的客户端列表
     格式:

    		view VIEW_NAME {
    			match-clients { testacl; };
    			zone "123.com" {
    				type master;
    				file "123.com.zone";
    			};
    			include "/etc/named.rfc1912.zones";
    		};
    

    示例:
    在dns服务器的named.conf

    	acl beijingnet {
    		192.168.61.0/24;
    	};
    	acl shanghainet {
    		172.16.0.0/16;
    	};
    	acl othernet {any;};
    

    touch 123.com.zone.bj 属组 named 权限640

    $TTL 86400
    @ 	IN 	SOA 	ns1.123.com. 	admin.123.com. (
    				2015042201
    				1H
    				5M
    				7D
    				1D )
    		NS ns1
    	ns1 A 192.168.61.46
    	www A 192.168.61.100
    

    touch 123.com.zone.sh 属组 named 权限640

    $TTL 86400
    @ 	IN 	SOA 	ns1.123.com. 	admin.123.com. (
    				2015042201
    				1H
    				5M
    				7D
    				1D )
    		NS ns1
    	ns1 A 192.168.61.46
    	www A 172.16.61.100
    

    touch 123.com.zone.other 属组 named 权限640

    $TTL 86400
    @ 	IN 	SOA 	ns1.123.com. 	admin.123.com. (
    				2015042201
    				1H
    				5M
    				7D
    				1D )
    		NS ns1
    	ns1 A 192.168.61.46
    	www A 8.8.8.8	
    

    在named.rfc1912.zone中添加

    	zone "." IN {
    		type hint;
    		file "named.ca";
    	};
    	zone "123.com" {
    		type master;
    		file "123.com.zone.other";
    	};
    

    cp -p named.rfc1912.zone named.rfc1912.zone.sh

    	zone "123.com" {
    		type master;
    		file "123.com.zone.sh";
    	};
    

    cp -p named.rfc1912.zone named.rfc1912.zone.sh

    	zone "123.com" {
    		type master;
    		file "123.com.zone.bj";
    	};
    在named.conf 中
    	view view_beijing {
    		match-clients {beijingnet;};
    		include "/etc/named.rfc1912.zones.bj"
    	}
    	view view_shanghai {
    		match-clients {shanghainet;};
    		include "/etc/named.rfc1912.zones.sh"
    	}
    	view view_beijing {
    		match-clients {othernet;};
    		include "/etc/named.rfc1912.zones"
    	}
    
  9. DNS排错
    #dig A example.com
     <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
     global options: +cmd
     Got answer:
      ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523
     …
    SERVFAIL:The nameserver encountered a problem while processing the query.
     可使用dig +trace排错,可能是网络和防火墙导致
    NXDOMAIN:The queried name does not exist in the zone
     可能是CNAME对应的A记录不存在导致
    REFUSED:The nameserver refused the client’s DNS request due to policy restrictions.
     可能是DNS策略导致
    NOERROR不代表没有问题,也可以是过时的记录
    查看是否为权威记录,flags:aa标记判断
    被删除的记录仍能返回结果,可能是因为记录存在如:*.example.com. IN A 172.25.254.254
    注意"."的使用
    避免CNAME指向CNAME记录,可能产生回环
    test.example.com. IN CNAME lab.example.com.
    lab.example.com. IN CNAME test.example.com.
    正确配置PTR记录,许多服务依赖PTR,如sshd,MTA
    正确配置轮询round-robin记录

  10. 一个完全的DNS配置流程
    1.在67机器上启动httpd
    systemctl start httpd
    2.配DSN 主(47)从(57)
    47:

     vim namd.conf
     	//listen-on port 53 ...
     	//allow-query ...
     	allow-transfer {192.168.61.57;};
     vim named.rfc1912.zone 
     	zone "dnstest.com" {
     		type master;
     		file "dnstest.com.zone";
     	};
     vim dnstest.com.zone 
     	SOA ...
     	NS ns1
     	NS ns2
     	ns1 A 192.168.61.47
     	ns2 A 192.168.61.57
     	www A 192.168.61.67
    

    57:

     vim named.conf	
     	//listen-on port 53 ...
     	//allow-query ...
     	allow-tranfer {none;};
     vim named.rfc1912.zone
     	zone "dnstest.com" {
     		type slave;
     		masters { 192.168.61.47; };
     		file "slaves/dnstest.com.zone";
     	};
    

    3 父域dns
    37:

     vim named.com 
     	//listen-on port 53 ...
     	//allow-query ...
     vim named.rfc1912.zone
     	zone "com" {
     		type master ;
     		file "com.zone";
     	};
     vim com.zone
     		SOA...
     		NS ns1	
     	dnstest NS ns2
     	dnstest NS ns3
     	ns1 A 192.168.61.37
     	ns2 A 192.168.61.47
     	ns3 A 192.168.61.57
    

    4 根域
    27:

     	vim named.conf
     		//listen-on port 53 ...
     		//allow-query ...
     		zone "." IN	{
     			type hint;
     			file "root.zone";
     		};
     	vim named.rfc1912.zones
     		zone "." {
     			type master;
     			file "root.zone";
     		};
     	vim root.zone
     		SOA
     		NS ns1
     	com	NS ns2
     	ns1 A 192.168.61.27
     	ns2 A 192.168.61.37
    

    5 本地dns
    17:

     vim named.ca
     	a.root-servers.net. 360000 IN A 192.168.61.27
     vim named.conf
     	//listen-on port 53 ...
     	//allow-query ...
     	dnssec ... no
     	dnssec ... no
    

    6 forward
    7:

     vim named.conf
     	//listen-on port 53 ...
     	//allow-query ...
     	dnssec ... no
     	dnssec ... no
     	forward only;
     	forwarders {192.168.61.17;};
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值