注意:实验很简单,环境很重要。大家在做实验的时候一定要注意环境的配置,不然实验做的再好最后的结果也和我们想的要的结果不一样的。
首先我们先准备环境:
虚拟机一个
RedHat5.9系统两个操作系统
我们把他们的网路连接在同一个“VMnet”里
配置IP地址,都配置在一个网段的IP。
注释:
DNS有几点要注意的
DNS可以一个域名对应很多IP
DNS可以一个IP对应很多域名
注意:首先要关闭防火墙和selinux
[root@localhost ~]# /etc/init.d/iptables stop
[root@localhost ~]# setenforce 0
搭建DNS的目的
DNS是Domain Name System (域名系统)的简称,DNS可以为计算机,服务以及接入互联网或局域网的任何资源提供分层的名称解析功能。DNS提供了很多功能其中最重要的功能就是进行域名与IP地址之间的解析。在互联网中标记唯一一台计算机使用的是IP地址,通过合法的IP地址,我们可以与全世界任何一台主机进行通信。然而在当今计算机如此普及的情况下,以人类的智慧与记忆力很难将大量的IP地址背捅下来,这时使用域名系统就可以将难以记忆的数字IP地址与容易记忆的域名建立映射关系,用户通过输入域名,计算机会寻找指定的DNS服务器,请求服务器帮助解析该域名对应的IP地址,成功解析后,将获得该域名对应的真实IP地址,然后使用该IP地址与对方通信。
安装DNS软件:
提供DNS服务的软件有很多,而伯克利加州大学研发的 BIND (Berkeley Internet Name Domain)是目前应用最广的DNS服务器系统。该项目软件除了BIND主程序外,在Linux 平台下还提了“chroot”与
“utils”软件包,“bind-chroot”软件包的主要功能室使BIND软件可以运行在“chroot”模式下,这样BIND运行在相对路径的根路径,而不是Linux系统的真正的根路径,即使有人对BIND软件进行攻击与破坏,影响的也仅仅是操作系统中的一个子目录,不会影响整个操作系统平台,以此来提升系统烦人安全性。通过yum安装“bind-chroot”后,对“bind”而言,"/var/named/chroot"目录就是根路径,所有BIND软件的配置文件都在跟下的某某路径下。“bind-chroot”软件包提供了一些DNS查询工具。
如:dig,host,nslookup 等。
注意首先给“dns01.baidu.com”配置IP。
baidu.com # 这个是我们所定义的域名。
www.baidu.com 192.168.0.1 # 这个是我们定义的域名和对于的IP地址。
bbs.baidu.com 192.168.0.2 # 这个是我们定义的域名和对于的IP地址。
dns01.baidu.com 192.168.0.1 # 这个事本机定义的域名,和对于的IP地址。
[root@localhost ~]# ifconfig eth0 192.168.0.1
1)安装DNS的相关软件我们可以使使用“YUM”来安装:
bind # BIND服务器软件包
bind-chrooot # 为BIND提供 chroot 机制的软件包
bind-utils # DNS测试程序软件包
caching-nameserver # 这个包是提供模板的,在Linux6.版本系统就没有这个包了。
[root@localhost ~]# yum -y install bind
[root@localhost ~]# yum -y install bind-chroot
[root@localhost ~]# yum -y install bind-utils
[root@localhost ~]# yum -y install caching-nameserver
2)我们使用“rpm -q ”查询一下是否安装上相关的软件:
[root@localhost ~]# rpm -q bind
bind-9.3.6-20.P1.el5_8.5
[root@localhost ~]# rpm -q bind-chroot
bind-chroot-9.3.6-20.P1.el5_8.5
[root@localhost ~]# rpm -q bind-utils
bind-utils-9.3.6-20.P1.el5_8.5
[root@localhost ~]# rpm -q caching-nameserver
caching-nameserver-9.3.6-20.P1.el5_8.5
这样证明我们所需要的软件已经安装上了。如果没有安装上会提示这样的信息“package asdas is not installed”。
3)现在我们来配置DNS的的配置文件
注释:我们使用“cp”命令
-p : 的意思是保持原来的属性
这里要要注意的就是主配置文件的所有者是“root”所属组“named”
[root@localhost ~]# cd /var/named/chroot/etc/
[root@localhost etc]# cp -p named.caching-nameserver.conf named.conf
[root@localhost etc]# vim named.conf
//
// named.caching-nameserver.conf
//
// Provided by Red Hat caching-nameserver 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.
//
// DO NOT EDIT THIS FILE - use system-config-bind or an editor
// to create named.conf - edits to this file will be lost on
// caching-nameserver package upgrade.
//
options {
listen-on port 53 { 192.168.0.1; }; # 这里改成本机的IP地址
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";
// Those options should be used carefully because they disable port
// randomization
// query-source port 53;
// query-source-v6 port 53;
allow-query { any; }; # 这里改成“any”意思是允许所有。
allow-query-cache { any; }; # 这里改成“any”意思是允许所有。
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
view localhost_resolver {
match-clients { any; }; # 这里改成“any”意思是允许所有。
match-destinations { any; }; # 这里改成“any”意思是允许所有。
recursion yes;
include "/etc/named.rfc1912.zones";
};
4)我们在配置这个文件:在最后的加上10行。定义区域配置文件。
[root@localhost etc]# vim named.rfc1912.zones
// named.rfc1912.zones:
//
// Provided by Red Hat caching-nameserver package
//
// ISC BIND named zone configuration for zones recommended by
// RFC 1912 section 4.1 : localhost TLDs and address zones
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
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 "baidu.com" IN { # 把这里修改成我们所定义的域名,这个是正向解析
type master;
file "baidu.com.zone"; # 这个是域名的名字。记住一定要和我们在区域文件名
allow-update { none; }; 字一样,不一样在启动的时候会报错。
};
zone "0.168.192.in-addr.arpa" IN { # 把这里修改成我们所定义的域名,这个是反向解析
type master;
file "192.168.0.arpa"; # 这个是域名的名字。记住一定要和我们在区域文件名
allow-update { none; }; 字一样,不一样在启动的时候会报错。
};
注意:最下面的这10行是从上面复制下来的模板。把复制的模修改一下就可以了。
5)配置完成以后我们在检测一下配置文件的语法是否正确,如果没有提示任何信息,表明语法正确。
[root@localhost etc]# named-checkconf named.conf
[root@localhost etc]# named-checkconf named.rfc1912.zones
6)接下来配置区域配置文件,我们切换到区域的路径下:
注释:我们使用“cp”命令
-p 的意思是保持原来的属性
我们复制一个正向文件和一个反向解析文件。
这里要要注意的就是主配置文件的所有者是“root”所属组“named”
[root@localhost etc]# cd /var/named/chroot/var/named/
[root@localhost named]# cp -p named.local baidu.com.zone
[root@localhost named]# cp -p named.local 192.168.0.arpa
这个是正向解析的配置文件:
[root@localhost named]# vim baidu.com.zone
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS dns01.baidu.com. # 这个域名可以没有的。
dns01 IN A 192.168.0.1
www IN A 192.168.0.1
bbs IN A 192.168.0.2
这个事反向解析的配置文件:
[root@localhost named]# vim 192.168.0.arpa
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS dns01.baidu.com.
1 IN PTR dns01.baidu.com.
1 IN PTR www.baidu.com.
2 IN PTR bbs.baidu.com.
7)现在检测语法看看是否配置正确,“baidu.com” 是我们的域名。
[root@localhost named]# named-checkzone baidu.com baidu.com.zone
zone baidu.com/IN: loaded serial 1997022700
OK
[root@localhost named]# named-checkzone baidu.com 192.168.0.arpa
zone baidu.com/IN: loaded serial 1997022700
OK
8)现在就可以启动DNS服务了,在加入开机启动项。
[root@localhost named]# service named restart
[root@localhost named]# chkconfig named on
9)现在我们就可以来测试了。我们可以使用客户端或者是本机来测试,方法如下。
我们苦役使用:host nslookup 等命令来测试。
首先也要在本机指定DNS,是为了我们来测试DNS。
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.0.1
(1)本机测试方法如下:
[root@localhost etc]# nslookup www.baidu.com
Server: 192.168.0.1
Address: 192.168.0.1#53 #“53”代表监控的端口
Name: www.baidu.com
Address: 192.168.0.1 # 解析出对应的IP地址
[root@localhost etc]# nslookup bbs.baidu.com
Server: 192.168.0.1
Address: 192.168.0.1#53 #“53”代表监控的端口
Name: bbs.baidu.com
Address: 192.168.0.2 # 解析出对应的IP地址
[root@localhost etc]# nslookup dns01.baidu.com
Server: 192.168.0.1
Address: 192.168.0.1#53
Name: dns01.baidu.com
Address: 192.168.0.1 # 解析出对应的IP地址
[root@localhost etc]# host dns01.baidu.com
dns01.baidu.com has address 192.168.0.1 # 解析出对应的IP地址
[root@localhost etc]# host www.baidu.com
www.baidu.com has address 192.168.0.1 # 解析出对应的IP地址
[root@localhost etc]# host bbs.baidu.com
bbs.baidu.com has address 192.168.0.2 # 解析出对应的IP地址
结果证明我们配置正确。
10)下面是测试反向解析的方法:
[root@localhost etc]# nslookup 192.168.0.1
Server: 192.168.0.1
Address: 192.168.0.1#53
1.0.168.192.in-addr.arpa name = www.baidu.com. # 解析出对应的IP地址
1.0.168.192.in-addr.arpa name = dns01.baidu.com. # 解析出对应的IP地址
[root@localhost etc]# nslookup 192.168.0.2
Server: 192.168.0.1
Address: 192.168.0.1#53
2.0.168.192.in-addr.arpa name = bbs.baidu.com. # 解析出对应的IP地址
[root@localhost etc]# host 192.168.0.1
1.0.168.192.in-addr.arpa domain name pointer dns01.baidu.com. # 解析出对应的IP地址
1.0.168.192.in-addr.arpa domain name pointer www.baidu.com. # 解析出对应的IP地址
[root@localhost etc]# host 192.168.0.2
2.0.168.192.in-addr.arpa domain name pointer bbs.baidu.com. # 解析出对应的IP地址
11)现在我们在客户机上测试
注释:要测试DNS,首先要在客户端设置指定DNS
在测试前首先来配置一下客户端的环境。
要配置IP和DNS服务器一个网段的IP地址。
在把两台连接到一个虚拟的网段。如图“1”
在客户机上配置IP地址:
[root@localhost ~]# ifconfig eth0 192.168.0.3
图“1”
我们可以点击虚拟机设置来设置两台虚拟机的网段。
12)现在可以来测试DNS是否可以解析我们设置的域名或者把IP解析成域名。方法如下:
首先在客户端指定DNS,我们在这个文件里添加一行,来指定DNS
[root@localhost ~]# vim /etc/resolv.conf
nameserver 192.168.0.1
13)现在我们来测试正向解析,把域名解析成IP地址。
[root@localhost ~]# nslookup www.baidu.com
Server: 192.168.0.1
Address: 192.168.0.1#53
Name: www.baidu.com
Address: 192.168.0.1 # 解析出对应的IP地址
[root@localhost ~]# nslookup bbs.baidu.com
Server: 192.168.0.1
Address: 192.168.0.1#53
Name: bbs.baidu.com
Address: 192.168.0.2 # 解析出对应的IP地址
[root@localhost ~]# nslookup dns01.baidu.com
Server: 192.168.0.1
Address: 192.168.0.1#53
Name: dns01.baidu.com
Address: 192.168.0.1 # 解析出对应的IP地址
[root@localhost ~]# host www.baidu.com
www.baidu.com has address 192.168.0.1 # 解析出对应的IP地址
[root@localhost ~]# host bbs.baidu.com
bbs.baidu.com has address 192.168.0.2 # 解析出对应的IP地址
[root@localhost ~]# host dns01.baidu.com
dns01.baidu.com has address 192.168.0.1 # 解析出对应的IP地址
14)现在我们来测试反向解析,把IP地址解析成域名。
[root@localhost ~]# nslookup 192.168.0.1
Server: 192.168.0.1
Address: 192.168.0.1#53
1.0.168.192.in-addr.arpa name = www.baidu.com. # 解析出对应的域名
1.0.168.192.in-addr.arpa name = dns01.baidu.com. # 解析出对应的域名
[root@localhost ~]# nslookup 192.168.0.2
Server: 192.168.0.1
Address: 192.168.0.1#53
2.0.168.192.in-addr.arpa name = bbs.baidu.com. # 解析出对应的域名
[root@localhost ~]# host 192.168.0.1
1.0.168.192.in-addr.arpa domain name pointer dns01.baidu.com. # 解析出对应的域名
1.0.168.192.in-addr.arpa domain name pointer www.baidu.com. # 解析出对应的域名
[root@localhost ~]# host 192.168.0.2
2.0.168.192.in-addr.arpa domain name pointer bbs.baidu.com. # 解析出对应的域名
测试完毕。结果证明我们所测试的结果是正确的。
总结
通过对DNS的测试我们基本现实了。域名解析IP,或者是IP解析域名的目的。简化了我们人对IP地址的记忆困难,从而使我们通过记忆域名来记忆那些IP地址。这样的话我们人就可以记忆更多的域名来访问更多的网站了,通过实验我们可以从这个实验可以看出几点不足的地方。
在企业里如果这台DNS服务器坏的话,我们又要怎么解析域名那 ?
我们是不是可以做好几台DNS服务器那?
做好几台DNS服务器是为什么啊 ?
通过搭建DNS服务器这个实验我们学到了什么?我们的收获是什么 ?
我们有什么更好的方法把这个DNS服务器做的更好那?
实验有什么不足的地方大家给予意见,我会还好好接受的 。
注释:我们学的不是怎么做实验,而是学习DNS的原理,工作流程,以及怎么显实现的过程。
本文出自 “Dragon” 博客,转载请与作者联系!