构建一个完整的DNS系统
人心不同 各如其面 如之奈何 如之奈何
——引子
我们的目标很明了——构建一个具有根的、私有的DNS(Domain Name System)。
这里不会陈述太多关于DNS与BIND的基础知识,如果您需要查看一些基础性的文章,文章末尾附录之中有传送门。

上图摘自《DNS与BIND》中文第四版。

上图便是我们整个DNS系统的鸟瞰,您需要特别注意,由于我们整个过程需要启动6个相互关联的、位于GNU/Linux操作系统上的DNS服务器,一个小小的失误,极可能导致最终的失败,所以,在接下来的“游戏”里,您应该时刻知道我们目前处于系统的哪个位置。


此次实验共有6台服务器参与,他们皆位于VMnet2:192.168.31.0/24网络中,当然,如果加上Host主机,就是7台。
Host主机的IP地址默认为192.168.31.1,我们将Clone 1的IP设置为192.168.31.98,他将担负根DNS服务器的职责。Clone 2至Clone 6便直接对应设置为192.168.31.2依次至192.168.31.6。
下面,我们便开始此次游历。
Step root:
目前位置——服务器Clone 1,192.168.31.98,职能为根DNS服务器。
各配置文件如下。
# /etc/named.conf
acl listen_acl
{
any;
};
acl allow_query_acl
{
any;
};
acl allow_recursion_acl
{
none; # allow_recursion none
};
acl allow_transfer_acl
{
none;
};
acl allow_update_acl
{
none;
};
options
{
listen-on port { listen_acl; };
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 { allow_query_acl; };
allow-recursion { allow_recursion_acl; };
allow-transfer { allow_transfer_acl; };
allow-update { allow_update_acl; };
}; zone "." IN {
type master; #master
file "root.zone";
};
# /var/named/root.zone
. IN SOA dns-.dns.mil. dns.mail.dns.mil. . IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98 cc. IN NS dns-cc-.dns.cc.
dns-cc-.dns.cc. IN A 192.168.31.3
org. IN NS dns-org-.dns.org.
dns-org-.dns.org. IN A 192.168.31.3 ;根域划分 子域授权
确认、启动根DNS服务。
Step cc & Step org:
目前位置——顶级域DNS服务器Clone 3,192.168.31.3,我们将cc与org域的DNS服务皆放在Clone 3服务器上,其将担负顶级域DNS服务器的职能。
各配置文件如下。
# /etc/named.conf
acl listen_acl
{
any;
};
acl allow_query_acl
{
any;
};
acl allow_recursion_acl
{
none;
};
acl allow_transfer_acl
{
none;
};
acl allow_update_acl
{
none;
};
options
{
listen-on port { listen_acl; };
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 { allow_query_acl; };
allow-recursion { allow_recursion_acl; };
allow-transfer { allow_transfer_acl; };
allow-update { allow_update_acl; };
};
zone "." IN {
type hint; #hint
file "root.cache"; #指定root DNS服务器的IP地址与FQDN
};
zone "cc" IN {
type master;
file "cc.zone";
};
zone "org" IN {
type master;
file "org.zone";
};
# /var/named/root.cache
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
# /var/named/cc.zone
$TTL
cc. IN SOA dns-cc-.dns.cc. dns-cc.mail.dns.cc. (
3H
15M
3D
1D
);
cc. IN NS dns-cc-.dns.cc.
dns-cc-.dns.cc. IN A 192.168.31.3
eecs.cc. IN NS dns.eecs.cc.
dns.eecs.cc. IN A 192.168.31.4
# /var/named/org.zone
$TTL
org. IN SOA dns-org-.dns.org. dns-org.mail.dns.org. (
3H
15M
3D
1D
);
org. IN NS dns-org-.dns.org.
dns-org-.dns.org. IN A 192.168.31.3
free.org. IN A 192.168.31.3
just.org. IN NS dns.just.org.
dns.just.org. IN A 192.168.31.5
确认、启动顶级域DNS服务。
Step eecs.cc:
目前位置——eecs.cc域DNS服务器Clone4,192.168.31.4。
各配置文件如下。
# /etc/named.conf
# /etc/named.conf
acl listen_acl
{
any;
};
acl allow_query_acl
{
any;
};
acl allow_recursion_acl
{
none;
};
acl allow_transfer_acl
{
none;
};
acl allow_update_acl
{
none;
};
options
{
listen-on port { listen_acl; };
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 { allow_query_acl; };
allow-recursion { allow_recursion_acl; };
allow-transfer { allow_transfer_acl; };
allow-update { allow_update_acl; };
}; zone "." IN {
type hint;
file "root.cache";
};
zone "eecs.cc" IN {
type master;
file "eecs.cc.zone";
};
# /var/named/root.cache
; /var/named/root.cache
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
# /var/named/eecs.cc.zone
; /var/named/eecs.cc.zone
$TTL eecs.cc. IN SOA dns.eecs.cc. dns.mail.eecs.cc. ( 3H
15M
3D
1D
); eecs.cc. IN NS dns.eecs.cc.
dns.eecs.cc. IN A 192.168.31.4 eecs.cc. IN A 192.168.31.4
mail.eecs.cc. IN A 192.168.31.4
www.eecs.cc. IN A 192.168.31.4
ftp.eecs.cc. IN A 192.168.31.4
cs.eecs.cc. IN A 192.168.31.4
确认、启动eecs.cc域DNS服务。
Step just.org:
目前位置——just.org域DNS服务器Clone 5,192.168.31.5。
各配置文件如下。
# /etc/named.conf
# /etc/named.conf
acl listen_acl
{
any;
};
acl allow_query_acl
{
any;
};
acl allow_recursion_acl
{
none;
};
acl allow_transfer_acl
{
none;
};
acl allow_update_acl
{
none;
};
options
{
listen-on port { listen_acl; };
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 { allow_query_acl; };
allow-recursion { allow_recursion_acl; };
allow-transfer { allow_transfer_acl; };
allow-update { allow_update_acl; };
}; zone "." IN {
type hint;
file "root.cache";
};
zone "just.org" IN {
type master;
file "just.org.zone";
};
# /var/named/root.cache
; /var/named/root.cache
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
# /var/named/just.org.zone
; /var/named/just.org.zone
$TTL just.org. IN SOA dns.just.org. dns.mail.just.org. ( 3H
15M
3D
1D
); just.org. IN NS dns.just.org.
dns.just.org. IN A 192.168.31.5 www.just.org. IN A 192.168.31.5
mail.just.org. IN A 192.168.31.5
确认、启动just.org域DNS服务。
Step DNS Server:
目前位置——递归DNS服务器Clone 6,192.168.31.6,此服务器直接向用户提供DNS服务。
各配置文件如下。
# /etc/named.conf
acl listen_acl
{
any;
};
acl allow_query_acl
{
any;
};
acl allow_recursion_acl
{
any; # allow_recursion any
};
acl allow_transfer_acl
{
none;
};
acl allow_update_acl
{
none;
};
options
{
listen-on port { listen_acl; };
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 { allow_query_acl; };
allow-recursion { allow_recursion_acl; };
allow-transfer { allow_transfer_acl; };
allow-update { allow_update_acl; }; }; zone "." IN {
type hint;
file "root.cache";
};
# /var/named/root.cache
; /var/named/root.cache
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
. IN NS dns-.dns.mil.
dns-.dns.mil. IN A 192.168.31.98
确认、启动递归DNS服务。
至此,整个系统构建完成。
我们使用Clone 2主机对我们的DNS系统进行测试。
1.编辑/etc/resolv.conf文件,已达到设置系统默认nameserver的目的;
2.进行测试,结果如下图:

附录:
基础资料传送门:http://www.cnblogs.com/smilenana/p/3414077.html http://www.cnblogs.com/xiaoluo501395377/tag/CentOS/
构建一个完整的DNS系统的更多相关文章
- 构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)
构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study ...
- 第三周——构建一个简单的Linux系统MenuOS
[洪韶武 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ] 第三周 构建一个 ...
- 快速构建一个完整的Selenium框架
今天跟大家细讲如何构建一个完整的selenium框架,当你学会了这一篇你就也可以说自己会selenium自动化测试了. 1.新建项目,结构如图: 注意:整个项目除了最外层的是文件夹,其他的都是包(pa ...
- 《Linux内核分析》第三周 构建一个简单的Linux系统MenuOS
[刘蔚然 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000] WEEK THREE ...
- Java程序员如何运用所掌握的技术构建一个完整的业务架构
1.通用架构概述 创业之初,我们往往会为了快速迭代出产品,而选择最简单的技术架构,比如LAMP架构,SSH三层架构.这些架构可以适应初期业务的快速发展,但是,随着业务变得越来越复杂,我们会发现这些架构 ...
- 20135323符运锦----第三周:构建一个简单的Linux系统MenuOS
相关知识点 1.arch目录 占据相当庞大的空间,X86目录下代码需要重点关注. 2.init目录 内核启动的相关代码基本都在此目录下,内含MAIN.C,文件中START_KERNEL是整个LINUX ...
- 【MEF】构建一个WPF版的ERP系统
原文:[MEF]构建一个WPF版的ERP系统 引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合 ...
- 转载自 BotVS 「 珍藏版 」如何搭建一个完整的交易框架
[img]http://dn-filebox.qbox.me/8c218c119046b2a25df2d9c7b00c1e0fa6899bdd.png[/img]NO:01 交易策略 ≠ 交易系统. ...
- Linux下一个简单的日志系统的设计及其C代码实现
1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回 ...
随机推荐
- Mysql按照字段值做分组行转列查询
今天做个后台服务,有个需求是批量生成一批表的数据,如果用BulkInsert会提升很大一截提交效率,但是如果用循环构造提交的Datable,则算法开销太高,所以用这种查询批量查出符合格式的DataTa ...
- JSP学习(一)JSP基础语法
JSP基础语法 1.JSP模版元素 JSP页面中的HTML内容称之为JSP模版元素. JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观. <%@ page language=&quo ...
- HDU2473 Junk-Mail Filter 【可删除的并查集】
HDU2473 Junk-Mail Filter Problem Description Recognizing junk mails is a tough task. The method used ...
- MAC OS环境下搭建基于Python语言的appium自动化测试环境
#1 安装JDK java -version #2 下载SDK http://adt.android-studio.org/ 下载adt #3 配置sdk环境变量 打开终端,依次输入命令 vim .b ...
- PAT 1009 说反话 C语言
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式:测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串.字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区 ...
- quick 状态机StateMachine
function Player:addStateMachine() self.fsm_ = {} cc.GameObject.extend(self.fsm_) :addComponent(" ...
- 利用mysqldump备份mysql
mysqldump备份机制:通过给定的参数信息和系统表数据,来一张表一张表地获取数据并生成insert语句插入备份文件中,这样由于时间点不一致,就会导致数据不一致,然而对于一个要求强一致性的系统来说, ...
- oracle之 利用 controlfile trace文件重建控制文件
一. 11g RAC 重建控制文件 1. --"create controlfile"命令生成到追踪文件中:alter database backup controlfile to ...
- c# winform委托的使用
可参考http://bbs.csdn.net/topics/390377875中使用new Action<>的使用方式,替代delegate的申明. public delegate voi ...
- The SDK platform-tools version ((21)) is too old to check APIs compiled with API 23
android studio是个坑爹的工具,每次打开文件头都出现如上错误提示. 解决方法: Update your android sdk platform-tools to the revision ...