以下的讲解是bind服务结合chroot之后
1、配置主配置文件
首先我们需要配置主配置文件,主配置文件可以将/etc/named.conf 这个文件复制到/var/named/chroot/etc目录下,这个文件我们需要修改的地方就是修改下面两个红线的地方。
第一个红线代表服务器上哪些地址在监听53号端口,第二个红线代表允许哪些地址可以进行地址查询。
2、然后配置进行区域的添加
区域的添加可以直接在主配置文件上进行,也可以使用include,然后在另一个文件上面进行,在主配置文件的底部就有一个include的文件专门给我们去添加区域。如下图红线上方的文件。
3、添加区域的语法
(1)正向主区域的添加:
zone "区域名" {
type master;
file "区域文件名";
allow-transfer { [网段|单个IP|域名|any]|none; }; //指定哪些主机可以接受来自该server的区域信息的传送
allow-update { [网段|单个IP|域名|any|none]; }; //指定了允许哪些主机提交该区域的动态DNS更新。默认是拒绝来自所有主机的更新。
};
(2)逆向主区域的添加
zone "区域名.in-addr.arpa" {
type master;
file "区域文件名";
allow-transfer { [网段|单个IP|域名|any|none]; }; //指定哪些主机可以接受来自该server的区域信息的传送
allow-update { [网段|单个IP|域名|any|none]; }; //指定了允许哪些主机提交该区域的动态DNS更新。默认是拒绝来自所有主机的更新。
};
(2)辅助区域的添加:
zone "区域名" {
type slave;
file "slaves\区域文件名"
masters { IP地址1;IP地址2;....IP地址n; }; //主服务器的IP地址
allow-transfer { [网段|单个IP|域名|any|none]; }; //指定哪些主机可以接受来自该server的区域信息的传送
allow-update-forwarding { [网段|单个IP|域名|any|none]; }; //指定哪些主机可以通过该从DNS服务器去进行主DNS服务器的DNS记录资源的更新
};
(3)转发区域的添加:
部分转发
zone "区域名" {
type forward;
forwarders { IP地址1;IP地址2;....IP地址n; };
forward 【first|only】;
};
其中first代表先转发给其他DNS服务器,不行的话再自己来,only代表只转发给其他服务器,自己不做任何操作。
(4)全部转发:
也可以直接在主配置文件上输入:forwarders { IP地址1;IP地址2; };这样就代表不管是什么查询都直接转发给别的DNS服务器。
下面的图片是正反主区域的两个例子:
下面两个是对应着上图的正反辅助区域的例子
4、区域文件的语法
区域文件的存储位置在/var/named/chroot/var/named,相关配置在主配置文件中定义。
首先区域文件的名字一定和主配置文件中定义的区域文件名相同,比如file xxx ,那么在var/named中创建的区域文件名也要叫xxx。
我们可以直接将/var/named/chroot/var/named目录中的其他区域文件模板复制过来然后直接使用即可,比如named.localhost文件。
下面是一个正向区域的区域文件
第一行的TTL代表的是该记录在客户机上存活的时间,也就是在缓存中存在的时间,改图的存活时间是一天,D是天,H是小时,W是星期。
第二行要改的地方只有SOA的后面,后面要跟上两个域名,第一个是本区域的域名,第二个是管理的邮箱号,但是邮箱号的@被切换为了“.” ,
第三行是序列号,用于主从服务器进行数据的更新的,从服务器会从主服务器上下载区域文件,然后当设定的时间到后会去比对它们的序列号值,当主服务器上的序列号比较大的时候,就要从主服务器上进行相关数据的下载。
第四行代表多久进行一次比对和数据的刷新
第五行代表如果比对或者数据的刷新失败的话,过多久再试一次
第六行代表如果从服务器和主服务器彻底失去联系后,它的数据还能有效多久
第七行代表的是无效解析的缓存时间
PS!!!:注意区域文件里面出现的域名的尾部都要以"."结尾。
其中的IN我们可以将它看作是一个固定格式,其实这个东西不写也可以,但是就是好看
IN NS my.fuck.com. :这一行是无论正向区域文件还是反向区域文件都要添加的一行,这一行书写了改区域内的域名服务器的域名,而NS代表着这个my.fuck.com这个主机是一个域名服务器。
my.fuck.com. IN A 192.168.1.11 :这一行的最左边是域名,IN是固定格式,A代表着该资源的类型,标识这条记录是记录着一个IPv4的主机正向域名,最右边是它对应的IP地址。如果想要添加正向记录按这个格式添加就可以了。
别名记录的添加:AA.fuck.com IN CNAME BB.fuck.com ,最左边的是域名,IN是固定格式,CNAME是资源类型,标识该记录是别名记录,BB.fuck.com是AA.fuck.com的真实域名记录,而AA.fuck.com只是一个别名。
5、主从区域传送
1、在主服务器主配置文件的区域信息中添加allow-transfer { 允许的主机的IP };
2、在从服务器上安装BIND服务,然后将基础环境部署完成
3、在从服务器上的主配置文件中加入辅助区域(语法如下:)
zone "区域名" {
type slave;
file "slaves\区域文件名"
masters { IP地址1;IP地址2;....IP地址n; }; //主服务器的IP地址
allow-transfer { [网段|单个IP|域名|any]; }; //指定哪些主机可以接受来自该server的区域信息的传送
allow-update-forwarding { [网段|单个IP|域名|any]; }; //指定哪些主机可以通过该从DNS服务器去进行主DNS服务器的DNS记录资源的更新
};
4、当1,2,3步骤都做了之后,我们还要注意/var/named/chroot/var/named/slaves目录对于named用户来说是否有写的权限,因为named用户需要将主服务器上获取到的区域文件放在slaves目录中,如果没有服务虽然会起来,但是slaves目录中是没有任何东西。如果权限都有之后,且主服务器的相关配置以及生效,我们只要重启从服务器上的bind服务,就可以看到对应的区域文件了。
6、根据IP地址区分DNS解析
这里使用view语法和zone语法结合,先来看一个例子:
我们在外面使用view "view名" { } 将所有的zone包括在里面,注意外面我把根域的zone也包括在里面了,这是view的语法规定,所有的zone都要在view里面。然后看例子中的
match-clients { 【网段|单个IP|any|none】 };这条语句的作用是当查询者的IP是花括号里面的IP的时候,就使用该view中的区域文件,如果不满足,那么要么使用其他view的区域文件,要么就不使用任何的区域文件。如果该语句没有加,那么默认是允许所有人都使用该view中的区域文件。
match-destinations { address_match_list } ;
match-recursive-only { yes_or_no } ;
上面是其他两个限制语句,match-destinations 代表我根据查询者要查询的目标来区分和限制,match-recursive-only表示我要根据用户是否要求进行递归查询来区分和限制。
我们可以根据不同的区域的客户IP,然后准备两份DNS区域文件,通过我们精心设计区域文件中的内容,可以让客户根据域名解析到离自己更近的服务器,这样可以加强客户的使用体验。