- 下载安装bind
apt-get install bind9
2.配置bind
-
2.1 文件结构
root@cnsz92vl01921:~# cd /etc/bind
root@cnsz92vl01921:/etc/bind# ll
total 64
drwxr-sr-x 3 root bind 4096 Oct 31 18:40 ./
drwxr-xr-x 99 root root 4096 Oct 31 16:32 ../
-rw-r--r-- 1 root root 3954 Jan 16 2018 bind.keys
-rw-r--r-- 1 root root 237 Jan 16 2018 db.0
-rw-r--r-- 1 root root 271 Jan 16 2018 db.127
-rw-r--r-- 1 root root 237 Jan 16 2018 db.255
-rw-r--r-- 1 root root 353 Jan 16 2018 db.empty
-rw-r--r-- 1 root root 270 Jan 16 2018 db.local
-rw-r--r-- 1 root root 3171 Jan 16 2018 db.root
-rw-r--r-- 1 root bind 463 Jan 16 2018 named.conf
-rw-r--r-- 1 root bind 490 Jan 16 2018 named.conf.default-zones
-rw-r--r-- 1 root bind 346 Oct 31 18:40 named.conf.local
-rw-r--r-- 1 root bind 172 Oct 31 14:10 named.conf.options
-rw-r----- 1 bind bind 77 Oct 31 13:37 rndc.key
drwxr-s--- 2 root bind 4096 Oct 31 19:30 zones/
-rw-r--r-- 1 root root 1317 Jan 16 2018 zones.rfc1918
进入bind的主配置文件夹,bind读取的配置文件是named.conf,其内容为三个include,配置是分散在三个文件中。
root@cnsz92vl01921:/etc/bind# cat named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
named.conf.options
存放的程序本身的一些设置
root@cnsz92vl01921:/etc/bind# cat named.conf.options
acl "trusted"{ //初始化一个名为"trusted"列表,里面存放着ip段,这里为所有ip
any;
};
options {
recursion yes; //开启dns递归解析
allow-recursion {trusted;}; //允许递归解析的ip列表
listen-on {any;}; //侦听可以获取的网络上任何ip的dns请求
allow-transfer{none;};
forwarders{ //转发dns请求
114.114.114.114;
};
};
named.conf.local
存放着一些域的定义,譬如下面有一个叫做 sit.cmft.com
的域,当需要解析的是*.sit.cmft.com
这样的域名,就会使用该域进行查找,域名和ip的对应信息存储在数据库文件/etc/bind/zones/db.sit.cmft.com
中
root@cnsz92vl01921:/etc/bind# cat named.conf.local
zone "sit.cmft.com"{
type master;
file "/etc/bind/zones/db.sit.cmft.com";
};
而named.conf.default-zones
中是存放着一些系统的默认的域定义,譬如 localhost
root@cnsz92vl01921:/etc/bind# cat /etc/bind/named.conf.default-zones
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
-
2.2 配置一个域名
- 2.2.1 概述
在本机上搭建一个dns服务器,配置一个叫做testing.example.com
的域名的ip为1.1.1.1
- 2.2.2 设置服务器配置
在配置文件中named.conf.options
添加如下内容设置程序属性,该文件的主要配置含义都如下所示,其中注意:
listen-on {any;};
这里原本是listen-on 53 { any;};,默认为53端口,所以可以省略,这个any不代表整个网络上所有的包都能拿到,而是服务器主机网卡所有可以接触到的53端口的包都会被监听。
root@cnsz92vl01921:/etc/bind# cat named.conf.options
acl "trusted"{ //初始化一个名为"trusted"列表,里面存放着ip段,这里为所有ip
any;
//192.168.0.0/24; //添加192.168.0.X整个网段
};
options {
recursion yes; //开启dns递归解析
allow-recursion {trusted;}; //允许递归解析的ip列表
listen-on {any;}; //侦听可以获取的网络上任何ip的dns请求
allow-transfer{none;};
forwarders{ //对于本地无法解析的域名记录,转发公网dns请求
114.114.114.114;
};
};
- 2.2.3 定义一个域
named.local.conf
中的内容如下所示,定义了一个名example.com
的域,所有*.example.com
的域名都会来通过这个域的数据库文件/etc/bind/zones/db.example.com
进行解析
root@cnsz92vl01921:/etc/bind# cat named.conf.local
zone "example.com"{
type master;
file "/etc/bind/zones/db.example.com";
}
使用named-checkconf
检查配置文件是否有无法错误
root@cnsz92vl01921:~# named-checkconf
- 2.2.4 编写域的数据库文件
在2.2.3中定义域中所写的路径下创建文件db.example.com
( 名字、路径可以任意,但一定要和定义域中写的路径保持一致), 文件内容如下所示
root@cnsz92vl01921:/etc/bind/zones# cat db.example.com
$TTL 604800 //告知请求端,这些域名对应的ip的有效时间为604800
@ IN SOA nameserver1.example.com. wangys003.cmft.com. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; A records
@ IN NS nameserver1.example.com.
@ IN NS nameserver2.example.com.
nameserver1.example.com. IN A 100.69.149.20
nameserver2.example.com. IN A 100.69.149.21
testing.example.com. IN A 1.1.1.1
$TTL 604800
域名的ip对应的有效时间
@ IN SOA n1.example.com. wangys003.cmft.com. (...)
定义这个域的一些属性
@
是使用这个文件的域的简写,在这里就是exmple.com.
,
IN
表示是internet类型(还有其它的类型),
SOA n1.example.com.
表示域example.com
的主名称服务器是nameserver1.example.com
,dns服务器类型分为三类,其中主要的是主名称服务器和从名称服务器,前者是从本地的数据文件获取域名的ip,而后者是从前者获取这些数据文件,也许是从服务器上的文件出于需要更新的缘故?所以需要在数据文件中标识出主名称服务器是什么?
@ IN NS nameserver1.example.com.
@
是域example.com.的简写
NS nameserver1.example.com.
,表示这个域的名称服务器是nameserver1.example.com
当遇到一个域名为 ***.example.com
的时候,譬如testing.example.com
将会从本地数据文件解析,如果超时或者不存在就会在去名称服务器上更新/获取。(猜测)
此外,NS还有子域转发的作用
nameserver1.example.com. IN A 100.69.149.20
表明nameserver1.example.com.
对应的address为 100.69.149.20
testing.example.com. IN A 1.1.1.1
表明testing.example.com.
对应的address为 1.1.1.1
检查数据库文件是否有写错
root@cnsz92vl01921:~# named-checkzone example.com /etc/bind/zones/db.example.com
zone example.com/IN: loaded serial 2
OK
- 2.2.5 测试
重启bind 服务器
root@cnsz92vl01921:~# /etc/init.d/bind9 restart
[ ok ] Restarting bind9 (via systemctl): bind9.service.
可以修改本机的/etc/resolve.conf文件修改dns服务器地址进行测试,也可以使用dig指令进行测试, 指令格式为 : dig 域名 @dns服务器地址
,由于此处dns的服务器是搭建在本地,所以使用了127.0.0.1,
root@cnsz92vl01921:/etc/bind# dig testing.example.com @127.0.0.1
; <<>> DiG 9.10.3-P4-Ubuntu <<>> testing.example.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53940
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;testing.example.com. IN A
;; ANSWER SECTION:
testing.example.com. 604800 IN A 1.1.1.1 #所设定好的地址
;; AUTHORITY SECTION:
example.com. 604800 IN NS nameserver2.example.com.
example.com. 604800 IN NS nameserver1.example.com.
;; ADDITIONAL SECTION:
nameserver1.example.com. 604800 IN A 100.69.149.20
nameserver2.example.com. 604800 IN A 100.69.149.21
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Nov 01 20:14:01 CST 2018
;; MSG SIZE rcvd: 148