基于BIND9搭建DNS系统先从学习配置标准权威区开始。
一、配置named.conf
下面named.conf是实现最简单的权威主区test.com的举例,关于多视图智能权威解析以及主辅权威区等内容咱们后续再慢慢介绍,先从这个简单的例子了解权威区的含义和区(zone)文件的格式。
key "rndc-key" {
algorithm hmac-sha256;
secret "AXeCgzN/af9naYrVgtmdBkBEO2XYDl4k+rlq3dICfrY=";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
options {
directory "/usr/local/bind/var/run";
pid-file "named.pid";
recursion yes;
allow-query { any; };
listen-on port 53 { any; };
};
//创建test.com权威区
zone "test.com" {
type master;
file "test.com.zone";
};
named.conf中配置权威区需要注意的细节如下:
- 使用zone语句定义权威区的名称,并用花括号括起来,记得末尾的分号,否则报错。
- 子语句中首先必须包含type关键字,type的常用类型可以是master(代表主区)、slave(代表辅区)、forward(转发区)、hint(根名字服务器集合)、static-stub(静态存根区)、stub(存根区)、redirect(重定向区)。
- 区选项file用来指定test.com区文件的名称和位置,如果没有指定路径则此文件应该在options选项中directory设置的目录中。
- 还有很多其他的区选项可以配置,这里先不做详细介绍,后续具体场景专题中单独介绍,例如allow-notify、allow-query、allow-update、also-notify、check-names、forwards、server-addresses等区选项。
二、创建区(zone)文件
在指定的目录下创建zone文件名称test.com.zone内容如下。
$TTL 3h
@ IN SOA dns1.test.com. manager.test.com. (
1 ;Serial
3h ;Refresh after 3 hours
1h ;Retry after 1 hour
1w ;Expire after 1 week
1h) ;Negative caching TTL of 1 hour
;
@ IN NS dns1.test.com.
@ IN NS dns2.test.com.
;
;server domain
;
dns1 3600 IN A 111.10.10.10
dns2 3600 IN A 111.10.10.20
www 300 IN A 101.10.10.10
hello 20 IN A 101.10.10.20
a 20 IN CNAME hello
mail 300 IN A 101.10.10.30
;
;mail server
;
@ 3600 IN MX 10 mail
;
;example defaut TTL
$TTL 50
b IN A 1.1.1.1
区文件的相关说明如下:
- 第一行以
$TTL 3h
开始,此行设置了域名记录的默认TTL值,如果整个zone文件中没有其他的同类TTL默认设置,那么这个就是全局的域名默认TTL设置。BIND8.2之前的版本是用区的SOA记录额的最后一个字段来设置默认TTL,RFC2308发布后,SOA的最后一个字段是否定缓存TTL。 - 第二行是test.com区的SOA记录(start of authority,起始授权机构),一个区文件中必须有而且只能有一个SOA记录。dns1.test.com是test.com的master名称服务器(DNS)的名称。manager.test.com是区域负责人的邮件地址,把第一个点替换成@则为manager@test.com。后面括号内的大部分字段都是供slave(辅)服务器用的,后面我们专题介绍。
@
是一种简写方法,这个位置等同于test.com,bind启动后会把zone名称作为一种“来源域名”引入,在zone中的域名如果与来源域名相同,那么这个域名就可以简写为@
。- 上面提到的“来源域名”会附加在zone文件中的每个记录名称后面,所以zone文件中例如www.test.com域名就可以简写为www,bind会自动的附加这个来源域名后缀。当然我们在zone文件中直接写www.test.com.也是可以的,注意域名后面有一个(“.”),否则域名其实是www.test.com.test.com
- 分号开头代表注释,适当的空行和注释对zone文件的维护有好处。
- b.test.com域名上
$TLL 50
代表从这往下的域名如果没有指定TTL则默认TTL为50秒。
三、合规检验
完成zone文件配置后可以使用bind自带的检查工具对zone文件配置合规性进行检查,检查举例如下:
[root@localhost sbin]# ./named-checkzone test.com ../var/run/test.com.zone
zone test.com/IN: loaded serial 1
OK
named-checkzone是bind自带的工具,用于检查zone文件合规,结果是OK代表zone文件能正常加载,解析测试如下
[root@localhost ~]# dig @192.168.3.160 test.com ns
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> @192.168.3.160 test.com ns
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7719
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.com. IN NS
;; ANSWER SECTION:
test.com. 10800 IN NS dns2.test.com.
test.com. 10800 IN NS dns1.test.com.
;; ADDITIONAL SECTION:
dns1.test.com. 3600 IN A 111.10.10.10
dns2.test.com. 3600 IN A 111.10.10.20
;; Query time: 0 msec
;; SERVER: 192.168.3.160#53(192.168.3.160)
;; WHEN: Tue Jun 16 09:01:01 EDT 2020
;; MSG SIZE rcvd: 107