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分别要对上述三个文件的哪些字段修改?

转自:https://www.jianshu.com/u/0d31bfec82e7


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值