基于bind实现主从,智能DNS

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_42298432/article/details/98637676

DNS and Bind

DNS的理论基础

DNS: Domain Name Service , 应用层协议
C/S :
    Client :发起应用请求的程序;
    Server:响应请求(提供服务)的程序;
    53/UDP 53/TCP
DNS查询类型:
  递归查询:自己负责解析的域:直接查询数据库并返回答案;
  迭代查询;不是自己负责解析域:Server Cache --> iteration(迭代)
主-辅DNS服务器
  主DNS服务器:维护所负责解析的域数据库的那台服务器,读写操作均可进行;
  从DNS服务器:从主服务器哪里或其他从DNS服务器哪里复制一份解析库;但只能进行读操作;

复制操作的实施方法:
   序列号:serial,也即是数据库的版本号;主服务器数据库内容发生变化是,其版本号也要递增+1;
   刷新时间间隔:refresh,从服务器每多久到主服务器检查序列号更新情况;
   重试时间间隔:retry,从服务器从主服务器请求同步解析数据库失败时,再次发起尝试请求的时间间隔;
   过期时长:expire,从服务器始终联系不到主服务器是,多久之后放弃从主服务器同步数据;停止提供服务;
   否定答案的缓存时长:minimum
                                 主服务器通知从服务器随时更行数据;

主-从区域传送:
   全量传送:传送整个数据库;
   增量传送:仅传送变量的数据;
区域:
ityunn.com域:
      FQDN --> IP
           正向解析库区域;
      IP --> FQDN
           反向解析库区域;
区域数据库文件:
资源记录:简称rr;
  记录类型有:A,AAAA,PTR,SOA,NS,CNAME,MX

SOA 起始授权记录;一个区域解析库有且只能有一个SOA记录,而且必须放在第一条;
NS 域名服务记录;一个区域解析库可以有多个NS记录,其中一个为主的;
A 地址记录,FQDN–>IPv4
AAAA 地址记录,FQDN–>ipv6
CNAME 别名记录
MX 邮件交换器,优先级:0-99,数据越小优先级约高

注意事项
(1)TTL可以从全局继承;
(2)@表示当前区域的名称;
(3)相邻的两条记录其name相同时,后面的可省略;也可以在第二行添加$ORIGIN ityunn.com. 来指定。
(4)对于正向区域来说,各MX,NS等类型的记录的value为FQDN,此FQDN应该有一个A记录;

BIND的安装配置

BIND:伯克利互联网域名:
    dns:协议
    bind:dns协议的一种实现
    named:bind程序的运行的进程名
程序包:
    bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
    bing-utils:并客户端程序集,例如dig,nslookup,host等;
    bind:提供的dns server程序;
    bind-chroot:选装,让named运行于jail模式下;
bind配置文件
主配置文件:/etc/named.conf
  或包含进来其它文件;
      /etc/named.iscdlv.key
      /etc/named.rfc1912.zones
      /etc/named.root.key
解析库文件:
  /var/named/目录下;
       一般名字为:ZONE_NAME.zone
注意事项:
(1)一台DNS服务器可以同时为多个区域提供解析;
(2)必须要有根区域解析库文件:named.ca:
(3)还应该有两个区域解析库文件:localhost和127.0.0.1的正反向解析库;
      正向:named.localhost
      反向:named.loopback

测试工具:
dig \ host \ nslookup
dig命令:
dig [ -t RR_TYPE ] name [@server] [query options]
反向解析测试
dig -x IP
模拟完全区域传送:
dig -t axfr DOMAIN [@server]
host命令
host [-t RR_TYPE] name SERVER_IP
nslookup命令
交互式模式:
nslookup>
   server IP :以指定的IP为DNS服务器进行查询;
   set q=RR_TYPE:要查询的资源记录类型;
   name :要查询的名称;
rndc命令:named服务控制命令
   rndc status 查看配置
   rndc flush 清除缓存
   rndc reload 重载配置文件

部署主DNS服务器

(1)定义区域,在主配置文件中或主配置辅助配置文件中实现;
(2)建立区域数据文件(主要记录为A或者AAAA记录),在/var/named/目录下建立区域数据文件;
(3)让服务器重载配置文件或区域数据文件;
**
注意事项:
1.一定要设置主配置文件中可以为哪些主机提供解析的服务参数,默认只为本机提供解析,any代表所有
2.区域文件配置了区域后,必须配置对应区域的数据文件,否则无法启动服务
3. 数据配置文件里面的域名必须都以点“.”结尾,否则无法启动服务
3. 数据配置文件管理员邮箱不能使用@,要使用.代替,否则无法启动报错
4. 对应的域名服务器ns的A记录一定要设置,否则启动服务报错
5. 复制区域模板时,一定要加-a属性保持原权限,否则无法解析
**
1.使用yum安装DNS服务程序Bind

yum -y install bind* //安装bind服务

2.编辑主配置文件,设置允许所有主机提供解析服务

vim /etc/named.conf //编辑主配置文件

options {
listen-on port 53 { any; }; //给那些主机提供解析服务
listen-on-v6 port 53 { ::1; };
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
memstatistics-file “/var/named/data/named_mem_stats.txt”;
rrset-order { order cyclic; }; //配置DNS为轮询解析
allow-query { any; }; //允许主机可以向服务器发送查询请求

3.编辑区域文件,设置正向查询区域和反向查询区域

vim /etc/named.rfc1912.zones 
正向区域:zone "ityunn.com" IN {  //设置正向区域的域名
        type master; 服务的类型,主master,从slave,根hint,转发域forward;
        file "ityunn.com.zone";  //区域数据名称文件,默认时相对路径/var/namd/,可以在前面更改路径;
        allow-update { none; };  //允许动态更新区域数据库文件中内容;
反向区域:zone "10.168.192.in-addr.arpa" IN {  //表示192.168.2.网段的反向区域解析
        type master;  
        file "192.168.10.zone";
        allow-update { none; };
};
       
};

4.新建正向区域数据文件,可以从模板复制或者自己写一个同名的文件,(但文件权限要改);

cd /var/named //切换到数据配置文件目录
cp -a named.localhost ityunn.com.zone //复制生成一个正向区域数据文件
vim ityunn.com.zone //编辑配置文件
$TTL 1D 生存周期为一天
$ORIGIN ityunn.com.
@       IN SOA  ns1.ityunn.com. admin.ityunn.com. (
                                        20190806        ; serial /更新序列号
                                        1D      ; refresh  //刷新时间间隔
                                        
                                        1H      ; retry  //重试时间间隔
                                        1W      ; expire //过期时长
                                        3H )    ; minimum  //否定答案缓存时长
        IN NS   ns1  //域名服务器记录
        IN NS   ns2  //域名服务器记录
        IN MX   10      mail1  //邮箱交换记录
ns1     IN A    192.168.10.101  //dns服务器记录(对应NS的A记录)
ns2     IN A    192.168.10.104
www     IN A    192.168.10.101  //地址记录
mail1   IN A    192.168.10.50  //地址记录
web     IN CNAME www  //别名记录
bbs     IN A    192.168.10.10  //地址记录
bbs     IN A    192.168.10.11  //地址记录


5.新建反向区域数据文件,可以从模板复制或者自己写一个同名的文件,(但文件权限要改);

cd /var/named //切换到数据配置文件目录
cp -a named.loopback 192.168.10.zone //复制生成一个反向区域数据文件
vim 192.168.10.zone //编辑配置文件
$TTL 1D
$ORIGIN 10.168.192.in-addr.arpa.
@       IN SOA  ns1.ityunn.com. admin.ityunn.com. (
                                        20190806        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN NS   ns1.ityunn.com.
        IN NS   ns2.ityunn.com.
101     IN PTR  ns1.ityunn.com.
104     IN PTR  ns2.ityunn.com.
101     IN PTR  www.ityunn.com.
50      IN PTR  mail1.ityunn.com.
10      IN PTR  bbs.ityunn.com.
11      IN PTR  bbs.ityunn.com.

6.重启dns服务,使用nslookup验证结果

systemctl restart named //启动dns服务程序
rndc reload //重载配置文件
如果无法启动服务,使用以下命令检查配置文件
named-checkconf //检查主配置文件语法和参数是否存在错误
named-checkzone //检查数据配置文件语法和参数是否存在错误

部署从DNS服务器

**注意事项:
1.如果无法启动服务请检查配置文件参数是否正确
2. 从dns重启服务没有同步到文件,检查主从的ip地址,区域文件名是否一致
3. 本地可以解析,客户机无法解析,请关闭防火墙,selinux,检查主配置文件是否允许所有客户机dns查询
4. 从服务器要实现数据文件实时同步,需要在主dns区域数据文件中添加ns从服务器的记录,然后在主区域数据文件更改后将serial序号加1然后主服务器重启服务后,从服务器会自动来主服务器更新数据文件
5. 主从服务器的时间要同步,否则可能会出错
**

Slave(1)定义区域
定义一个从区域:
   zone “ZONE_NAME” IN {
         type slave;
         file “slaves/ZONE_NAME.ZONE”
         masters { masters_IP; } ;
};
         配置文件语法检查:named-checkconfig
(2)重载配置
          rndc reload
          systemctl restart named
Master

zone "ityunn.com" IN {
        type master;
        file "ityunn.com.zone";
        allow-update { 192.168.10.104; }; //允许从的IP地址进行更新
        notify yes;
        also-notify { 192.168.10.104; };  //当主服务器数据有变化是,会主动通知从服务器来更新数据
;};

注意:确保区域数据文件中每一个从服务器配置NS记录; 并且在正向区域文件中需要每一个从服务器的NS记录的主机名配置一个A记录,并且A后面的地址为真正的从服务器的IP地址,负责是同步不过去的;

子域授权:

正向解析区域授权的方法:
1.在主区域上面添加

vim /vim ityunn.com.zone  //编辑正向解析配置文件
ops     IN NS   ns1.ops
ns1.ops IN A    192.168.10.102

2.在主区域的子域下面添加ops这个主服务器

zone "ops.ityunn.com" IN { //设置主域的字域名称
        type master; 
        file "ops.ityunn.com.zone";
};

3.新建正向区域数据文件,可以从模板复制或者自己写一个同名的文件,(但文件权限要改);

cd /var/named //切换到数据配置文件目录
cp -a named.localhost ops.ityunn.com.zone //复制生成一个正向区域数据文件
vim ops.ityunn.com.zone //编辑配置文件
$TTL 3600
$ORIGIN ops.ityunn.com.
@       IN SOA  ns1.ops.ityunn.com. admin.ityunn.com. (
                                        20190801        ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN NS   ns1
ns1     IN A    192.168.10.102
www     IN A    192.168.10.102
bbs     IN A    192.168.10.103
~                               

定义转发
注意:被转发的服务器必须允许为当前服务做递归;
(1) 区域转发:仅转发对某特定区域的解析请求;
zone “ZONE_NAME” IN {
type forward;
forward {first|only};
forwarders { SERVER_IP; };
};

first:首先转发;转发器不响应时,自行去迭代查询;
only:只转发;

(2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;
options {
… …
forward {only|first};
forwarders { SERVER_IP; };
… …
};
Bind中的安全相关的配置:
acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;

acl  acl_name  {
				ip;
				net/prelen;
			};
实例:
vim /etc/named.rfc1912.zones
zone "ityunn.com" IN {
        type master;
        file "ityunn.com.zone"; 
        allow-update { none; }; 
        allow-transfer { slaves; };   //定义允许那些主机做区域传送;默认为所有主机;
};
在/etc/name.conf配置文件中写入(不要写到optiso全局里面,写到optiso上面;)
acl slaves {
        192.168.10.104;
        127.0.0.1;
};

Bind有四个内置的acl
none:没有一个主机;
any:任意主机;
local:本机;
localnet:本机所在的IP所属的网络;

>

访问控制指令:
allow-query {}; 允许查询的主机;白名单;
allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;
allow-update {}; DDNS,允许动态更新区域数据库文件中内容;

Bind view 分离解析

视图:
			view  VIEW_NAME {
				zone
				zone
				zone
			}
		acl internal {  //定义外网匹配的网段;
			172.16.0.0/8;
		};
		acl external {  //定义内网匹配的网段;
			192.168.10.0/24;
		};			
			
			view internal  { //视图
				match-clients { "internal"; }; //匹配的网段
				zone "fenli.com"  IN {
					type master;
					file  "fenli.com/internal";  //区域数据文件
				};
			};
			
			view external {  /视图
				match-clients { "external"; };  //匹配的网段
				zone "fenli.com" IN {
					type master;
					file fenli.com/external"; //区域数据文件
				};
			};

注意:如果使用分离解析,那么你的所有区域都要放在里面;否则会出错;

猜你喜欢

转载自blog.csdn.net/qq_42298432/article/details/98637676