ubuntu17.04自建dns服务器---bind的安装和配置

  1. 下载安装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

你可能感兴趣的:(ubuntu17.04自建dns服务器---bind的安装和配置)