从零开始linux学习--搭建一台DNS Server(四)

        DNS(domain name system)是用户上网的基础服务,由于IP地址纯数字的特点,使得人们很难记住一个网站真实的IP地址,就如同人们很难记得某某的手机号码是多少。那如何解决这个问题呢?直观的办法就是创建一个“联系人”的功能,将“人名”字段与“电话号码”字段进行关联,例如小明-13534567890;小红-13534567891,这样,人们在拨打电话的时候,只需要记得人名,无需记得每个人的电话号码,与此类似,DNS应运而生。类似上述例子,域名解析要做的就是将难记的IP地址如42.245.252.152,打一个备注:www.jianshu.com,这时候,简书的拼音是远远比一长串数字更方便记忆。

        如果各位对于dns的基本概念存在疑问,建议花一段时间先学习一下维基百科dns的知识。笔者一直强调基础知识的重要性。

        domain name system用做域名解析的实质是存了一张域名对应IP地址的关系表,网络中客户端进行查询时就会来查这一张表,并在表中得到需要的IP地址信息。如何搭建和维护这一张表,就是笔者要做的内容。

        bind是目前主流的dns开源软件,这节笔者尝试使用bind搭建一台主dns服务器。

希望达成的效果:

1.     新建网络区域内域名解析系统,做到如下表所示的域名—IP对应关系。

        域名                                服务器IP

        a.hbai.com                    192.168.0.1

        b.hbai.com                    192.168.0.2

        c.hbai.com                    192.168.0.3

        d.hbai.com                    192.168.0.4

2.     除上述内网域名外,其余域名查询转发至园区网外dns进行解析,并返回实际IP地址。如查询www.baidu.com返回百度服务器IP。

        好,目标明确之后,笔者来登陆第一节搭建的linux服务器。

        首先,笔者保存一下上一章做的测试网页,并且关闭apache服务:

        /bin/systemctl stop httpd.service

        yum安装bind:yum install bind

        接下来笔者来进行基础配置:vi /etc/named.conf

        注意其中几个重要字段:

        listen-on port 53 { 127.0.0.1; };       本地监听端口;

        listen-on-v6 port 53 { ::1; };          IPv6监听端口,由于笔者暂时没有打算使用IPv6,所以把它用//注释掉;

        directory       "/var/named";     指明了域文件所在的目录(就是笔者需要维护对应关系表所在目录)最好不要修改;

        allow-query { localhost; };           允许那些主机来查询,默认是localhost,由于笔者园区网络与公网有防火墙,这台dns就可以对园区或者专网提供服务,所以把“localhost”改为“any”;

        recursion yes;                    是否允许递归,如果服务器设为主dns倒是可以关闭递归查询,目前笔者搭建的这台需要提供dns查询,所以开启;

        logging {                        logging字段,定义日志所在位置,之后笔者对dns服务器进行监控会用到,不做修改。

        zone "." IN {                     定义了root zone的服务类型为hint,记录文件在/var/named/named.ca中;

        include "/etc/named.rfc1912.zones";   定义区文件位置,笔者要新增的域*.local属于一个zone,即需要在该文件中增加。

对如上内容作修改为:

        其中新增了一个forwarders字段,表示如果服务器无法解析该域名时将请求交与括号内dns服务器解析。就是因为这个字段,笔者可以对本地无法解析的域名(即除*.hbai.com)的域名都转到公用dns上解析。各位在买运营商带宽时,运营商会提供IP地址与dns服务器,这时可以直接加在forwarders字段。

保存退出wq!

启动dns服务:/bin/systemctl start named.service

查看一下服务状态:/bin/systemctl status named.service

        笔者注意到第三行一个字段Loaded: loaded (/usr/lib/systemd/system/named.service;disabled

        这个表示该服务不随开机启动,由于dns这类基础业务类最好在服务器发生宕机之后可以自动恢复,保障业务连续,因此将其设置为开机启动。

        设置dns服务为开机启动:bin/systemctl enable named.service

        继续查看一下状态:/bin/systemctl status named.service

        完成~

        笔者来测试一下服务是否正常:

        老样子,关掉防火墙:systemctl stop firewalld.service

        与上一章相同的网络环境,笔者发现telnet 192.168.101.2 53端口不通?。。

        telnet 192.168.101.2 22端口进行一下测试,发现可以访问。说明问题还是出在53端口上

        笔者看了一下配置似乎没什么大问题,没办法,进行故障排查吧。

        本地测试一下,在dns服务器上去测试一下端口是不是可以正常访问

        未找到该命令。为了测试,插播一条消息,笔者在服务器上继续安装telnet:

        看一下目前telnet的情况:yum list installed | grep telnet

        查看一下可以安装telnet的安装包:yum list | grep telnet

        直接安装telnet.x86_64:

        yum install telnet.x86_64

        yum install telnet-server.x86_64

        再查看一下telnet安装状态: yum list installed | grep telnet

        装好之后继续在服务器上进行telnet测试,发现还是提示被拒绝(Connection refused)。

        继续telnet localhost 53,发现连接上了:connected to localhost

        说明笔者192.168.101.2这个IP在黑名单里啊,没有服务提供。继续检查配置,发现在/etc/named.conf中确实有如下一行没有注意。

        这一段刚开始修改时笔者只注意在port 53 的监听上,其实后面括号内定义了53端口只能由127.0.0.1进行访问。发现故障原因后,笔者直接将其注释掉。

        重启服务:/bin/systemctl restart named.service

        继续回到笔者测试电脑上telnet 192.168.101.2,发现端口可通。小插曲解决。


        下面笔者来配置*.local的域:vi /etc/named.rfc1912.zones

        原有两个zone,在此基础上笔者新建一个名为hbai.com的zone。并将其type设为master。

        zone "hbai.com" IN {

               type master;

               file "db.hbai";

        };

        保存退出wq!

        好了,下一步就是创建域名对应IP地址的关系表:cd /var/named

        ls看一下文件:

        笔者新建一个刚刚在zone声明的文件db.hbai: vi db.hbai

        首先定义dns生存时间ttl,定在1h吧,换算成秒:$TTL 3660

        第二行笔者做一个start of authority标记,定义一个授权区的开始:

        hbai.com.       IN     SOA     mian.hbai.com.    master.hbai.com.

        用()定义一段跨行数据,并对每个数据打一个说明标签:

        2018011001      ;      serial

        定义serial,每当重启dns服务时dns会检测new-serial,当new-serial大于old-serial时主dns会向从dns同步zone。这里笔者没有搭建从dns,意义不大。

        14400           ;       refresh (4 hours)

        定义refresh,从dns每过多长时间向主dns进行serial核对。意义也不大。

        7200            ;       retry  (2 hours)

        定义retry,当从dns向主dns获取serial无响应时多长时间重新发起。目前意义不大。

        604800          ;       expire (1 week)

        定义expire,当无主dns响应时从dns提供权威解析时间。

        86400           ;       minimum (1 day)

        定义negative caching,不做详细解释,有兴趣查一下RFC 2308文档定义。


        另起一行  $ORIGIN hbai.com.

        定义从改行一下所有域名以hbai.com结尾。


        添加NS记录,将以hbai.com的域名解析权交与名为main.hbai.com的dns

        添加最开始表格的域名-IP对应关系。

        wq!保存退出。


        笔者来看一下整体的文件:cat db.hbai

        重启dns服务:/bin/systemctl restart named.service

        开启防火墙:systemctl start firewalld.service

        永久添加tcp 53端口:firewall-cmd --zone=public --add-port=53/tcp --permanent

        永久添加udp53端口:firewall-cmd --zone=public --add-port=53/udp --permanent

        重启防火墙:firewall-cmd --reload

        笔者最后在电脑上进行dns服务测试:开始--搜索—cmd

        输入nslookup

        看到目前电脑的dns,笔者继续隐去。。

        设置服务器为192.168.101.2:server 192.168.101.2

        看到这时候“默认服务器”和“Address”字段都变为了192.168.101.2的IP地址。

        直接输入a.hbai.com;d.hbai.com;www.baidu.com进行测试。

        笔者看到,对于笔者自己维护的域名(*.hbai.com)的域名,笔者的dns server给出了权威解析,而对于不在笔者管控的其他域名,通过递归查询返回了非权威的dns应答。

        到此为止dns服务器的搭顺利完成~

        由于公网IP没法贴出来,上图一堆马赛克没法展示效果,笔者第二章设置了服务器接入专网,并配置了IP地址10.150.101.249。笔者可以同样在专网内做一个测试:

        这样结果就很清楚了。

        DNS Server的搭建可以使得笔者正常访问园区内外的网络资源(如百度),也可以标注数据中心内或者专网内的服务器信息(如a.hbai.com 192.168.0.1),提供网络服务的基本保障。




问题:

1.     类比电话簿,如果一个网站服务器出现故障,需要更换服务器IP地址,这件事情对dns有什么影响,对用户访问有什么影响?

2.     故障排查(trouble shooting)是一个复杂的东西,第三章和第四章都尝试进行了简单的故障排查,简单阐述笔者在遇到问题时故障排除的思路。

3.     第三章笔者搭建了一个测试网站,在此基础上尝试将网站迁移至另一台服务器如192.168.101.3并将域名test.hbai.com指向192.168.101.3做到如下页面的访问。

4.     笔者其实已经按照master-slave的部署方式修改了named.conf、named.rfc1912.zones、db.hbai的文件,我们可以将如此配置直接copy至另一台用做slave dns的服务器来完成主从搭建,尝试说明对于master dns和slave dns分别要对上述三个文件的哪些字段修改?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341