前言
本文重点在于后面的完整搭建步骤,前面会简单的说明一下用到的概念,如果有偏差处,欢迎各位批评指教。谢谢大家。
基本理论说明
DNS概述
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
DNS协议及端口
- TCP 53(主从同步)
- UDP 53(正常查询)
- 启动脚本:/etc/init.d/named
DNS解析的作用
- 正向解析:域名—->IP
- 反向解析: IP—->域名
DNS相关配置文件
- /etc/named.conf
- /etc/named.rfc1912.zones
- /var/named
- /var/named/chroot
主配置文件片段:
listen-on port 53 { 192.168.4.5; }; //监听地址和端口
allow-query { any; }; //允许任何客户机查询
zone "wolf.com" IN { //定义正向区域
type master; //区域类型为主DNS
file "wolf.com.zone"; //区域数据文件
};
区域文件内容
$TTL 86400 //有效记录的生存周期
@ IN SOA dns1.tarena.com. root.tarena.com. (
2013090901 //更新序号
3H //刷新时间
15M //重试间隔
1W //失效时间
1D //无效记录的生存周期
)
/*
站点名 类型 值
@ IN NS DNS 1的完整域名.
@ IN NS DNS 2的完整域名.
DNS 1的完整域名. IN A DNS 1的IP地址
DNS 2的完整域名. IN A DNS 2的IP地址
www IN A IP地址
IP地址主机位 IN PTR 完整的域名.
*/
语法检查工具:
named-checkconf //主配置文件的路径
named-checkzone //目标区域名 地址库文件的路径
DNS负载均衡,泛域名解析
- DNS轮询(一个域名–> 多个IP地址)
www A IP地址1
www A IP地址2
www A IP地址3
.. ..
- 泛域名解析(多个域名 <–> 多个IP地址)
$GENERATE 100-200 station$ A 192.168.4.$
$GENERATE 100-200 $ PTR station$.tarena.com.
- 泛域名解析(多个域名 –> 一个IP地址)
* A IP地址
主从DNS(从服务器主要用来备份数据)
options {
directory "默认的地址库文件保存位置";
allow-transfer { 从DNS服务器的IP地址; };
};
zone "区域名" { [tarena.com、4.168.192.in-addr.arpa]
type 类型; [master、slave]
file "地址库文件的文件名";
masters { 主DNS服务的IP地址; };
};
实例操作
基本的DNS正向及反向解析
//安装DNS服务包,其中bind是主要实现DNS解析功能的包,bind-chroot则是禁锢解析目录的服务包
[root@server-2-99 ~]# yum -y bind bind-chroot
//修改DNS服务主配置文件
[root@server-2-99 ~]# vim /etc/named.conf
[root@server-2-99 ~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { any; }; //监听地址和端口,any表示任意地址
directory "/var/named"; //地址库文件所在目录
allow-query { any; }; //允许任意客户机查询
};
zone "wolf.com" IN { //定义正向区域
type master; //区域类型为主DNS
file "wolf.com.zone"; //地址库文件
};
zone "2.168.192.in-addr.arpa" IN { //定义反向区域
type master;
file "192.168.2.arpa";
};
//检查配置语法,可以不进行此步操作
[root@server-2-99 ~]# named-checkconf /etc/named.conf
//编辑DNS地址库文件
[root@server-2-99 ~]# cd /var/named/
[root@server-2-99 named]# ls -l
total 32
drwxr-x---. 6 root named 4096 Dec 18 18:26 chroot
drwxrwx---. 2 named named 4096 Dec 18 18:26 data
drwxrwx---. 2 named named 4096 Dec 18 18:26 dynamic
-rw-r-----. 1 root named 2075 Apr 23 2014 named.ca
-rw-r-----. 1 root named 152 Dec 15 2009 named.empty
-rw-r-----. 1 root named 152 Jun 21 2007 named.localhost //注意所属组,地址库模板文件
-rw-r-----. 1 root named 168 Dec 15 2009 named.loopback
drwxrwx---. 2 named named 4096 May 11 2015 slaves
//地址库文件需要保留所属组,来保证有相应的权限,这里使用-p选项保留对应的权限,也可是使用chown命令修改文件所有组
[root@server-2-99 named]# cp -p named.localhost wolf.com.zone
[root@server-2-99 named]# ll wolf.com.zone named.localhost
-rw-r-----. 1 root named 152 Jun 21 2007 named.localhost
-rw-r-----. 1 root named 152 Jun 21 2007 wolf.com.zone
//修改地址库文件
[root@server-2-99 named]# hostname
server-2-99.wolf.com
[root@server-2-99 named]# vim wolf.com.zone
[root@server-2-99 named]# cat wolf.com.zone
$TTL 1D //有效记录生存周期,目前表示1天
@ IN SOA @ rname.invalid. (
0 ; serial //更新序号,在主从DNS上会有作用,我们后面介绍
1D ; refresh //刷新时间
1H ; retry //重试间隔
1W ; expire //失效时间
3H ) ; minimum //无效记录的生存周期
// @ 表示站点名,在这里表示在主配置文件写的"wolf.com."
// NS 表示类型
// A 表示正向解析
NS server-2-99.wolf.com. //当前DNS服务器主机名
www A 192.168.2.99 //www后面的内容会由“@”自动补全
ftp.wolf.com. A 192.168.2.98 //这是完整的域名,注意要以“.”结尾
* A 200.0.0.1 //当遇到不能识别的内容时,按此条记录解析 (一般只用在正向解析值中)
server A 192.168.2.1 //DNS轮询——基于DNS的负载均衡
server A 192.168.2.2 //一个域名 --> 多个不同的IP地址
server A 192.168.2.3 //每个IP提供镜像服务内容
$GENERATE 10-90 pc$ A 192.168.2.$ //简化有规律的地址(A或PTR)记录
//$GEENRATE 和 “*”都属于泛域名解析
//检测配置语法,可不进行此操作
[root@server-2-99 named]# named-checkzone wolf.com wolf.com.zone
zone wolf.com/IN: loaded serial 0
OK
//配置反向域名解析配置文件
[root@server-2-99 named]# cp -p named.localhost 192.168.2.arpa
[root@server-2-99 named]# vim 192.168.2.arpa
[root@server-2-99 named]# cat 192.168.2.arpa
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS server-2-99.wolf.com.
100 PTR www.wolf.com.
101 PTR vsftp.wolf.com.
$GENERATE 110-200 $ PTR pc$.wolf.com.
//重启named服务
[root@server-2-99 named]# service named restart
停止 named: [确定]
启动 named: [确定]
服务端的操作就基本上到此为止,接下来就是测试验证了,当然也可以在服务端的这台机器操作,但模拟真实,这次我们新建一台客户端的机器来进行操作。
下面就是在客户端上的测试和验证:
// 配置客户机DNS地址文件,也可以不指定使用临时的方法进行测试
[root@pc-2-97 ~]# vim /etc/resolv.conf
[root@pc-2-97 ~]# cat /etc/resolv.conf
nameserver 192.168.2.99
//正向解析结果验证
[root@pc-2-97 ~]# nslookup www.wolf.com
Server: 192.168.2.99
Address: 192.168.2.99#53
Name: www.wolf.com
Address: 192.168.2.99
[root@pc-2-97 ~]# nslookup ftp.wolf.com
Server: 192.168.2.99
Address: 192.168.2.99#53
Name: ftp.wolf.com
Address: 192.168.2.98
//泛域名解析验证
[root@pc-2-97 ~]# nslookup wwwwww.wolf.com
Server: 192.168.2.99
Address: 192.168.2.99#53
Name: wwwwww.wolf.com
Address: 200.0.0.1
[root@pc-2-97 ~]# nslookup pc19.wolf.com
Server: 192.168.2.99
Address: 192.168.2.99#53
Name: pc19.wolf.com
Address: 192.168.2.19
//DNS轮询验证
[root@pc-2-97 ~]# nslookup server.wolf.com
Server: 192.168.2.99
Address: 192.168.2.99#53
Name: server.wolf.com
Address: 192.168.2.1
Name: server.wolf.com
Address: 192.168.2.2
Name: server.wolf.com
Address: 192.168.2.3
//临时测试方法
[root@pc-2-97 ~]# nslookup pc12.wolf.com 192.168.2.99
Server: 192.168.2.99
Address: 192.168.2.99#53
Name: pc12.wolf.com
Address: 192.168.2.1
//反向解析验证
[root@pc-2-97 ~]# nslookup 192.168.2.100
Server: 192.168.2.99
Address: 192.168.2.99#53
100.2.168.192.in-addr.arpa name = www.wolf.com.
[root@pc-2-97 ~]# nslookup 192.168.2.101
Server: 192.168.2.99
Address: 192.168.2.99#53
101.2.168.192.in-addr.arpa name = vsftp.wolf.com.
[root@pc-2-97 ~]# nslookup 192.168.2.119
Server: 192.168.2.99
Address: 192.168.2.99#53
119.2.168.192.in-addr.arpa name = pc119.wolf.com.
DNS服务的正向解析和反向解析,就基本上是这样了,还有一个是多区域解析,就是在/etc/named.conf文件中再添加一块配置文件,然后添加对应的地址库文件,在这里就不做演示了。
接下来,进行构建主/从DNS
主/从DNS服务搭建
操作流程:
//在主DNS服务器,即刚才搭建的server-2-99服务机上,修改DNS主配置文件
[root@server-2-99 named]# vim /etc/named.conf
//这里我只显示了修改的一部分,其它地方和之前保持一致即可
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
allow-transfer { 192.168.2.98; }; //添加从服务器地址,注意ip和“{}”的前后都需要有一个空格,没有的话,可能会报错,不能启动服务器
};
//测试主从服务器新添加的区域,也可以使用之前的“wolf.com”
zone "war.com" IN {
type master;
file "war.com.zone";
};
//配置地址库文件,和之前一致
[root@server-2-99 named]# pwd
/var/named
[root@server-2-99 named]# cp -p wolf.com.zone war.com.zone
[root@server-2-99 named]# vim war.com.zone
[root@server-2-99 named]# cat war.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS server-2-99.wolf.com.
www A 192.168.2.99
ftp.war.com. A 192.168.2.98
* A 200.0.0.1
server A 192.168.2.1
server A 192.168.2.2
server A 192.168.2.3
$GENERATE 10-90 pc$ A 192.168.2.$
[root@server-2-98 ~]# yum -y install bind bind-chroot
[root@server-2-98 ~]# vim /etc/named.conf
[root@server-2-98 ~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
};
zone "war.com" IN {
type slave;
file "slaves/war.com.zone"; //注意路径发生了改变,地址库文件在从服务器不需要配置,会自动从主服务器同步
masters { 192.168.2.99; }; //主服务器地址
};
[root@server-2-98 ~]# service named restart
停止 named: [确定]
启动 named: [确定
[root@server-2-98 ~]# ls /var/named/slaves/
war.com.zone //文件已经同步
[root@server-2-98 ~]# cat /var/named/slaves/war.com.zone
$ORIGIN .
$TTL 86400 ; 1 day
war.com IN SOA war.com. rname.invalid. (
0 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS server-2-99.wolf.com.
$ORIGIN war.com.
* A 200.0.0.1
ftp A 192.168.2.98
pc10 A 192.168.2.10
pc11 A 192.168.2.11
pc12 A 192.168.2.12
……
pc88 A 192.168.2.88
pc89 A 192.168.2.89
pc90 A 192.168.2.90
server A 192.168.2.1
A 192.168.2.2
A 192.168.2.3
www A 192.168.2.99
那么现在主从DNS服务器的配置已经全部完成,现在我们去客户机上进行验证
//这里就简单写两个验证结果就好,其它的就不一一贴出了
[root@pc-2-97 ~]# nslookup www.war.com 192.168.2.99
Server: 192.168.2.99
Address: 192.168.2.99#53
Name: www.war.com
Address: 192.168.2.99
[root@pc-2-97 ~]# nslookup www.war.com 192.168.2.98
Server: 192.168.2.98
Address: 192.168.2.98#53
Name: www.war.com
Address: 192.168.2.99