acl acl名 {
192.168.7.0/24;
可以包含其他的acl,被包含的必须在前面,程序是由上而下读取,匹配则退出acl规则
定义一个访问控制列表,用于以后对列表中的IP进行访问控制.放在配置文件的顶部
};
options {
设置DNS服务器的全局配置选项
};
logging {
设置日志服务器,以及日志信息的发送位置
};
server {
定义了与远程服务器交互的规则.语句可以出现在配置文件的顶层,也可以出现在view语句的内部。
如果一个view语句包括了自己的server语句,则只有那些view语句内的server语句才起作用,顶层的server语句将被忽略。
如果一个view语句内不包括server语句,则顶层server语句将被当做默认值
写法:
server 192.168.7.254 { keys hunk-tech-key; };
};
zone "." IN {
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
};
view 视图名 {
定义一个视图,一但开启了视图功能,所有的zone区域必须要在view里定义
};
include 把另一个文件中的内容包含进来做为主配置文件的内容
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
listen-on port 53 { 127.0.0.1; };#定义监听IPV4端口及IP地址,如果是本机所有地址,填写localhost
listen-on-v6 port 53 { ::1; };#定义监听IPV6端口及IP地址,如果是本机所有地址,填写localhost
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; };#允许查询的IP地址,可以填写网段192.168.4.0/24
allow-transfer { none; };#允许哪些从DNS服务器IP进行复制,"none" 表示禁止区域传输
recursion yes;#是否允许递归查询
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
在named配置文件中,可以使用以下3种风格的注释符号
C style: /* */
C++ style: // to end of line
Unix style: # to end of line
主配置文件语法检查命令
named-checkconf 或 service named configtest测试配置文件语法格式。没有提示表示正确 以域名hunk.tech为例配置一个DNS服务器
正向区域 所谓的正向区域,指的是 FQDN > IP 转换
创建正向区域步骤 1./etc/named.rfc1912.zones文件,添加一个区域
#vim /etc/named.rfc1912.zones
zone "hunk.tech" IN {
type master;
file "named.hunk.tech";
allow-update { none; };
};
配置文件的格式是每行后面都必须加分号结束,并且有花括号的地方,花括号两边必须要有空格
type: 用于定义区域类型,此时只有一个DNS服务器,所以为master,type可选值为:hint(根)|master(主的)|slave(辅助的)|forward(转发)
file:用于定义区域数据文件路径,默认该文件保存在/var/named/目录。 2.在主配置文件中定义的全局中directory设置参数的目录中创建该区域数据库文件
所属组必须为named,且权限为640安全。所以建议复制一个原有的模板进行修改。
#cp -p named.localhost named.hunk.tech必须加-p保留原有权限属性,
-rw-r-----. 1 root named 152 Jun 21 2007 named.hunk.tech
3.在建该区域数据库文件定义资源记录
资源记录的格式:
name [ttl] IN RRtype Value
资源记录名 有效时间 IN 类型 资源记录的值
文件内容如下:
$TTL 600
@ IN SOA 6-DNS-1 admin.hunk.tech. (
0 ; Serial版本号,RFC1912 2.2建议的格式为YYYYMMDDnn 其中nn为修订号2018011801,不能超过10位。每次更改都要在原来的基础上加上1
2H ; 刷新时间,设置辅助 DNS多长时间与主 DNS进行Serial核对,此处为2小时。只通知给本区域解析库文件中定义NS记录的所有主机
10M ; 重试时间,应该小于刷新时间,当辅助 DNS试图获取主 DNS Serial时,如果主 DNS未响应,多长时间重新进行检查
1D ; 决定辅助 DNS在没有主 DNS的情况下权威地提供域名解析服务的时间长短
3H ) ; 在8.2版本之前,由于没有独立的 $TTL 指令,所以通过 SOA 最后一个字段来实现。但由于 BIND 8.2 后出现了 $TTL 指令,
该部分功能就不再由 SOA 的最后一个字段来负责,由 $TTL 全权负责,SOA 的最后一个字段专门负责 否定回答 ttl
@ IN NS 6-DNS-1
@ IN NS 6-DNS-2
6-DNS-1 IN A 192.168.4.200
6-DNS-2 IN A 192.168.4.201
6-WEB-1 IN A 192.168.4.205
www IN CNAME 6-WEB-1
@ IN MX 10 mail
mail IN A 192.168.4.205
解读下:
$TTL 600 表示下面资源记录ttl的值都为600秒。下面的每一条记录都是可以继承这行值的。
不带单位指的是秒,支持这些时间格式:D 天;H 小时;M 分钟;
@ IN SOA 6-DNS-1 admin.hunk.tech
SOA: 只能有一个,而且必须是第一个资源记录。SOA记录定义了一个域内的主DNS是谁
@: 通常可以简写为@,代表该区域名称,
6-DNS-1: 主DNS服务器的FQDN,这里会自动补全此域后缀。第二种写法6-DNS-1.hunk.tech. 注意最后这个点是必须加的。
admin.hunk.tech: 此域的管理理邮件地址。@有特殊意义,所以用.表示
@
特殊字符“ @ ”,它就是 ORIGIN 的意思, $ORIGIN 后面定义的内容,如:$ORIGIN hunk.tech. 那之后使用 @ 来代替hunk.tech。
假如这个档前面没有定义 $ORIGIN 的话,那这个 @ 的值就以 named.conf 里的 zone 为准。
@ IN NS 6-DNS-1
@ IN NS 6-DNS-2
NS: 可以有多条,定义了这一个区域哪些是DNS服务器
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
6-DNS-1 IN A 192.168.4.200
6-DNS-2 IN A 192.168.4.201
6-WEB-1 IN A 192.168.4.205
A: 只能定义在正向区域文件中
一行记录定义一台主机对应的IP地址
$GENERATE 1-9 HOST$ A 1.2.3.$ 定义了一组数字范围。$GENERATE 1-9定义了$的值为1-9,
后面的$引用的就是的列表值,效果如下
HOST1.hunk.tech. 600 IN A 1.2.3.1
HOST2.hunk.tech. 600 IN A 1.2.3.2
HOST3.hunk.tech. 600 IN A 1.2.3.3
HOST4.hunk.tech. 600 IN A 1.2.3.4
HOST5.hunk.tech. 600 IN A 1.2.3.5
HOST6.hunk.tech. 600 IN A 1.2.3.6
HOST7.hunk.tech. 600 IN A 1.2.3.7
HOST8.hunk.tech. 600 IN A 1.2.3.8
HOST9.hunk.tech. 600 IN A 1.2.3.9
*.hunk.tech. IN A 5.5.5.5 泛域名.可以用来防止用户输入错误的信息而能正确跳转。
比如说,wwwwwwww.hunk.tech 和www.hunk.tech 同样是指向5.5.5.5
多条A记录指向不同的IP的话,等同使用DNS做负载均衡
如:
WEB A 1.1.1.1
WEB A 2.2.2.2
6-WEB-1 IN AAAA 1000::A:B:0:0
AAAA:IPV6的资源记录
@ IN MX 10 mail
MX: 可以有多个
用于标识smtp服务器
包含优先级和FQDN。优先级:0-99,数字越小,级别越高;
www IN CNAME 6-WEB-1
CNAME: 可以有多个
用于指定某台主机的别名
每一台主机都必须要有A记录指向。
4.区域添加好后,使用区域库命令检查:
语法格式
named-checkzone "区域名称" "区域文件"
#named-checkzone hunk.tech /var/named/named.hunk.tech
zone hunk.tech/IN: loaded serial 0
OK 5.重新加载数据库信息
rndc reload
使用rndc命令。请参考rndc命令。 反向区域 所谓的反向区域,指的是 IP > FQDN 转换
专业名词:PTR
zone "4.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.4";
allow-update { none; };
}; 2.在主配置文件中定义的全局设置中/var/named的目录中创建该区域数据库文件
所属组必须为named,且权限为640安全。所以建议复制一个原有的模板进行修改。
zone "ZONE_NAME" IN {
type forward;
forward first 或 only;
forwarders { ip;可以有多个,用;号隔开};
};
如:
zone "hunk.com" IN {
type forward;
forward only;
forwarders { 192.168.4.204; };
};
转发选项:
first :默认值。服务器首先请求转发列表中的设定的DNS主机 ,如果转发列表中的DNS主机不应答,该主机将自己从根DNS开始找应答。
only:只会请求转发列表中的设定的DNS主机 ,如果转发列表中的DNS主机不应答。也不会继续找其他应答。 两种查询方法与根提示 从客户端到本地DNS服务器是属于递归查询,而DNS服务器之间就是迭代查询
(1) 一旦启用了view,所有的zone都只能定义在view中
(2) 仅在允许递归请求的客户端所在view中定义根区域
(3) 客户端请求到达时,是自上而下检查每个view所服务的客户端列表
语法格式:
view VIEW_NAME {
match-clients { ACL名称; };
zone hunk.tech {
type master;
file “named.hunk.tech”; };
include "/etc/named.rfc1912.zones";
};
以下用一个实例来看ACL与view的搭配使用吧。不同地址解析不同的IP,即智能DNS
1.定义好ACL地址范围,DNS读取的时候,是由上往下匹配,所以,any必须放至最后
acl acl_net_192 { 192.168.4.0/24; };
acl acl_net_172 { 172.18.0.0/16; };
acl acl_other { any; };
2.把公共相关的合并至/etc/named.rfc1912.zones文件
zone "." IN {
type hint;
file "named.ca";
};
3.各个zone文件内容如下:注意www对应的IP
#vim named1.hunk.tech
$TTL 600 ; 10 minutes
@ IN SOA 6-DNS-1 admin (
24 ; serial
720 ; refresh (2 hours)
600 ; retry (10 minutes)
86400 ; expire (1 day)
10800 ; minimum (3 hours)
)
NS 6-DNS-1
6-DNS-1 A 192.168.4.200
6-WEB-1 A 1.1.1.1 #主要是观察这里
www CNAME 6-WEB-1
---------------------------------------------------------------------------
#vim named2.hunk.tech
$TTL 600 ; 10 minutes
@ IN SOA 6-DNS-1 admin (
24 ; serial
720 ; refresh (2 hours)
600 ; retry (10 minutes)
86400 ; expire (1 day)
10800 ; minimum (3 hours)
)
NS 6-DNS-1
6-DNS-1 A 192.168.4.200
7-WEB-3 A 2.2.2.2 #主要是观察这里
www CNAME 7-WEB-3
------------------------------------------------------------------------------------------
#vim named3.hunk.tech
$TTL 600 ; 10 minutes
@ IN SOA 6-DNS-1 admin (
24 ; serial
720 ; refresh (2 hours)
600 ; retry (10 minutes)
86400 ; expire (1 day)
10800 ; minimum (3 hours)
)
NS 6-DNS-1
6-DNS-1 A 192.168.4.200
6-WEB-1 A 9.9.9.9 #主要是观察这里
www
4.在主配置文件/etc/named.conf定义view
view net_192 {
match-clients { acl_net_192; };
zone "hunk.tech" {
type master;
file "named1.hunk.tech";
};
include "/etc/named.rfc1912.zones";
};
view net_172 {
match-clients { acl_net_172; };
zone "hunk.tech" {
type master;
file "named2.hunk.tech";
};
include "/etc/named.rfc1912.zones";
};
view net_other {
match-clients { acl_other; };
zone "hunk.tech" {
type master;
file "named3.hunk.tech";
};
include "/etc/named.rfc1912.zones";
};
include "/etc/named.root.key";
5.检查语法:
#named-checkconf
#named-checkzone hunk.tech named1.hunk.tech
zone hunk.tech/IN: loaded serial 24
OK
#named-checkzone hunk.tech named2.hunk.tech
zone hunk.tech/IN: loaded serial 24
OK
#named-checkzone hunk.tech named3.hunk.tech
zone hunk.tech/IN: loaded serial 24
OK
只需要安装yum install bind-chroot
之后会将原有目录与配置文件使用BIND重新挂载到/var/named/chroot/下面
使用mount可以看出来
/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.conf on /var/named/chroot/etc/named.conf type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)
/etc/services on /var/named/chroot/etc/services type none (rw,bind)
/etc/protocols on /var/named/chroot/etc/protocols type none (rw,bind)
/lib64/libnss_files-2.12.so on /var/named/chroot/lib64/libnss_files.so.2 type none (rw,bind)