一、前言:域名与DNS的概念
1、域名空间
域的名称空间是一个从根开始的树状结构,用.表示根,自根开始,依次为顶级域、二级域、三级域等,下级域名会继承上级域名的名称。顶级域名如:com、edu、gov、edu、org、net、cn。
2、主机的域名(Domain Name)
是一台计算机的完整名称,例如www.sina.com.cn,主机的域名也称FQDN(Full Qualified Domain Name)。
3、主机名(hostname)
主机名是主机域名最前面部分,如www就是一台计算机的主机名。
4、域名解析
域名解析分为正向解析和反向解析,正向解析是将计算机的域名解析为其所对应的IP地址,反向解析则是相反,当已知一台计算机IP地址的情况下,解析出其所对应的域名。正向解析使用最广,我们日常通过域名(我们通俗说的网址)上网,就需要通过正向解析,解析出对应IP地址。相比较,反向解析则用的较少,如邮件服务器域名的反向查询是识别合法邮件服务器的依据之一。
5、DNS服务器
执行域名解析任务的服务器称为DNS服务器,域名空间分层组织,相对应DNS服务器也是分层部署,每一个层次都有相应层次的服务器,下级DNS服务器需向直接上层注册。
6、域名解析的过程

7、域名解析的方式:递归解析、迭代解析
8、区域(zone)
区域是DNS服务器管理域名的基本单位,区域之下包含域名解析所需要的资源记录。一台DNS服务器可以管理一个或多个区域,在Linux中区域内的信息以文件的方式存储,称为区域文件。
根据解析的方向,区域分为正向解析区域与反向解析区域。
9、资源记录(RR)
资源记录是域名解析所包含的信息,这类信息以资源记录的面目出现,具体在一个区域内包含下列几类资源记录。
(1)A记录,主机记录,对应IP地址
NS 管理该域名的服务器主机名
SOA 管理域名的服务器管理信息(7种信息)
CNAME 别名记录
MX 邮件交换器
PTR 反向解析指针
一、安装bind
1、安装包简介:
bind-9.8.2-0.17.rc1.el6_4.6.i686.rpm DNS的主程序包
bind-chroot-9.8.2-0.17.rc1.el6_4.6.i686.rpm 为Bind提供一个伪装的根目录以增强安全性工具
bind-libs-9.8.2-0.17.rc1.el6_4.6.i686.rpm 进行域名解析必备的库文件
bind-utils-9.8.2-0.17.rc1.el6_4.6.i686.rpm 提供了对DNS服务器的测试工具程序
2、安装

yum -y install bind-chroot

yum -y install bind-utils

3、检查安装

rpm -qa |grep bind

bind-9.8.2-0.17.rc1.el6_4.6.i686
bind-utils-9.8.2-0.17.rc1.el6_4.6.i686
bind-libs-9.8.2-0.17.rc1.el6_4.6.i686
bind-chroot-9.8.2-0.17.rc1.el6_4.6.i686
4、安装了什么文件

rpm -ql bind

/etc/named.conf 主配置文件
/etc/named.rfc1912.zones
/etc/rc.d/init.d/named 启动脚本
/etc/sysconfig/named 初始化文本
/var/named 很重要的目录
/var/named/dynamic
/var/named/named.ca 根DNS服务器信息
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves 可以用它存放slave DNS服务器区域文件
/var/run/named

rpm -ql bind-chroot 为提高bind的安全性,此工具改变bind的根为/var/named/chroot

/var/named/chroot/etc/named 可将入侵者禁锢在目录/var/named/chroot中
/var/named/chroot/etc/named.conf
/var/named/chroot/var
/var/named/chroot/var/log
/var/named/chroot/var/named

rpm -ql bind-utils 可以安装DNS测试工具

/usr/bin/dig 最好的DNS测试工具
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
二、主配置文件/etc/named.conf

vi /etc/named.conf

// named.conf
// See /usr/share/doc/bind*/sample/ for example named configuration files.
options {
listen-on port 53 { 127.0.0.1; }; 监听IP v4地址端口
listen-on-v6 port 53 { ::1; }; 监听IP v6地址端口
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";
allow-query { localhost; }; 允许查询的客户机
recursion yes; 是否允许递归查询
下面几行是DNS服务器安全机制设置
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
下面一个区块logging是日志设置
logging {
channel default_debug {
file "data/named.run"; 日志存放位子
severity dynamic; 日志安全级别
};
};
下面一个区块zone是根DNS设置
zone "." IN {
type hint;
file "named.ca"; 根DNS保存文件
};
下面include表示包含文件内容
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key"; 访问根服务器的密钥信息
三、定义区域参数named.rfc1912.zones

vi named.rfc1912.zones

// Provided by Red Hat caching-nameserver package
zone "localhost.localdomain" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.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.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
四、区域文件

cat named.localhost

$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1

cat named.loopback

$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
PTR localhost.
配置实例1
配置一台具有转发功能的Caching only DNS服务器
(一)配置网卡、网关、DNS服务器

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=00:0C:29:9E:3F:D6
TYPE=Ethernet
UUID=75f42fa8-2e4f-462b-a33c-4e343fd8a9ec
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=no
IPADDR=192.168.1.102
NETMASk=255.255.255.0

vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=localhost.localdomain
GATEWAY=192.168.1.1

vi /etc/resolv.conf

nameserver 192.168.1.102 //本机就是DNS服务器,即使如此也需要设置
(二)编辑/etc/named.conf配置文件
//
// 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";
allow-query { any;};
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
forward first; /设置转发
forwarders{10.11.11.50;}; /这个地址是我家我家宽带的本地DNS Server
}; 在学校测试时,转发没有配置,直接能够实现解析!
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
(三)安装nscd软件包
软件包:nscd-2.12-1.132.el6.x86_64.rpm
功能:缓存DNS解析结果等信息
安装:yum –y install nscd
配置文件:/etc/nscd.conf
启动nscd服务:service nscd restart
设置自启动:chkconfig nscd on
查询缓存情况:nscd –g
(四)测试
在其他客户机上测试时需注意:
(1)客户机上要设置正确DNS服务器IP地址
(2)本DNS服务器的iptables以及SELinux要设置正确。
(否则可能不会给除本机之外的客户机提供解析服务)

nslookup

www.sina.com.cn

Server: 192.168.1.102
Address: 192.168.1.102#53
Non-authoritative answer:(非权威回答)
www.sina.com.cn canonical name = jupiter.sina.com.cn.
jupiter.sina.com.cn canonical name = newssd.sina.com.cn.
Name: newssd.sina.com.cn
Address: 60.215.128.246
配置实例2
建立一个名为test.cc的正向解析区域,该区域包含下列主机:
FQDN名 IP地址 说明
dns1.test.cc 192.168.1.102
w1.test.cc 192.168.1.122
www.test.cc 192.168.1.122
mail.test.cc 192.168.1.190 邮件服务器
并建立反向查询区域,为上表中的mail服务器做反向查询。

(一)编辑/etc/named.conf配置文件
……
zone "test.cc" IN {
type master;
file "named.test.cc";
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.1";
};
……
(二)编辑正向区域文件 /var/named/named.test.cc
$TTL 1D
@ IN SOA dns1.test.cc. root.dns1.test.cc. (2017011400 3H 15M 1W 1D)
@ IN NS dns1.test.cc.
dns1 IN A 192.168.1.102
w1 IN A 192.168.1.122
www IN CNAME w1.test.cc.
mail IN A 192.168.1.190
@ IN MX 1 mail.test.cc.
(三)编辑反向区域文件 /var/named/ named.192.168.1
$TTL 1D
@ IN SOA dns1.test.cc. root.dns1.test.cc. (2017011400 3H 15M 1W 1D)
@ IN NS dns1.test.cc.
190 IN PTR mail.test.cc.
(四)测试
使用dig工具测试解析情况
配置实例3
为实例2中的DNS服务器建立slave DNS服务器,这台slave DNS服务器的IP地址是192.168.1.108,FQDN名称为dns2.test.cc。
Master DNS服务器配置:
(一)修改/etc/named.conf
……
zone "test168.cc" IN {
type master;
file "named.test168.cc";
allow-transfer {192.168.1.108;};
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.1";
allow-transfer {192.168.1.108;};
};
……
(二)修改区域文件

vi /var/named/named.test168.cc

$TTL 1D
@ IN SOA dns1.test168.com. root.dns1.test168.cc. (2017011400 3H 15M 1W 1D)
@ IN NS dns1.test168.cc.
@ IN NS dns2.test168.cc.
dns1 IN A 192.168.1.102
dns2 IN A 192.168.1.108
w1 IN A 192.168.1.122
www IN CNAME w1.test168.cc.
mail IN A 192.168.1.190
@ IN MX 1 mail.test168.cc.

vi /var/named/named.192.168.1

$TTL 1D
@ IN SOA dns1.test168.cc. root.dns1.test168.cc. (2017011400 3H 15M 1W 1D)
@ IN NS dns1.test168.cc.
@ IN NS dns2.test168.cc.
190 IN PTR mail.test168.cc.
slave DNS服务器配置:
只需修改/etc/named.conf
options {
listen-on port 53 { 192.168.1.108; };
……
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "test168.cc" IN {
type slave;
file "slaves/named.test168.cc";
masters {192.168.1.102;};
};
zone "1.168.192.in-addr.arpa" IN {
type slave;
file "slaves/named.192.168.1";
masters {192.168.1.102;};
};
配置案例4(本实验没有成功)
在域test.cc之下创建子域sales.test.cc。管理子域的DNS服务器为dns.sales.test.cc,IP地址为192.168.1.110/24。
(一)子域在父域中注册
修改那台master 父域DNS服务器的区域文件。
[root@localhost ~]# vi /var/named/named.test168.cc
$TTL 1D
@ IN SOA dns1.test168.com. root.dns1.test168.cc. (2017011440 3H 15M 1W 1D)
@ IN NS dns1.test168.cc.
@ IN NS dns2.test168.cc.
sales.test168.cc. IN NS dns.sales.test168.cc.
dns.sales.test168.cc. IN A 192.168.1.110
dns1 IN A 192.168.1.102
dns2 IN A 192.168.1.108
w2 IN A 192.168.1.122
www IN CNAME w2.test168.cc.
mail IN A 192.168.1.190
@ IN MX 1 mail.test168.cc.
(二)子域DNS服务器配置
1、修改/etc/named.conf
……
zone "sales.test168.cc" IN {
type master;
file "named.sales.test168.cc";
};
2、建立子域区域文件

vi /var/named/named.sales.test168.cc

$TTL 1D
@ IN SOA dns.sales.test168.cc. root.dns.sales.test168.cc. (2017011400 3H 15M 1W 1D )
@ IN NS dns.sales.test168.cc.
dns IN A 192.168.1.110
dns.test168.cc(DNS服务器自身)

dig +trace www.sina.com.cn

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> +trace www.sina.com.cn
;; global options: +cmd
. 2959 IN NS i.root-servers.net.
. 2959 IN NS k.root-servers.net.
. 2959 IN NS h.root-servers.net.
. 2959 IN NS a.root-servers.net.
. 2959 IN NS e.root-servers.net.
. 2959 IN NS d.root-servers.net.
. 2959 IN NS l.root-servers.net.
. 2959 IN NS g.root-servers.net.
. 2959 IN NS m.root-servers.net.
. 2959 IN NS c.root-servers.net.
. 2959 IN NS b.root-servers.net.
. 2959 IN NS j.root-servers.net.
. 2959 IN NS f.root-servers.net.
;; Received 228 bytes from 222.74.1.200#53(222.74.1.200) in 66 ms
cn. 172800 IN NS ns.cernet.net.
cn. 172800 IN NS a.dns.cn.
cn. 172800 IN NS c.dns.cn.
cn. 172800 IN NS b.dns.cn.
cn. 172800 IN NS d.dns.cn.
cn. 172800 IN NS e.dns.cn.
;; Received 296 bytes from 199.7.91.13#53(199.7.91.13) in 297 ms
sina.com.cn. 86400 IN NS ns1.sina.com.cn.
sina.com.cn. 86400 IN NS ns2.sina.com.cn.
sina.com.cn. 86400 IN NS ns3.sina.com.cn.
sina.com.cn. 86400 IN NS ns4.sina.com.cn.
;; Received 185 bytes from 203.119.28.1#53(203.119.28.1) in 65 ms
www.sina.com.cn. 3600 IN CNAME jupiter.sina.com.cn.
jupiter.sina.com.cn. 60 IN CNAME hydra.sina.com.cn.
hydra.sina.com.cn. 60 IN A 218.30.108.226
sina.com.cn. 86400 IN NS ns2.sina.com.cn.
sina.com.cn. 86400 IN NS ns3.sina.com.cn.
sina.com.cn. 86400 IN NS ns1.sina.com.cn.
sina.com.cn. 86400 IN NS ns4.sina.com.cn.
;; Received 227 bytes from 123.125.29.99#53(123.125.29.99) in 130 ms

rpm -ql bind

/etc/NetworkManager/dispatcher.d/13-named
/etc/logrotate.d/named
/etc/named
/etc/named.conf 主配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/portreserve/named
/etc/rc.d/init.d/named 启动脚本
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named 初始化文本
/usr/lib/bind
/usr/sbin/arpaname
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-dsfromkey
/usr/sbin/dnssec-keyfromlabel
/usr/sbin/dnssec-keygen
/usr/sbin/dnssec-revoke
/usr/sbin/dnssec-settime
/usr/sbin/dnssec-signzone
/usr/sbin/genrandom
/usr/sbin/isc-hmac-fixup
/usr/sbin/lwresd
/usr/sbin/named
/usr/sbin/named-checkconf
/usr/sbin/named-checkzone
/usr/sbin/named-compilezone
/usr/sbin/named-journalprint
/usr/sbin/nsec3hash
/usr/sbin/rndc
/usr/sbin/rndc-confgen
/usr/share/doc/bind-9.8.2
/var/log/named.log
/var/named 数据库文件存放位置
/var/named/data
/var/named/dynamic
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves
/var/run/named

rpm -ql bind-libs

/usr/lib/libbind9.so.80
/usr/lib/libbind9.so.80.0.4
/usr/lib/libdns.so.81
/usr/lib/libdns.so.81.4.1
/usr/lib/libisc.so.83
/usr/lib/libisc.so.83.0.3
/usr/lib/libisccc.so.80
/usr/lib/libisccc.so.80.0.0
/usr/lib/libisccfg.so.82
/usr/lib/libisccfg.so.82.0.1
/usr/lib/liblwres.so.80
/usr/lib/liblwres.so.80.0.2

rpm -ql bind-chroot

/var/named/chroot
/var/named/chroot/dev
/var/named/chroot/dev/null
/var/named/chroot/dev/random
/var/named/chroot/dev/zero
/var/named/chroot/etc
/var/named/chroot/etc/localtime
/var/named/chroot/etc/named
/var/named/chroot/etc/named.conf
/var/named/chroot/etc/pki
/var/named/chroot/etc/pki/dnssec-keys
/var/named/chroot/usr
/var/named/chroot/usr/lib
/var/named/chroot/usr/lib/bind
/var/named/chroot/var
/var/named/chroot/var/log
/var/named/chroot/var/named
/var/named/chroot/var/run
/var/named/chroot/var/run/named
/var/named/chroot/var/tmp

rpm -ql bind-utils

/usr/bin/dig
/usr/bin/host
/usr/bin/nslookup
/usr/bin/nsupdate
DNS相关工具
1、host 查询已经注册的域名与主机
用法:
host -a FQDN [server] 查询主机相关信息

host -a www.phy.pku.edu.cn 8.8.8.8

Trying "www.phy.pku.edu.cn"
Using domain server:
Name: 8.8.8.8
Address: 8.8.8.8#53
Aliases:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35973
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.phy.pku.edu.cn. IN ANY
;; ANSWER SECTION:
www.phy.pku.edu.cn. 3599 IN CNAME wwwphy.lb.pku.edu.cn.
Received 60 bytes from 8.8.8.8#53 in 680 ms
2、nslookup 查询域名相关信息
用法:
nsllokup

q=ns 查询当前DNS信息

q=ns 8.8.8.8

Server: 222.74.1.200
Address: 222.74.1.200#53
Non-authoritative answer:
Name: q=ns
Address: 218.30.64.199

q=. 查询根服务器信息

q=.

Server: 222.74.1.200
Address: 222.74.1.200#53
Non-authoritative answer:
Name: q=
Address: 218.30.64.199