命令:yum -y install bind
安装后对DNS服务的一些简单介绍:
named DNS服务的系统服务名称
/etc/named.conf DNS服务的主配置文件
/etc/named.rfc1912.zones 定义区域zone的文件
/etc/rc.d/init.d/named bind的服务脚本文件
/etc/rndc.conf rndc的配置文件
/usr/sbin/named-checkconf 检测/etc/named.conf文件语法是否正确
/usr/sbin/named-compilezone 检测zone及其zone文件配置语法是否合法
/usr/sbin/rndc 远程DNS管理工具
/usr/sbin/rndc-confgen 生成rndc密钥
/var/named/named.ca 记录的是根服务器的地址
/var/named/named.localhost 本地主机解析库
/var/named/slaves 记录从DNS服务器设置的文件夹
CentOS 6:service named start
CentOS 7:systemctl start named
[root@CentOS6 ~]# vim /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { 127.0.0.1; };
//IPv4的监听端口,可以直接注释掉,表示监听所有的本机IP,
//也可以直接在大括号里直接写成 {any; }
listen-on-v6 port 53 { ::1; }; //IPv6的监听端口,一般默认
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";
allow-query { any; }; //允许查询该DNS服务的主机IP
recursion yes; //是否允许递归查询
dnssec-enable yes;
dnssec-validation yes;
//这两处都DNS的扩展安全认证机制,一般情况下不用管他就行,
//但是在设置主从服务器与转发服务器时需要将这两个选项都设置成 no 。
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging { //定义日志
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN { //定义根区域文件名称
type hint; //该类型专指根服务器类型,不能将其用作其他
file "named.ca"; //根区域文件名,使用的是相对路径,
//默认存放的是/var/named/named.ca
};
include "/etc/named.rfc1912.zones"; //定义zone区域的配置文件
include "/etc/named.root.key"; //根区域的key文件,跟事务签名有关
一处是 listen-on port 53 {} 这行,可以将这行直接注释掉,或在里面添加 localhost(localhost是DNS软件自定义的一个关键字,代表本机的所有IP地址) 或 any (any是DNS软件自定义的一个关键字,代表所有的IP地址)关键字;
还有一处是 allow-qurey {} 行,可以直接将该行注释掉,也可以在大括号里追加允许通过该DNS服务器的IP地址段(最好使用CIDR法)或者 将大括号里的内容改成 any 关键字
该文件修改完成后可以通过 named-checkconf 命令进行语法检查
想要创建自己定义的DNS服务,需要在/etc/named.rfc1912.zones文件中添加自己想要设置的zone(区域),
然后在/var/named/目录下添加刚刚添加的区域解析库,该解析库的文件名要与设置zone里file字段定义的文件名一致。
(1)、创建正向解析:
首先在/etc/named.rfc1912.zones中添加要设置的区域名
[root@CentOS6 ~]# vim /etc/named.rfc1912.zones
zone "qq.com" IN { //定义域名,IN 是 Internet 的意思,也可以不写。
type master; //定义该DNS是主还是从级别
file "qq.com.zone"; //该区域的解析库文件名,是相对路径,默认存放
//在 /var/named/ 目录下,该文件名可以随便定
//义,但要与下面在/var/named/ZONE_NAME.zone 文件名一致。
};
//然后保存退出。
//然后在/var/named/目录下创建新加的区域解析文件。
注意:创建该区域的解析库文件,该文件名必须要与 named.rfc1912.zones 里 file 字段定义的名称一致,该文件也可以通过将 /var/named/named.localhost 拷贝到该文件中,但是文件创建后必须注意修改文件的所属人、所属组和权限;建议使用 cp /var/named/named.localhost /var/named/ZONE_NAME.zone -p 指令,然后再对文件进行修改。
[root@CentOS6 ~]# vim /var/named/qq.com.zone //文件名要与在/etc/named.rfc1912.zones设置的zone里file字段定义的文件名一致。
$TTL 86400 //定义缓存过期时长
$ORIGIN qq.com. //这一行可以不写,系统会自动从别处继承;若写的话,域名后的“.”不能省略,若省略系统会自动补全,可能会出现问题,比如若不全的就会补成qq.com.qq.com.
@ IN SOA ns1 admin.163.com.(
//只有ns1才是定义的域名称,这里使用的是类似变量的方式替代的;
//后面的那个163是这个DNS服务器管理员的邮箱,邮箱中的 @ 要用 . 来替代。
2017010101; serial
//序列号,该序列号定义后,若要在修改只能增,不能减;
//同时从DNS服务器会根据该序列号是否变化来决定是否从
//主DNS服务器上进行备份,此时是从服务器向主服务器拉
//(pull)数据进行数据同步;该序列号最多有10位,
//超出会报错。
2H; refresh //定义多长时间从DNS服务器会从
//主DNS服务器上拉(pull)数据。
5M; retry //定义主从DNS服务器同步数据时出现问题的话,
//要过多长时间再次尝试。
7D; expire //定义从DNS服务器多长时间内无法与主DNS服务
//器同步数据时,从DNS服务器上的数据会失效。
1D; MINTTL //DNS服务器无法返回给客户端正确回答时的
//否定回答要保存多久,避免客户端对同一无效
//请求在一段时间内发起多次访问。
)
@ IN NS ns1 //定义指定DNS服务器(NS前面的那些项可以不写,
//不写的话就会直接从上面继承,也可以只写一个 @ ;
//域名写的话就要写全:qq.com.)
@ IN NS ns2 //域名可以指定多个域名服务器,如果存在多个的情况下,
//此处ns2表示从域名服务器。
ns1 IN A 172.16.100.10 //指定ns1域名服务器的IP地址。
ns2 IN A 172.16.100.11 //指定从域名服务器IP地址。
ns1 IN MX 10 mail1 //定义邮件服务器,此记录也可指定多个,
//10表示此记录的优先级别,数字越小优先级越高。
mail1 IN A 172.16.100.10 //指定邮件服务器IP地址。
www IN A 10.20.57.10 //指定该域名下的web服务器主机的IP地址。
ftp IN CNAME www //将ftp主机设置为www别名。
* IN CNAME www //设置泛域名解析,可以使所有符合该域名
//后缀的链接都访问到该IP地址,
//但是该域名后缀的前面不能为空。
@(也可以直接只写一个域名:qq.com.) IN A 172.17.111 //也是一种
//泛域名解析,允许访问该域名后缀的链接的主机部分为空。
$GENERATE 1-100 server$ A 1.1.1$ //$为一个1-100内的数字,
//可以实现server1.qq.com--server100.qq.com之间
//100个链接的访问($GENERATE 应该为固定写法!!!)。
//保存退出。
//配置好后可以通过 named-checkzone /var/named/ZONE_NAME.zone 指令
//进行语法检查,若本身就在/var/naned目录下,就不用写绝对路径了。
(2)创建反向解析,和创建正向解析的方式是一样的,都是需要在/etc/named.rfc1912.zones文件中添加要设置的区域,并在/var/named/目录下创建刚刚添加的区域解析库,该解析库的文件名要与设置区域名一致。
//反向解析的过程与正向解析的过程是差不多的,只是反向解析是不需要向根进行解析,
//而是只会解析到根下的一个名为 arpa 的域,由 arpa 域进行处理,
//然后再一级一级的进行处理。
//创建反向解析:
[root@CentOS6 ~]# vim /etc/named.rfc1912.zones
zone "37.168.192.in-addr.arpa" IN { //定义要解析的IP地址段,
//IN 是 Internet 的意思,也可以不写。
type master; //定义该DNS是主还是从级别
file "192.168.37.zone"; //该区域的解析库文件名,是相对路径,
//默认存放在/var/named/ 目录下,
//该文件名可以随便定义,但最好与定义的
//域名相关、好识别。
};
//创建反向解析的zone文件与创建正向解析的zone文件一样,
//也可以通过拷贝范例文件的方式进行创建,不过范例文件变成了
// /var/named/named.loopback,建议使用
// cp -p /var/named/named.loopback /var/named/ZONE_NAME.zone ,
//然后再对该文件进行修改即可。
[root@CentOS6 ~]# vim /var/named/192.168.37.zone
$TTL 1D
@ IN SOA dns1 rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.28.136 //这里的IP后面不用加点,因为系统可以
//自动识别这是一个IP地址,而不是一个域名。
136(系统会自动补全为:192.168.28.136) PTR dns1.qq.com.
//这里必须要在最后加上点,
//否则系统补全时会自动加上 37.168.192.in-addr.arpa 后缀。
//最后重新加载该服务即可:rndc reload
创建从DNS服务器只需要在从DNS服务器的/etc/named.rfc1912.zones文件里了添加以下内容即可:
zone "ZONE.NAME" IN { //域名必须要和主DNS服务器里设置的一样。
type slave; //因为是从服务器,所以类型要设为 slave。
masters { 主DNS服务器的IP地址; };
file "slaves/ZONE.NAME.zone.slave"
//从DNS服务器把从主DNS服务器上复制过来的文件放到了
// /var/named/slaves 目录下;文件名可以随意定义,
//复制到从服务器上时,系统会自动将复制来的文件名改为设定好的名称,
//但建议设置的名称最好能便于理解和识别。
};
设置好后重启服务即可!
最后需要在主DNS服务器上的/var/named/ZONE_NAME.zone 文件里添加将该从服务的NS记录;同时若想要实现主从服务器的数据同步,在修改好主服务器的/var/named/ZONE_NAME.zone 文件时,必须将该文件里的 序列号 增大才行,增大并保存退出后,主服务器会自动向从服务器推送(push)修改后的文件内容;
还以一点就是必须要将 从DNS服务器的 /etc/named.conf 文件中 options 字段中的 listen-on 与 allow-query 选项注释掉。
从服务器也可以作为其他从服务器的主服务器!!!
注意:
为了安全,在创建主从服务器时要在主DNS服务器上的/etc/named.conf 文件里的options内容里添加一个 allow-transfer { 从DNS服务器IP地址;}; ,意思就是只允许该IP地址的从DNS服务器与该主DNS服务器同步数据;在从DNS服务器上也要在相同的地方设置该选项 allow-transfer { none; }; ,意思就是不允许其他的DNS服务器从该从DNS服务器上同步或抓取DNS配置数据了。
从服务器在首次向主服务器拉(pull)数据时,是完全传输(传输整个解析库),其他时候都是增量传输(只传输改变的部分)。
DNS协议走udp协议的 53 端口既影响用户查询,也影响主从服务器的数据同步;而走TCP协议的 53 端口只影响主从服务器的数据同,不影响用户查询。
子域的创建分为两种,一种是子域与父域在同一主机上,另一种是子域与父域不在同一主机上。
//(1)子域与父域在同一主机上时:该方式适用于访问量较小的情况。
//直接在/var/named/ZONE_NAME.zone文件上进行修改即可。
[root@CentOS6 ~]# vim /var/named/qq.com.zone
$TTL 1D //定义缓存过期时间
@ IN SOA dns1 rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.28.136
www.henan A 192.168.28.137 //子域域名及IP地址
//然后重载该服务即可 rndc reload
说明:此时的子域实际上就是名为 www.henan 的主机,真正的域还是 qq.com 。
//(2)子域与父域不在同一主机上:该情况适用于访问量较大的情况。
//设置方法与设置父域的方式是一样的:
[root@CentOS6 ~]# vim /etc/named.rfc1912.zones
zone "henan.qq.com" IN {
type master;
file "henan.qq.com.zone";
};
//然后再创建/var/named/henan.qq.com.zone文件
[root@CentOS6 ~]# vim /var/named/henan.qq.com.zone
$TTL 1D
@ IN SOA dns1 rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
dns1 A 192.168.28.136
www A 22.22.22.22
然后保存退出,并重启该服务:rndc reload即可。
说明:该方法实际是有一个名为 henan.qq.com 的实际域,不是一个以 qq.com 的。
//(3)委派:就是将一个子域交给一个DNS服务器单独进行管理。
//委派的创建就是在主DNS服务器的/var/named/ZONE_NAME.zone 文件里
//添加一些内容即可:
[root@CentOS6 ~]# vim /var/named/qq.com.zone
$TTL 1D
@ IN SOA dns1 rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns1
henan NS dns2 //该NS记录的意思就是:以qq.com为主域的
// henna.qq.com 子域的DNS服务器的域名,
//并配合 A 记录解析其IP地址。
dns1 A 192.168.28.136
dns2 A 192.168.28.138
www A 22.22.22.22
//上面的父域设置好后,就需要在子域主机上的DNS服务配置文件上设置好
// henan.qq.com 域的配置文件即可。
//配置方法与创建 qq.com 域的方法是一样的。
[root@CentOS6 ~]# vim /etc/named.rfc1912.zones
zone "henan.qq.com" IN {
type master;
file "henan.qq.com.zone";
};
//设置完后再重启DNS服务即可:rndc reload 。
注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
//(1) 全局转发: 对非本机所负责解析区域的请求, 全转发给指定的服务器。
//直接在/etc/named.conf 文件的 options 字段中进行配置即可。
Options {
forward first|only; //如果该选项未显式设置,
//则默认为 first ,意为若该DNS服务器
//优先向转发服务器查询,若转发服务器
//查询不到时,就自己进行递归查询;
//若为 only ,意为不做递归,直接将请求
//转交给转发列表里的DNS服务器进行查询,
//若转发服务器里没有,则直接返回给客户端
//查询失败的结果。
forwarders { ip;}; //转发列表。
};
//(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高。
//设置方法是直接单独建立一个 zone 文件,
//但是要在 /etc/named.rfc1912.zones 文件中进行定义。
zone "ZONE_NAME" IN {
type forward; //类型。
forward first|only;
forwarders { IP地址;};
};
//注意:要关闭/etc/named.conf 文件中options字段中的dnssec选项:
//dnssec-enable no;
//dnssec-validation no;
//不使用安全认证机制,若开启服务不能正常进行。
(1)创建zone文件,与创建ZONE.NAME.zone文件的方式相同。
/var/named/qq.com.zone.nehan
/var/named/qq.com.zone.beijing
(2) 创建ACL
ACL要定义在 /etc/named.conf 文件中的 options 部分之前。
acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
格式:
acl acl_name {
ip; 单独的IP地址
net/prelen; 网段/掩码
……
};
示例:
acl henannet {
192.168.37.0/24;
192.168.38.0/24;
};
acl beijingnet {
172.17.0.0/16;
172.18.0.0/16;
};
(3)创建VIEW
view和ACL一样也都是要定义在 /etc/named.conf 文件中,一旦定义了 view ,则在该文件中定义的其他所有 zone 内容都将会失效,所以最好将这些 zone 内容全部都定义到 /etc/named.rfc1912.zones 文件中,然后再调用 /etc/named.rfc1912.zones 文件即可。
注意:
1) 一旦启用了view,所有的zone都只能定义在view中;
2) 仅在允许递归请求的客户端所在view中定义根区域;
3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表。
view:视图:
一个bind服务器可定义多个view,每个view中可定义一个或多个zone;
每个view用来匹配一组客户端;
多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件。
格式:
view VIEW_NAME {
match-clients { ACL_File; }; 定义好的相应ACL文件,可以放置多个。
zone “ZONE.NAME” { 指定允许的区域。
type master;
file “ZONE.NAME.zone”; };
include “/etc/named.rfc1912.zones”;
};
示例:
view beijingview {
match-clients { beijingnet;};
zone "qq.com" {
type master;
file "qq.com.zone.beijing";
};
zone "." IN {
type hint;
file "named.ca";
};
};
view henanview {
match-clients {henannet;};
include "/etc/named.rfc1912.zones.henan";
//将zone内容定义到该文件中,再对该文件进行调用,
//该文件可以被多次调用。
zone "." IN {
type hint;
file "named.ca";
};
};
view otherview { //为其他未被ACL包含的地址设置默认访问。
match-clients {any;};
include "/etc/named.rfc1912.zones";
};
(4)配置好 /var/named/ZONE_NAME.zone 文件即可,该文件名的命名规则与上面要求的一样,配置方式与普通的一样。
(5)最后重启服务进行测试即可。