创建一个DNS服务器

DNS全称Domain Name System,域名系统,互联网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。简单说来就是DNS让我们在访问网站的时候可以使用网址(域名)而不是IP地址进行访问。

DNS原理简介

详细介绍DNS的工作原理可能要很多字,我比较懒,简单说一下好了。大致能理解其工作流程即可。

上面已经说了DNS的功能就是把域名转换成IP地址(计算机的通信是通过IP进行的)。比如我要访问一个网站,首先我的电脑要知道这个网站的IP地址。但稍微细想你会发现这是个很棘手的工作。我的电脑如何知道这个域名的IP。我猜你已经想到了,我们可以有一个服务器,专门放域名对应的IP。但很显然,没有服务器可以承受来自全世界的请求。当然你可能会想我们可以建很多个服务器,那问题又来了,我的电脑怎么知道这个域名的记录在哪个服务器?当然我们不需要考虑这些问题,毕竟,已经有人给我们解决了。其实这个问题是从上往下来进行解决的。我们还是通过一张图来说明,更容易理解。由于概念太多我也懒得解释了。总之这个整体的结构大概就是这样的。至于解决呢,大约就是通过缓存+分布式。

那假如我要访问一个网站,怎么办呢。首先,比如我在家上网要访问A网站,当请求发出后,会首先到达一个DNS服务器,这个服务器可能并不知道A的IP,于是,这个服务器会先问根,但根不会存储任何网站的一个解析,但根存储了所有顶级域的DNS服务器,于是请求会被转到顶级域的DNS服务器,但依旧不会得到结果,请求会被继续往下转,直到得到一个确定的结果。此时,这个结果会被缓存,当再次访问此网站的时候就不需要在从根绕一遍。(具体的实现会复杂一些,涉及了很多的概念,不过这里还是懒得说,毕竟这里要做的只是实现一个服务器的搭建。)

具体实现

配置其实还算简单,差不多三个配置文件就OK。

安装配置应用

首先,随便使用什么办法安装DNS的应用,名字是bind

假如我有一个域名需要解析。就比如www.xgqy.com吧。

然后在named.rfc1912.zones文件中添加一条记录,文件位于etc目录下

具体格式如下:
zone "xgqy.com" IN {
type master;
file "xgqy.zone";
};

都是什么意思呢?

其实仔细看一下,重要的地方只有两个地方,其他的照抄就可以。

zone后跟的是需要解析的域名

file后面跟的是对应数据库文件,这个文件名其实不重要,重要的是要和后面步骤中的对上号

到此,第一步就好了。

添加解析记录

上一步只是说明了有这个记录,具体的记录在其实在上一步指明的文件中。

当然,我们仍然不需要从头开始,只要将系统中存在的配置文件进行简单的修改就可以了

将/etc/named目录下的named.localhost复制一份并重命名为上一步指定的文件名,我这里是xgqy.zone

格式是这样的(由于某些原因还是贴图吧):

还是懒得解释具体每一项的含义(其实是因为有不少我也说不清)

不过需要改的东西也不多,第一行中的第四个字段和第五个字段

第四个字段是可以自定义的部分,但通常会写作main.xxx.xxx.或者host1.xxx.xxx.

请务必注意,最后一个点。这个点是必须的

第五个字段,是个邮箱,填个邮箱就可以,但是邮箱中的@符号需要使用 . 代替,因为@在此文件中有特殊用途

然后就是倒数第三行,在NS后面加上main就可以了,当然看你第一行第四个字段怎么写的

然后,最后两条记录
main A 192.168.11.2
www A 118.24.120.169

第一条后面的IP地址是当前 DNS的地址

第二条就是实际要解析的地址了

www A IP

总结

好像说的太简单了。就这样吧。总结一下,

1、安装了一个APP

2、在/etc/named.rfc1912.zones中添加了一条记录

3、在/etc/named目录下创建了一个配置文件。

4、好像忘了说了。还要启动服务,名字叫做named

5、emmm还有个文件要改

忘了忘了还有个主配置文件要改,位置在/etc/named.conf,需要改的一共有两行,全部位于options语句块中

1、将listen-on port 53 中括号中的内容改为localhost,注意 ; 分好

2、allow-query中括号中的内容添加一个any记录,整体如下(截取的部分配置文件)

listen-on port 53 { localhost; };
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 { localhost;any; };

 

最后的最后,重启下服务,然后使用dig测试下

dig www.xgqy.com @192.168.11.2

如果出现以下内容说明OK

下一篇