linux工程师,RHCE
分类: 系统运维
2022-08-19 17:16:15
最近由于对公司里同事搭建的智能DNS很感兴趣,我开始学习它的搭建方法,首先我带大家重新复习一下关于DNS的基础知识。
大家可能总会在公众号上看到DNS相关的文章,比如《为什么DNS根服务器只有13台?给中国一台真的很难吗?》等等。它是互联网构建的核心协议之一,在我们平时上网时起到重要作用。所以我们需要了解一些它的知识,作为网络行业从业者,就更应该对它更加深入的掌握了。在网络世界中如果想访问一个网站,首先需要知道这个网站的公网IP地址,但由于我们对一长串没有规律的数字不够敏感,使得IP地址很难记住。最开始因为网络世界上的计算机数量少,只有几百台,所以只需要维护HOSTS.TXT文件就可以了,此文件记录着IP和域名的对应关系,由单独的主机STI-NIC负责分发。但由于网络的发展,此方法就不能持续支持了,原因如下:第一,HOSTS.TXT中不允许出现文件冲突,但主机的增多,很难避免不冲突;第二,分对此文件的分发容易引起网络和处理器负载增高;第三,是此文件的一致性无法保障。因此产生了DNS这项服务。
DNS是INTERNET的一项核心服务,用于实现域名与IP地址相互映射的一个分布式数据库,其结构和的文件系统类似,都是树状结构,最顶端是根服务器,用“.”来表示。第二层就是我们熟知的.net、.com等顶级域。网上注册的如linuxprobe.com等是二级域名,它们归企业运维管理。域名的树最深可达127层,每个节点文本标签限制最长为63个字符。接下来讲一下DNS解析流程。首先客户端通过浏览器访问一个域名,如浏览器会向本地域名服务器发起一个DNS解析请求,当本地域名服务器收到请求后,会在本地寻找此解析,如没找到,则会往根服务器发送请求。根服务器全球共有13套,它不直接用于域名解析,但他能向你指向.com的位置。这样做体现了层次化的思想,分担了工作。最后再向.com发送请求,由此域名服务器解析出IP地址并告诉本地DNS服务器,本地DNS在本地缓存并返还给客户端,客户端与目标建立连接,至此DNS解析完成。
DNS的资源记录有如下数据:
先着重介绍一下type。其中有几种常用的资源记录类型:第一是A记录,是指IPv4,AAAA是指IPv6。第二是NS记录,是Name Server域名服务器。第三是CNAME记录。第四是MX记录。第五是PTR记录。DNS也有负载均衡的功能,首先是内部负载均衡。一个应用要访问数据库,应该配置这个数据库的域名,因为如果遇到数据库迁移等,换了IP就要将应用配置同时修改,但如果配置了域名,只要在DNS服务器中将域名映射为新IP就可以了。然后在DNS中配置策略可以实现负载。其次DNS还能做全局负载均衡。如为了应用的高可用性,部署在多个机房,每个机房有独立的IP,当用户访问其域名时,这个IP可以轮询访问多个数据中心实现负载,如一个数据中心挂掉,只要在DNS服务器中将其对应的IP删除就可实现一定的高可用。
说了这么久的DNS,但DNS如何搭建呢?业界普遍是在Linux服务器中搭建BIND软件。现阶段大概有九成的DNS服务器是使用BIND作为服务器软件的。BIND软件现阶段是由互联网系统协会进行维护与开发。安装BIND时安装软件名为bind,但是进程名和用户名为named。搭建BIND需要一定的Linux基础,如果需要学习Linux知识,可以搜索这本书来学习,这本书上也有专门介绍DNS的章节可以学习。它也有官方网站,上面也有很多Linux资讯和技术文章。DNS相关的命令中有个命令叫dig,它和nslookup类似,能在Linux中实现域名解析查询功能。dig能够执行 DNS 搜索,并显示从受请求的域名服务器返回的答复,请求的域名服务器可以手工指定也可以用系统默认的。由于dig命令灵活性好、易用、输出比较清楚,所以DNS服务器管理员通常利用它来诊断DNS故障。
DNS作为我们现有网络的重要组成部分,需要我们进行系统的了解与学习。当基础知识理解透彻后可以进一步学习其他的相关知识,比如智能DNS,HttpDNS,CDN等等。当然在学习这些知识之前,Linux也是必不可少的。