红联Linux门户
Linux帮助

DNS相关,及在bind9中view视图的使用方法

发布时间:2007-06-10 15:51:29来源:红联作者:karon_fedora
BLOG:karon.cublog.cn

A. DNS原理
这里就是域名解析过程,想要详细了解,可以通过抓DNS包,我只貌似抓到了一个请求包,但是应答包灭有抓到,我这里有DNS包的字段,谁有兴趣我们一起研究一下>_<
B.bind软件相关
rpm -qa bind*
bind-utils-9.3.3-7.el5
bind-chroot-9.3.3-7.el5
bind-9.3.3-7.el5
bind-libs-9.3.3-7.el5
注意:rhel5就提供这么几个包,和4有点不同,并且没有/etc/named.conf文件,原因鬼才知道。
那么这些东西都是做什么的呢?
rpm -ql bind-utils-9.3.3-7.el5
/usr/bin/dig
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
注意:我所列出的不包括man文档中的文件
这个包给出的是一些用于控制DNS服务器的命令。
rpm -ql bind-chroot-9.3.3-7.el5
/var/named/chroot
/var/named/chroot/etc
/var/named/chroot/var
/var/named/chroot/dev
/var/named/chroot/var/named
/var/named/chroot/var/named/data
/var/named/chroot/var/named/slaves
/var/named/chroot/var/run
/var/named/chroot/var/run/named
/var/named/chroot/var/tmp
这个其实就是建立chroot文件和他的子文件夹,我们可以在DNS能够进行正确解析的情况下来研究一下各个目录有什么变化,这个以后再说。
rpm -ql bind-libs-9.3.3-7.el5
这个就不列出来,都是库文件。
rpm -ql bind-9.3.3-7.el5
/etc/dbus-1/system.d/named.conf
/etc/logrotate.d/named
/etc/rc.d/init.d/named
/etc/sysconfig/named
/usr/sbin/bind-chroot-admin
/usr/sbin/dns-keygen
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-signzone
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-bootconf
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/nameGetForwards
/usr/sbin/nameSetForwarda
/usr/sbin/rndc
/usr/sbin/rndc-confgen
/var/named
/var/named/data
/var/named/slaves
/var/run/named
这里还有一些是doc和man的文档,里面有例子,介绍的很详细,这些例子都比较好用强烈建议去看。Bv9arm文档是bind的手册,我是没有时间看了,有兴趣的可以搞。
问题:为什么没有我们需要配置的/etc/named.config文件?只有一个类似的/etc/dbus-1/system.d/named.conf,不过他不是,自己创建吧(真麻烦...)
PS:我们从这些乱78遭的文件和命令中得到什么东西呢?起码知道一些和bind有关的命令,还有bind所属的文件夹,还有就是或许我们的服务无法启用的时候,是不是少了那个软件包的某某文件。。。再说,了解软件不是什么坏事情。

C:系统中的named服务
这个东西涉及shell,以后再说,不能放过他的。

D:配置named服务.
我们要自己做域名解析,不是托管。
假设我们有一个局域网,一个用做DNS服务器的主机,3个服务器web,mail,ftp
想想看我么要求什么?
1,我们需要一个静态IP,他是在网路上地址。(现在是我们只用一台主机做DNS)
2,如果需要长时间并且对外提供mail,ftp,web服务,那么我们还需要3个静态IP,一个服务器一个。
3, 局域网内的机器,可以解析到外网。
4,外网用户可以解析到我们的web,mail,ftp.但是他不可以解析到我们局域网的主机
5,我们需要一个域名 caterpillar.com
6, 我们只管理一个层次。恩,我不知道这种说法是不是确切,但是意思就是我们只管理一个域,域下面没有其他的域。(这个说法我也不确定。)对这个比较通的同学希望可以解释一下。
画图


新买的电脑还没有装word.
我忘记了画DNS主机的局域网接口:地址是192.168.0.254
局域网内IP为192.168.0网段,主机名分别为karon,xeno,和mars
DNS静态IP为123.66.88.254,主机名为ns1.
FTP静态IP为123.66.88.1, 主机名为ftp
MAIL静态IP为123.66.88.2,主机名为mail
WEB静态IP为123.66.88.3,主机名为web
下面我们配置named.conf
曾经和别人讨论过bind中view的使用,现在就用view来写,view把系列的zone结合到一起来实现功能,是很有趣的东西。我用的是RHEL5,貌似和4有一点不同,不过原理一样。
我们一段一段的来,并且要很细,便于以后翻阅>_<.
option {
directory "/var/named"; 默认路径
dump-file "/var/named/data/cache_dump.db"; 这里没有写错,只有你用相对路径的时候才会被加上默认路径
startistice-file "/var/named/data/named_stats.txt"; 同上
};
option选项有很多.不用照这书抄,不写的项采用默认的就可以了。
我们只写这一段,然后named-checkconf.
Y~~居然成功,这个猪头命令只检查语法,并且他只检查/etc/named.conf文件,还有,只写一个option,居然发现named服务可以启用,晕,他也是猪头服务,看了一下rc中named的启动脚本,果然和内容没有任何关系。
acl "caterpillar's lan"{
127.0.0.1; 192.168.0.0/24;
};
创建一个访问控制列表,定义的这个列表以后会用到。
我们需要知道的是,caterpillar's lan是一个名字而已,起什么都可以,127.0.0.1是本机。192.168.0.0/24表示我们的局域网,
以后就可以用caterpillar's lan来代表我么的主机和局域网了。
注意:
地址列表可以用any,none,localnets,localhost.
any:任何主机
none:不匹配任何主机
localhost本地主机
localnets本地网络所有主机
还有,这里的地址是IPv4的地址,ipv6目前还不支持呢。
controls {
inet 127.0.0.1 allow { localhost; };
};
这个语句东西写成这个样子其实没用,你不写的时候默认也是这样的,
inet是监听在127.0.0.1上面的一个控制通道的socket接口,而allow则确定了控制通道的能力,这里是允许本机主机。
view "inside" {
match-clients { "caterpillar's lan"; };
recursion yes; 这里表示在这个view中的所有请求,开启递归查询。

zone "." IN { IN为类,如果你不写,那么默认的就是IN类。
type hint; hint,这个么是根服务器的特殊类型。
file "name.ca"; 文件在name.ca下。
};

zone "0.168.192.in-addr.arpa" IN {
type master;
file "caterpillar's arpalan.db";
}; 这个是对本机请求的反向解析。

zone "z-caterpillar.com" {
type master; 这个表示是在本机进行解析的。
file "db.caterpillar.com.inside";
allow-transfer { 192.168.0.2 }; 这个是域传输控制选项。
};
};
view这个东西功能是zone的一个集合,方便管理zone,如果你一个view都没有的话,那么他们是属于一个view的,基本可以这么理解。他可以分割DNS,正是这个功能才能让我们方便的实现入站和出站的不同管理。
看看他要实现的功能:
可以对本机所在的所有机器发出的请求进行解析,另外,本机的主机可以进行逆向解析。
恩 就这些。
那么根据域名解析过程。
我们这台DNS一定要可以到根服务器, 所以zone .必须存在,zone 0.168.192.in-addr.arpa 用来实现逆向解析,zone "caterpillar.com"用来对请求进行解析。
view "outside" {
match-clients { any; }; 此视图对应任何主机,一定要放在inside的后面,这样acl中定义的主机就会先看到inside里面的zone.
recursion no; 这里把递归关掉,也就是说,我们的这台主机对于外来用户的非本地请求无视,我自己的域名我解析,你到我这里来查163?靠,想的美。门都没有,我又不是根服务器。

zone "." IN {
type hints;
file "name.ca";
} 每个view必须有zone "."

zone "caterpillar.com" { caterpillar.com的zone.
type master;
file "db.caterpillar.com.outside";
allow-transfer { 123.66.88.2; };
};
这个和上一个类似,但是没有反向解析域,至于为什么这么做。外网用户我们不允许他反向解析到我们,所以不需要反项解析域。

基本OK,和书上不同的是少logging,不过这没有关系。

现在我们来看看,相关的区域文件怎么写。
name.ca 这个可以去下载,不需要自己写。
db.caterpillar.com.inside
$TTL 86400
@ IN SOA ns1.caterpillar.com. zhaoliang.caterpillar.com. ( 2007060901;28800;14400;3600000;86400; )
主授权记录,这个不用说了,前提是我有一个zhaoliang@caterpillar.com的邮箱,在我自己的mail服务器上。后面和课堂上的有点不同,不过是一样的。别忘记每次修改都要更新序列号。
@ IN NS ns1.caterpillar.com.
这句话的意思是,@域名的DNS服务器是ns1.caterpillar.com,那么他的IP是多少呢?下面有>_<.
@ MX 10 mail.caterpillar.com.
这个的意思是说,有@域名的邮件统统给我扔到mail.caterpillar.com.上去,那么他的IP是多少呢,下面同样有。其实这个就是邮件路由啊>_<
ns1 IN A 192.168.0.254
??,DNS服务器的地址不是123.66.88.254么?怎么可以用这个。别忘了我们这个view仅仅处理本机请求,用接在局域网上网卡的IP是最快的。
mail IN A 123.66.88.2
ftp IN A 123.66.88.1
web IN A 123.66.88.3
区别一下,以上的部分是为本地的对外请求提供服务。或许你觉得把服务器和客户机放在一个LAN里比较好,但是我觉得那不直观。
karon IN A 192.168.0.1
xeno IN A 192.168.0.2
mars IN A 192.168.0.3
以上的部分是对内请求服务的。
好了OK了
db.caterpillar.com.outside
$TTL 86400
@ IN SOA ns1.caterpillar.com. zhaoliang.caterpillar.com. ( 2007060901;28800;14400;3600000;86400; )
@ IN SN ns1.caterpillar.com.
@ MX 10 mail.caterpillar.com.
ns1 IN A 123.66.88.254
这里就需要用到外网的IP了
mail IN A 123.88.66.2
ftp IN A 123.88.66.1
web IN A 123.88.66.3
为什么没有本机的?这个view是对外网查询的,我不喜欢他知道本地局域网的IP地址。
caterpiller's arpalan.db
$TTL
@ IN SOA ns1.caterpillar.com. zhaoliang.caterpillar.com. ( 2007060901:28800;14400;3600000;86400; )
@ IN NS ns1.caterpillar.com.
1 IN PTR karon.caterpillar.com.
2 IN PTR xeno.caterpillar.com.
3 IN PTR mars.caterpillar.com.
254 IN PTR ns1.caterpillar.com.


嘿嘿,搞定收工。
文章评论

共有 0 条评论