分类: LINUX
2011-06-15 23:17:51
named:用于支持名称解析
rndc:检查安全性的机制
ports:53(named) 953(rndc)
bind chroot
# vim /var/sysconfig/named
ROOTDIR=/var/named/chroot
named.conf配置文件
# vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { localhost; };
directory “/var/named”;
forwards { 192.168.1.254; };
allow-query { 192.168.0/24; };
allow-transfer { 192.168.1/24; };
};
listen-on port 53:监听53端口
forwards:收到请求包,在数据库和缓存里都找不到记录时,发往forwards指向的DNS服务器去,如果指向的DNS服务器都没有这条记录的话会到根服务器查询。如果还有设定forward-only的话则不会去根服务器查询。也可以这样表示“192.168.1.254”;
allow-query: 只允许指定的网段使用DNS,如果没有这段,则允许所有人使用
allow-transfer: 只把数据库发送给指定网段内的DNS服务器
view localhost_resolver {
match-clients { 192.168.0.0/24; };
match-destinations { any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};
match-clients:允许哪些网段可以使用DNS
定义zone文件
# vim /var/named/chroot/etc/named.rfc1912.zones
zone "example.com" IN {
type master;
file "example.com.zone";
};
zone "cracker.org" IN {
type slave;
master {192.168.0.254}
file "slaves/cracker.org.zone";
};
master zone:存放在DNS服务器上的数据库叫master zone
slaves/cracker.org.zone:redhat建议最好将slave的配置文件保存在新建的slaves目录里面
反向解析区域:
zone "0.168.192.in-addr.arpa" IN {
type master;
file "named.example";
};
root zone 和 loopback zone
zone "." IN {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
};
root zone:当DNS服务器收到一个查询名称解析的请求,但是在自己数据库里找不到关于这一笔名称解析的记录的时候,DNS服务器就会去root zone里面所定义的DNS服务器查询,在预设的情况下,DNS配置文件里面已经帮我们定义好了root zone的设定
loopback zone:由于loopback的IP地址指向本机,所以type一定是master
复制模板文件成数据库文件
#cd /var/named/chroot/var/named/
# cp -p localhost.zone example.zone
# cp -p named.local named.example
SOA(start of authority)
主要作用在于记录该zone里面的数据是由哪一台DNS服务器来负责维护以及zone file由谁来管理
# vim named.example
$TTL 86400
@ IN SOA server1.example.com. root.example.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
Serial:版本信息,1997年02月27日第00版本,每当DNS zone里面数据有更改serial number值加1,这样,当有slave server时,slave server就会根据这个值来判断自己的数据库是不是最新的
Refresh:描述一段以秒为单位的时间,上述值被定为28800秒,slave server每隔一段这个参数上所定义的时间就会去检查master server上的serial number,看看master server上面的数据有没有更新
Retry:也是描述一段以秒为单位的时间,若是refresh的时间到了,但是slave server却联系不到master server时,每隔一段retry query所规定的时间,slave server就会再尝试联系master server
Expire:也是用来描述一段以秒为单位的时间,如果时间超过了expire所规定的时间而slave server一直没有联系上master server的话,那么slave server就会删除掉自己备份的zone file
NS(name server)
定义哪个域是由哪个DNS服务器负责提供名称解析的服务,在每个DNS zone里面,至少应该有一笔指向master server或是slave server的NS 记录
在DNS zone里面设定一笔NS记录指向slave server的目的在于当master server宕机或者是没有办法提供服务的时候可以代替master server为DNS client提供名称解析服务
@ IN NS server1.example.com. //master server
@ IN NS cracker.example.com. //slave server
@:等同于example.com.
IN:表示internet
NS:表示一笔NS记录
server1.example.com.:指向一台DNS服务器
其它记录类型
l A记录:把主机名称对应到一个IP地址
server1 IN A 192.168.0.254
server1:记录主机名称,或者写上全称server1.example.com.
IN:表示internet
A:表示一笔A记录
192.168.0.254:指向192.168.0.254这个IP地址
l CNAME记录:把别名对应到主机名称
dns IN CNAME server1.example.com.
dns:记录一个别名,通常用这台主机所提供的服务来为这台主机取别名
IN:表示internet
CNAME:表示一笔CNAME记录
server1.example.com.:主机名称,也可以用简写server1,即server1这台主机的别名是dns,就是说如果有人要查询dns.example.com这台主机所对应的IP地址的话,要把dns导向到server1,并传回server1.example.com这台主机所对应的IP地址
l PTR记录:把一个IP地址对应到一个主机名称
254 IN PTR server1.example.com.
254:如果254后面没有加上一个.来表示结束的话,系统会自动在这个IP地址的后面加上这个PRT记录所在zone的名称来当做完整的IP地址
IN:表示internet
PTR:表示一笔PTR记录
server1.example.com.:主机名称,也可以用简写server1
l MX记录:定义这台domain是由哪个mail server来负责提供邮件的服务
@ IN MX 5 server1.example.com.
@:记录domain的名称
IN:表示internet
MX:表示这是一笔MX记录
5:priority,优先级,数字越小优先级越高
server1.example.com.:指向一台邮件服务器
zone file
forward lookup zone
# vim /etc/bashrc
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\u@\h \W]\\$ "
W:改成小写的w
然后再登录系统
# cd /var/named/chroot/var/named/
# vim example.zone
$TTL 86400
@ IN SOA server1.example.com. root.example.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
0 ; negative TTL
)
@ IN NS server1.example.com.
server1 IN A 192.168.0.254
# ls -l example.zone
-rw-r----- 1 root named 583 12-05 22:31 example.zone
# chown named.named example.zone
reverse lookup zone
# vim named.example
$TTL 86400
@ IN SOA server1.example.com. root.example.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
1 ; negative TTL
)
@ IN NS server1.example.com.
254 IN PTR server1.example.com.
# ls -l named.example
-rw-r----- 1 root named 881 12-05 22:33 named.example
# chown named:named named.example
Round Robin Load Sharing Through DNS 负载均衡
www 0 IN A 192.168.0.101
www 0 IN A 192.168.0.102
www 0 IN A 192.168.0.103
TTL: 0 不允许缓存,这样每当使用者要存取www服务器的时候就必须要向DNS服务器重新查询www服务器所对应的IP地址
Delegating Subdomains 子域委派
1. 在上层DNS domain里面加上一条NS记录
sub.example.com. IN NS DNS2
把下层DNS domain指向到另一台DNS服务器DNS2
2. 另外一台DNS服务器为在下层的DNS domain里面的话,比较好的做法是在上层的DNS zone里面加一条NS记录,把下层的DNS domain指向到另外一台DNS服务器的FQDN以及一条A记录,记录另外一台DNS服务器的FQDN所对应的IP地址
sub.example.com. IN NS DNS2.sub.example.com
DNS2.sub.example.com. IN A 192.168.0.253
BIND Syntax Utilities
1. named-checkconf
在预设的情况下,这个指令会去检查/var/named/chroot/etc/named.conf
# named-checkconf
# vim /var/named/chroot/etc/named.conf 可将里面改错以测试
2. named-checkzone
检查所设定的zone file的设定语法有没有错误
[root@server1~]#named-checkzone example /var/named/chroot/var/named/example.zone
/var/named/chroot/var/named/example.zone
zone example.zone/IN: loaded serial 42
OK
[root@server1 ~]# named-checkzone example.zone /var/named/chroot/var/named/example.zone
zone example/IN: loaded serial 42
OK
[root@server1 ~]#
Caching-only Name Server 缓存命名服务器
在一台DNS服务器里总共有五种DNS zone file
l domain forward lookup zone file 正向查找区域
l domain reverse lookup zone file 反向查找区域
l named.ca 根服务器信息文件
l localhost.zone 本机正向查找区域
l named.local 本机反向查找区域
/var/named/named.ca:该文件包含了Internet的根服务器名字和地址,Bind接到客户端主机的查询请求时,如果在Cache中找不到相应的数据,就会通过根服务器进行逐级查询。
在cache-only的服务器上则只有named.ca.换句话说,当cache-only的DNS服务器收到要求查询的请求包的时候,自己的数据库里面没有对应记录时不会到根服务器进行查询,只会把这条要求查询的请求包转发到其它的DNS服务器上去代为查询
在一个caching-only的服务器上,必须去设定好,要把收到要求查询的request包转送到其它的DNS服务器上去,当其它的DNS服务器把查询的结果传送回来以后才把这个查询的结果缓存起来。
l 在架设caching-only DNS服务器前,必须先确认系统有没有安装caching-nameserver这个rpm包,包里面有提供一个named.conf配置文件,使用这个预设的DNS配置文件,就可以让caching-only DNS服务器正常工作
l caching-nameserver这个rpm包另外还提供了root server所在的路径,也可以去检查named.ca这个zone file的内容,来取得DNS server的信息
BIND utilities
host:可以用来解某台主机,或者是整台DNS domain的信息
[root@server1 ~]# host server1.example.com
server1.example.com has address 192.168.0.254
[root@server1 ~]# host 192.168.0.254
254.0.168.192.in-addr.arpa domain name pointer server1.example.com.
[root@server1 ~]# host -a server1.example.com | grep ^[^\;]
Trying "server1.example.com"
server1.example.com. 86400 IN A 192.168.0.254
example.com. 86400 IN NS server1.example.com.
Received 67 bytes from 192.168.0.254#53 in 16 ms
dig:可以用来查询某一台特定的DNS服务器
[root@server1 ~]# dig server1.example.com | grep ^[^\;]
server1.example.com. 86400 IN A 192.168.0.254
example.com. 86400 IN NS server1.example.com.
nslookup:查询网络上的命名主机,nslookup有两种模式,一种是interactively,另一种模式是non-interactively
[root@server1 ~]# nslookup
> example.com
Server: 192.168.0.254
Address: 192.168.0.254#53
*** Can't find example.com: No answer
> 192.168.0.254
Server: 192.168.0.254
Address: 192.168.0.254#53
254.0.168.192.in-addr.arpa name = server1.example.com.
>
实验部分:
1. caching-only name server
[root@server1 ~]# rpm -qa | grep caching
caching-nameserver-9.3.6-4.P1.el5
[root@server1 ~]# rpm -qa | grep bind
bind-chroot-9.3.6-4.P1.el5
bind-libs-9.3.6-4.P1.el5
bind-utils-9.3.6-4.P1.el5
bind-9.3.6-4.P1.el5
ypbind-1.19-12.el5
[root@server1 ~]#vim /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.0.254 server1.example.com server1\
[root@server1 ~]# vim /etc/resolv.conf
search example.com
nameserver 192.168.0.254
[root@server1 ~]# cd /var/named/chroot/
[root@server1 chroot]# vim etc/named.conf
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/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";
forwarders {192.168.0.254;};
forward only;
[root@server1 chroot]# service named restart
这样caching-only DNS服务器就架设好了
2. slave name server
# cd /var/named/chroot/
# vim etc/named.conf
按G到末尾,添加如下内容
// ###########################################################################
// # Slave nameserver for cracker.com and 192.168.1/24 #
// ###########################################################################
zone "cracker.com" {
type slave;
masters {192.168.0.254;};
file "slaves/cracker.com.zone";
};
zone "1.168.192.in-addr.arpa" {
type slave;
masters {192.168.0.254;};
file "slaves/192.168.1.zone";
};
slaves/cracker.com.zone:位于/var/named/chroot/var/named/slaves/
slaves/192.168.1.zone:位于/var/named/chroot/var/named/slaves/
# ls -l var/named/slaves/
total 0
# service named restart
# ls -l var/named/slaves/
-rw------- 1 named named 365 May 20 13:14 192.168.1.zone
-rw------- 1 named named 365 May 20 13:14 cracker.com.zone
3. master name server
# cd /var/named/chroot/
# vim etc/named.conf
// ###########################################################################
// # Master nameserver for example.com and 192.168.0/24 #
// ###########################################################################
zone "example.com" {
type master;
file "example.zone";
};
zone "0.168.192.in-addr.arpa" {
type master;
file "192.168.0.zone";
};
# vim var/named/example.zone
$TTL 86400
@ IN SOA server1.example.com. root.example.com. (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ; minimum
)
@ IN NS server1.example.com.
server1.example.com. IN A 192.168.0.254
# chmod named.named var/named/example.zone
# named-checkconf
# named-checkzone example.com /var/named/chroot/var/named/example.zone
# service named restart
Advanced BIND Features BIND高级功能
我们可以把DNS服务器与DHCP服务器整合在一起,这样就可以部署Dynamic DNS(DDNS)也就是可以动态更新的DNS服务器。
DDNS可以通过DHCP服务器及时把DNS client的IP地址与相对应的电脑名称更新到DNS zone里。
Transaction Signatures(TSIG)则可以在master DNS服务器与slave DNS服务器在复制数据的时候为复制的数据加密。