最近一直在看非技术方面的书,对技术有的渐谈的感觉,正好买了一个thinkos.net 的域名.打算深入的学习一下DNS.

预期目标
1.自己建立解析服务器,并解析自己的域名,并做到安全,可靠

预期计划
                第一步:搞定自己的DNS服务器,使其能正常解析
                第二步:去代理商那里注册自建的DNS服务器
                第三步:进行功能测试,确定功能,其响应及处理能力.
                第四步:了解DNS服务器相关的安全性问题,加固
                第五步:做一台辅域名服务器

相关必要信息
       1. thinkos.net 是在万网的代理商那里买的(60块/年)
       2.有一台自己完全管控的服务器,并有公网IP(这个在双线IDC机房)
       3.NS 服务器是需要花钱在代理商那里注册后才能用的(购买价格约为20元每组)

第一步:建设自己的DNS 服务器
      1.yum 安装相关的软件包

        yum -y install  bind  bind-chroot bind-utils

      2.规划bind 配置文件的存放结构,
        服务器可能会解析多个域,我把相关数据文件和配置文件分开,
        还有就是请求的对像,比如内网的请求需要解析的内网IP,电信的请求需要解析的电信的IP
        所以要用到VIEW,方便简单的管理

      3.创建相关的配置文件
           1. /etc/named.conf  #bind9的主配置文件
           2. ../chroot/var/named/data/internal.conf  #针对内网的ZONE配置
           3. ../chroot/var/named/data/external.conf #针对非内网的查询ZONE配置文件
           4. ../chroot/var/named/data/thinkos.net  #非内网的查询用的域名数据库
           5. ../chroot/var/named/data/thinkos.zone  #内网的查询用的域名数据库
zone 数据文件内一部份放在../chroot/var/named/data/localzone下,thinkos域名相关的,则直接放在../chroot/var/named/data 下面

1.named.conf

options {
	directory "/var/named/data";
	dump-file "/var/named/data/cache_dump.db";
    	statistics-file "/var/named/data/named_stats.txt";
    	version "";
 	datasize 40M;
        recursion no;
        allow-query { any; };
	forwarders { 221.228.255.1;
			218.2.135.1;
			221.6.96.177;
			221.6.96.178;
			221.228.255.1;
			218.2.135.1;
			202.96.209.133;
			202.96.209.5; };

};

logging {
    channel default_syslog {
			     syslog local2;
			     severity debug;
			  };
    channel audit_log { file "/var/named/data/named.log";
			severity info;
			print-time yes;
			versions 3 size 1240k;
		      };

    category default { default_syslog; };
    category general { default_syslog; };
    category security { audit_log; default_syslog; };
    category config { default_syslog; };
    category resolver { audit_log; };
    category xfer-in { audit_log; };
    category xfer-out { audit_log; };
    category notify { audit_log; };
    category client { audit_log; };
    category network { audit_log; };
    category update { audit_log; };
    category queries { audit_log; };
    category lame-servers { audit_log; };
};

controls {
	inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};

include "/etc/rndc.key";

view "internal" {
        match-clients { 10.11.10.0/24; };
        recursion no; 

include "internal.conf";
};

view "external" {
        match-clients { any; };
        recursion no; 

include "external.conf";
};

2.internal.conf

zone "." IN {
        type hint;
        file "localzone/named.ca";
};

zone "localdomain" IN {
        type master;
        file "localzone/localdomain.zone";
        allow-update { none; };
};

zone "localhost" IN {
        type master;
        file "localzone/localhost.zone";
        allow-update { none; };
};

zone "0.0.127.in-addr.arpa" IN {
        type master;
        file "localzone/named.local";
        allow-update { none; };
};

zone "255.in-addr.arpa" IN {
        type master;
        file "localzone/named.broadcast";
        allow-update { none; };
};

zone "0.in-addr.arpa" IN {
        type master;
        file "localzone/named.zero";
        allow-update { none; };
};

zone "thinkos.net" IN {
	type master;
         file "thinkos.zone";
         allow-update { none;};

};

3.external.conf

zone "." IN {
        type hint;
        file "localzone/named.ca";
};

zone "thinkos.net" IN {
      type master;
      file "thinkos.net";
      allow-update { none; };
};

4.thinkos.net

$TTL 300
@ IN SOA  dns.thinkos.net. root. (
                       2009021201   ;Serial
                       3600         ;Refresh ( seconds )
                       900          ;Retry ( seconds )
                       68400        ;Expire ( seconds )
                       15 )         ;Minimum TTL for Zone ( seconds )
        IN      NS     thinkos.net.
        IN      A      210.51.50.122
ns1     IN      A      210.51.50.122
dns     IN      A      210.51.50.122
www     IN      A      210.51.50.122
cacti   IN      A      210.51.50.122
 

5.thinkos.zone

$TTL 20
@ IN SOA  dns.thinkos.net. root. (
                       2009021201   ;Serial
                       3600         ;Refresh ( seconds )
                       900          ;Retry ( seconds )
                       68400        ;Expire ( seconds )
                       15 )         ;Minimum TTL for Zone ( seconds )
        IN      NS     thinkos.net.
        IN      A      10.11.10.254
ns1     IN      A     10.11.10.254
dns     IN      A     10.11.10.254
www     IN      A     10.11.10.254

     4.启动bind 并进行基本功能测试
           在另外一台机器上执行如下命令
                                   dig www.thinkos.net @ns1.thinkos.net
看如下的返回

; <<>> DiG 9.3.4-P1 <<>> www.thinkos.net @ns1.thinkos.net
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18686
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.thinkos.net.               IN      A

;; ANSWER SECTION:
www.thinkos.net.        300     IN      A       210.51.50.122

;; AUTHORITY SECTION:
thinkos.net.            300     IN      NS      thinkos.net.

;; ADDITIONAL SECTION:
thinkos.net.            300     IN      A       210.51.50.122

;; Query time: 113 msec
;; SERVER: 210.51.50.122#53(210.51.50.122)
;; WHEN: Thu Oct 29 09:09:41 2009
;; MSG SIZE  rcvd: 79

第二步:去代理商那里注册自建的DNS服务器

     这一步很复杂,复杂主要是跟域名提供商的沟通,一是我自己对某些概念不是很确定,二是客服啥也不懂,三是网站上的的体验很差,找了半天找不到相关的产品,找到了且还不能购买,后来根据他们的建议,直接找万网的人终于了解整个概念,和操作流程,后来他们手动在后台给我做了购买. 但也很简单,直接告诉他们你的NS 服务器的域名,和要对IP地址,他们给你注册一下,半个小时候可以在公网上解析得到,这一步就完成了. 相关的图

DNS

                               图<创建自己的DNS服务器>以万网一个代理商为例

dn1

                      图<到域名购买商修改解析地址为自己创建的NS服务器>

 

OK

                        图 <NS  服务器已成功在公网注册上,并已生效>

  注意: 我在自己建的DNS 服务器上是没有添加ns2.thinkos.net 这条记录的,可去看thinkos.net 文件进行确认.

第三步:进行功能测试,了解响应及处理能力.
1.确定NS 服务器已正常工作
       思路一、 解析一个A记录,跟踪其解析路径。比如 dig  www.thinkos.net +trace
       思路二、 指定多个DNS 服务器解析你的一个A记录比如 dig www.thinkos.net @221.228.255.1

dig www.thinkos.net +trace

; <<>> DiG 9.2.4 <<>> www.thinkos.net +trace
;; global options:  printcmd
.                       166869  IN      NS      G.ROOT-SERVERS.NET.
.                       166869  IN      NS      D.ROOT-SERVERS.NET.
.                       166869  IN      NS      E.ROOT-SERVERS.NET.
.                       166869  IN      NS      H.ROOT-SERVERS.NET.
.                       166869  IN      NS      L.ROOT-SERVERS.NET.
.                       166869  IN      NS      C.ROOT-SERVERS.NET.
.                       166869  IN      NS      A.ROOT-SERVERS.NET.
.                       166869  IN      NS      K.ROOT-SERVERS.NET.
.                       166869  IN      NS      J.ROOT-SERVERS.NET.
.                       166869  IN      NS      B.ROOT-SERVERS.NET.
.                       166869  IN      NS      F.ROOT-SERVERS.NET.
.                       166869  IN      NS      I.ROOT-SERVERS.NET.
.                       166869  IN      NS      M.ROOT-SERVERS.NET.
;; Received 512 bytes from 221.228.255.1#53(221.228.255.1) in 72 ms

net.                    172800  IN      NS      C.GTLD-SERVERS.net.
net.                    172800  IN      NS      F.GTLD-SERVERS.net.
net.                    172800  IN      NS      L.GTLD-SERVERS.net.
net.                    172800  IN      NS      I.GTLD-SERVERS.net.
net.                    172800  IN      NS      E.GTLD-SERVERS.net.
net.                    172800  IN      NS      J.GTLD-SERVERS.net.
net.                    172800  IN      NS      H.GTLD-SERVERS.net.
net.                    172800  IN      NS      B.GTLD-SERVERS.net.
net.                    172800  IN      NS      K.GTLD-SERVERS.net.
net.                    172800  IN      NS      A.GTLD-SERVERS.net.
net.                    172800  IN      NS      G.GTLD-SERVERS.net.
net.                    172800  IN      NS      D.GTLD-SERVERS.net.
net.                    172800  IN      NS      M.GTLD-SERVERS.net.
;; Received 490 bytes from 192.112.36.4#53(G.ROOT-SERVERS.NET) in 155 ms

thinkos.net.            172800  IN      NS      ns1.thinkos.net.
thinkos.net.            172800  IN      NS      ns2.thinkos.net.
;; Received 101 bytes from 192.26.92.30#53(C.GTLD-SERVERS.net) in 294 ms

www.thinkos.net.        300     IN      A       210.51.50.122
thinkos.net.            300     IN      NS      thinkos.net.
;; Received 79 bytes from 210.51.50.122#53(ns1.thinkos.net) in 29 ms

dig www.thinkos.net @221.228.255.1

; <<>> DiG 9.2.4 <<>> www.thinkos.net @221.228.255.1
; (1 server found)
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63334
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.thinkos.net.               IN      A

;; ANSWER SECTION:
www.thinkos.net.        138     IN      A       210.51.50.122

;; AUTHORITY SECTION:
thinkos.net.            138     IN      NS      ns1.thinkos.net.

;; ADDITIONAL SECTION:
ns1.thinkos.net.        70315   IN      A       210.51.50.122

;; Query time: 0 msec
;; SERVER: 221.228.255.1#53(221.228.255.1)
;; WHEN: Thu Oct 29 14:31:45 2009
;; MSG SIZE  rcvd: 83

这里有两个点值得说一下,
一是 ns1.thinkos.net.本来应该返回为thinkos.net.这里返回为ns1.thinkos.net的原因为我更改了thinkos.net 里的
IN      NS     thinkos.net. 为 IN      NS   ns1.thinkos.net

二是138这个数字是是TTL 值,单位为秒。比如在我的thinkos.net 里的设置为
$TTL 300
@ IN SOA  ns1.thinkos.net. root.
     DNS中TTL值的主要作用是为每一条记录设置一个存活时间,互联网上的缓存DNS服务器在查询到这条记录之后都会将TTL值缓存到本地,这样做一是提高DNS解析的速度,二是降低网络流量。这个值如果设得过大,如果你记录有更新,互联网上DNS对这条变更的记录生效的就慢,如果设得过小,其它服务器会因时间过短而查不到。更多请看bind9官方文档   这里有中文

2.了解响应时间