您的位置:首页 > 其它

RHEL下的DNS服务的整理扎记

2012-08-06 01:30 246 查看
轻轻的抱怨一下啊,我才95,做不了体力活,这个暑假累死我了。周末终于有空而且不累。but一个简单的问题我整了一个晚上,系统装了两遍,真是不细心啊。
在rhel6.2-X86-64位上终于弄好了,DNS,可以自由的用自己本机搭建的DNS服务器上网咯。下面的目标是把,ftp,httpd,代理,samba,ldap,ssl,邮件等都整合在一起方便学习。
现在把整个过程跟大家分享一下。

DNS用什么作用,这个就不说了,方便记录ip吧。毕竟名字比数字好记。
bind是dns的名字服务器,bind的主要功能其实主要的功能就是收集整理zone。在dns中一定要区分,zone与domain,两者的关系。比如说example.com这个domain(域),其zone可以很多个(可以有多个不同的主zone,和从zone)。zone可以用来表达zone但不是唯一的,domain有一定的唯一性。
理解完这个之后再来看, dns是什么结构,c/s的树形结构。有最顶端根的概念即配置文件中的“ . ”。旗下的top domain有好多我们都很熟悉,如.com ,.org,.net,等等。上边的example.com其实就是.com的子域(subdomain).
基于这个的结构,dns的查询方式如下。如果小明第一次访问www.baidu.com.那么本地的dns缓存肯定没有baidu的信息。那么会怎么样呢,直接将www.baidu.com发送到本地的域名服务器上看看能不能解释。如果也不能,那么本地的DNS就会将请求提交到最顶级的DNS,问他“你知道www.baidu.com吗”他看了看,查了一下”电话簿“(zone)说“你可以去找.com这个人他应该会知道”。然后就打电话给com说“你知道www.baidu.com吗?” 他也看看了,也找了电话簿(zone)说“你去找baidu.com”,小明于是继续拿着电话找了baidu.com,百度一下子就从床上跳下来说,“我来咯”。

以上的步骤如下:
###########准备:先找到一下根DNS用本机的DNS来查。
[root@kikupotter ~]# dig

; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20650
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 14

;; QUESTION SECTION:
;. IN NS

;; ANSWER SECTION:
. 516964 IN NS f.root-servers.net.
. 516964 IN NS i.root-servers.net.
. 516964 IN NS e.root-servers.net.
. 516964 IN NS d.root-servers.net.
. 516964 IN NS c.root-servers.net.
. 516964 IN NS k.root-servers.net.
. 516964 IN NS g.root-servers.net.
. 516964 IN NS j.root-servers.net.
. 516964 IN NS m.root-servers.net.
. 516964 IN NS h.root-servers.net.
. 516964 IN NS l.root-servers.net.
. 516964 IN NS b.root-servers.net.
. 516964 IN NS a.root-servers.net.

;; ADDITIONAL SECTION:
a.root-servers.net. 603364 IN A 198.41.0.4
a.root-servers.net. 603364 IN AAAA 2001:503:ba3e::2:30
b.root-servers.net. 603364 IN A 192.228.79.201
c.root-servers.net. 603364 IN A 192.33.4.12
d.root-servers.net. 603364 IN A 128.8.10.90
d.root-servers.net. 603364 IN AAAA 2001:500:2d::d
e.root-servers.net. 603364 IN A 192.203.230.10
f.root-servers.net. 603364 IN A 192.5.5.241
f.root-servers.net. 603364 IN AAAA 2001:500:2f::f
g.root-servers.net. 603364 IN A 192.112.36.4
h.root-servers.net. 603364 IN A 128.63.2.53
h.root-servers.net. 603364 IN AAAA 2001:500:1::803f:235
i.root-servers.net. 603364 IN A 192.36.148.17
i.root-servers.net. 603364 IN AAAA 2001:7fe::53

;; Query time: 0 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Mon Aug 6 00:30:34 2012
;; MSG SIZE rcvd: 512
#####################现在来查询www.baidu.com

[root@kikupotter ~]# dig www.baidu.com @a.root-servers.net.

; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> www.baidu.com @a.root-servers.net.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34133
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.baidu.com. IN A

;; AUTHORITY SECTION:
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.

;; ADDITIONAL SECTION:
a.gtld-servers.net. 172800 IN A 192.5.6.30
a.gtld-servers.net. 172800 IN AAAA 2001:503:a83e::2:30
b.gtld-servers.net. 172800 IN A 192.33.14.30
b.gtld-servers.net. 172800 IN AAAA 2001:503:231d::2:30
c.gtld-servers.net. 172800 IN A 192.26.92.30
d.gtld-servers.net. 172800 IN A 192.31.80.30
e.gtld-servers.net. 172800 IN A 192.12.94.30
f.gtld-servers.net. 172800 IN A 192.35.51.30
g.gtld-servers.net. 172800 IN A 192.42.93.30
h.gtld-servers.net. 172800 IN A 192.54.112.30
i.gtld-servers.net. 172800 IN A 192.43.172.30
j.gtld-servers.net. 172800 IN A 192.48.79.30
k.gtld-servers.net. 172800 IN A 192.52.178.30
l.gtld-servers.net. 172800 IN A 192.41.162.30

;; Query time: 408 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Mon Aug 6 00:32:52 2012
;; MSG SIZE rcvd: 503
#########################上一步的结果是只拿到了.com的A记录,进行第二次查询
[root@kikupotter ~]# dig www.baidu.com @a.gtld-servers.net.

; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> www.baidu.com @a.gtld-servers.net.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47144
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.baidu.com. IN A

;; AUTHORITY SECTION:
baidu.com. 172800 IN NS dns.baidu.com.
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.

;; ADDITIONAL SECTION:
dns.baidu.com. 172800 IN A 202.108.22.220
ns2.baidu.com. 172800 IN A 61.135.165.235
ns3.baidu.com. 172800 IN A 220.181.37.10
ns4.baidu.com. 172800 IN A 220.181.38.10

;; Query time: 393 msec
;; SERVER: 192.5.6.30#53(192.5.6.30)
;; WHEN: Mon Aug 6 00:34:09 2012
;; MSG SIZE rcvd: 167
############################这一次是查到了baidu.com 但不是想要的我们要的是ip
但是结果给出了baidu.com的DNS ,那么我们直接用他的DNS来查询最后的www.baidu.com
[root@kikupotter ~]# dig www.baidu.com @dns.baidu.com.

; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> www.baidu.com @dns.baidu.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58242
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;www.baidu.com. IN A

;; ANSWER SECTION:
www.baidu.com. 1200 IN CNAME www.a.shifen.com.

;; AUTHORITY SECTION:
a.shifen.com. 86444 IN NS ns7.a.shifen.com.
a.shifen.com. 86444 IN NS ns5.a.shifen.com.
a.shifen.com. 86444 IN NS ns9.a.shifen.com.
a.shifen.com. 86444 IN NS ns4.a.shifen.com.

;; ADDITIONAL SECTION:
ns4.a.shifen.com. 86444 IN A 123.125.113.67
ns5.a.shifen.com. 86466 IN A 220.181.3.178
ns7.a.shifen.com. 86477 IN A 220.181.38.47
ns9.a.shifen.com. 86499 IN A 61.135.166.226

;; Query time: 95 msec
;; SERVER: 202.108.22.220#53(202.108.22.220)
;; WHEN: Mon Aug 6 00:35:36 2012
;; MSG SIZE rcvd: 194

看到了么。baidu搞了个cname ,cname左边是别名右边才是真名,对应的A记录我们看到了 这样我们就查到baidu的ip了。说明DNS成功解析。

下面要开始介绍,bind如可实现DNS的功能。
安装bind:
[root@kikupotter ~]# rpm -qa | grep bind
bind-9.7.3-8.P3.el6.x86_64
bind-libs-9.7.3-8.P3.el6.x86_64
bind-utils-9.7.3-8.P3.el6.x86_64
bind-chroot-9.7.3-8.P3.el6.x86_64
这几个包要装。第一个包是主程序,bind;第二是库,第三个是工具,如上面用的dig;第四个是用来实现安全运行而整出来的一个空间,将bind放在chroot下运行。
selinux说明:
named_conf_t 配置文件的上下文。
named_zone_t zone文件的上下文。
文件属组一定要named组。用户是root。(我的问提就是出现在区域文件没有属于named组,搞死我了,日志文件如下)
######这是配置文件没有属于named_conf_t
Aug 5 04:59:24 kikupotter named[32208]: none:0: open: /etc/named.conf: permission denied
Aug 5 04:59:24 kikupotter named[32208]: loading configuration: permission denied
Aug 5 04:59:24 kikupotter named[32208]: exiting (due to fatal error)

######这是组没有属于named组。
Aug 5 12:41:29 kikupotter named[3572]: zone example.com/IN: loading from master file example.com.zone failed: permission denied
Aug 5 12:41:29 kikupotter named[3572]: zone example.com/IN: not loaded due to errors.

######这个是是在dynamic 下面建个managed-keys.bind的空文件。
Aug 5 12:41:29 kikupotter named[3572]: managed-keys-zone ./IN: loading from master file dynamic/managed-keys.bind failed: file not found

##############还有就是这一大堆的报错,原因还不是很清楚,貌似是ipv6的支持文件,我是在启动脚本加上一个:OPTIONS=“4”就行了。
/NS/IN': 2001:503:c27::2:30#53
Aug 5 12:42:52 kikupotter named[3572]: error (network unreachable) resolving './NS/IN': 2001:7fd::1#53
Aug 5 12:42:58 kikupotter named[3572]: error (network unreachable) resolving './NS/IN': 2001:500:1::803f:235#53
Aug 5 12:43:00 kikupotter named[3572]: error (network unreachable) resolving './NS/IN': 2001:503:ba3e::2:30#53

一下是我的下面进行配置:
options {
listen-on port 53 { 192.168.0.1; };//注意前后空格哦
directory "/var/named"; //zone夹子/var/named/chroot/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 { 192.168.0.0/24;
192.168.122.0/24;
10.1.6.0/16;
};
recursion yes;

#dnssec-enable yes;
#dnssec-validation yes;
#dnssec-lookaside auto;

/* Path to ISC DLV key */
// bindkeys-file "/etc/named.iscdlv.key";
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

zone "." IN {
type hint;
file "named.ca";
};
zone "localdomain" IN {
type master;
file "localdomain.zone";
allow-update { none; };
};

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

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

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.ip6.local";
allow-update { none; };
};

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

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

##########这两个分别是正向解析,跟方向解析的zone。
zone "example.com" IN {
type master; //主域
file "example.com.zone"; //zone文件名
allow-update { none; }; //不跟新
};

zone "0.168.192.in-addr.arpa" IN {
type master; //同上
file "192.168.0.zone";
allow-update { none; };
};

##########################
$ORIGIN example.com.
$TTL 86400
@ IN SOA kikupotter.example.com. root.kikupotter.example.com. (
42 ; serial
21600 ; refresh after 6 hours
272 ;Editing Zone Files
3600 ; retry after 1 hour
604800 ; expire after 1 week

)

IN NS kikupotter.example.com.
kikupotter IN A 192.168.0.1
@ IN MX 10 mail.example.com.
IN MX 20 mail2.example.com.
mail IN A 192.168.0.5
mail2 IN A 192.168.0.6
;
;
services IN A 192.168.0.1
IN A 192.168.0.10
IN A 192.168.0.11
ftp IN CNAME services.example.com.
www IN CNAME services.example.com.
//同时把,ftp,www,mail都上了。

########################
########################

$ORIGIN 0.168.192.in-addr.arpa.
$TTL 86400
@ IN SOA kikupotter.example.com. root.kikupotter.example.com. (
42 ; serial
21600 ; refresh after 6 hours
3600 ; retry after 1 hour
604800 ; expire after 1 week
86400 ; minimum TTL of 1 day
)
;
@ IN NS kikupotter.example.com.
;
1 IN PTR kikupotter.example.com.
;
5 IN PTR server1.example.com.
6 IN PTR server2.example.com.
;
3 IN PTR ftp.example.com.
4 IN PTR ftp.example.com.

##########################
##########################
这两个文件一定要学会写:方法是多些多看
IN A :A记录就是地址,A记录说明域名与ip的关系
IN CNAME : 别名 左假,右真,真的要有A记录。
IN NS :nameserver的简写。必须要有。左边是域右边是名字服务器。
IN PTR : 反向ip与域名的关系
SOA : 主记录
@ : 代表域
. : 代表顶级域
TTL :缓存时间

完成之后,重启服务。能作出以上的步骤就说明named正常工作咯。

最后:看一下dig用来debug的。
分别进行正反向查询。
dig example.com

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46858
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.example.com. IN A

;; ANSWER SECTION:
www.example.com. 86400 IN CNAME services.example.com.
services.example.com. 86400 IN A 192.168.0.11
services.example.com. 86400 IN A 192.168.0.1
services.example.com. 86400 IN A 192.168.0.10

;; AUTHORITY SECTION:

dig -x 192.168.0.1
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16805
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;1.0.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:
1.0.168.192.in-addr.arpa. 86400 IN PTR kikupotter.example.com.

;; AUTHORITY SECTION:
0.168.192.in-addr.arpa. 86400 IN NS kikupotter.example.com.

;; ADDITIONAL SECTION:
kikupotter.example.com. 86400 IN A 192.168.0.1

一切OK。还是老话,希望大家多多指教啊。下次准备做复杂的,把dns整齐了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  笔记 bind rhel dns