目录
根域 .
在整个 DNS 系统的最上方一定是 . (小数点) 这个 DNS 服务器 (称为 root),也叫”根域“。名字分别为”A”—“M“
根域 <13台 全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。>
顶级域名(Top Level Domain)主要分为三大类:
(1)国家顶级域名nTLD(National Top-Level Domain):如cn为China表示中国,us为The United States表示美国。
(2)通用顶级域名gTLD(generic Top-Level Domain):如com为Commercial代表商业机构,org为Organizations表示非盈利组织。
(3)基础结构域名(infrastructure domain):这类域名比较少见,如ipv6.arpa,用于域名反向解析为IPV6地址。
顶级域名由ICANN委任的注册机构负责运行
二级域名:
无需到ICANN进行申请 只需要到运行定会及域名的注册机构去检查待申请的名字是否可用,并且不是别人的商标
缴纳年费 得到自己心仪的域名
域名的规则:
域名不区分大小写
各个组成部分的名字最多有63字符长,整个路径不超过255个字符
没有规则限制同时在两个或多个顶级域名下的注册(sony.com sony.net)
要创建一个新的域,创建者必须得到该新域的上级域的许可,一旦创建成功该新域就可创建子域,无需征得上级域的同意。
域名遵循的是组织的边界而不是物理网络的边界
2. DNS解析
域名服务器
从域名到IP地址的解析需要调用域名服务器程序 ,把运行域名解析程序的服务器称为域名服务器。域名服务器管辖域名,并且它很厉害,能够按片按区(zone)区管理,区最大时等于域,见下图。
域名服务器分为以下四类:
(1)根域名服务器。知道所有的顶级域名服务器的域名和IP地址,如果本地域名服务器无法对域名进行解析时,都要求助于根域名服务器,由根域名服务器告诉下一步应该去查找哪个顶级域名服务器。共有从 a.root-servers.net 到 m.root-servers.net 13个不同IP地址的根域名服务器(不代表只有13个域名服务器,而是有13套装置,内部有很多域名服务器)。
(2)顶级域名服务器。管理所有的二级域名服务器器的域名和IP地址。
(3)权限域名服务器。管理下一级的权限域名服务器的域名和IP地址。
(4)本地域名服务器。主机发送DNS查询请求时,查询首先要通过本地域名服务器,每一个因特网服务提供者ISP或一个大学或一个企业都可以拥有一个本地域名服务器,平时在PC中可以设置,Windows设置见下图。
域名如何解析?
通常主机向本地域名服务器采用递归查询(recursive query),意思是主机询问本地域名服务器,本地域名服务器不知道时,就以DNS客户的身份向根域名服务器继续发送查询请求报文,而不是让主机进行下一步查询。通常本地域名服务器向根域名服务器采用迭代查询(iterative query),意思是根域名服务器返回给本地域名服务器一个要查询的IP地址,或者告诉本地域名服务器下一步向哪个顶级域名服务器查询,或者报错无法查询到所需的IP地址,具体见下图,以查询www.cuc.edu.cn域名为例。
总共有10个步骤,,使用10个UDP用户数据报的报文,本地域名服务器进行4次迭代查询后,从 dns.cuc.edu.cn 中得到 www.cuc.edu.cn 的IP地址:
(1)用户主机向本地域名服务器进行递归查询。
(2)本地域名服务器采用迭代查询,首先选择根域名服务器 d.root-servers.net 查询。
(3)根域名服务器 d.root-servers.net 告诉本地域名服务器,下一次应查询的顶级域名服务器cn的地址 x.dns.cn (很多个)和对应的IP地址。
(4)本地域名服务器选择顶级域名服务器 e.dns.cn 进行查询。
(5)顶级域名服务器 e.dns.cn 告诉本地域名服务器,权限域名服务器 edu.cn 的域名地址 x.edu.cn (很多个,下面dig中的 ns.cernet.net 为中国教育和科研计算机网的域名服务器地址)和对应的IP地址。
(6)本地域名服务器选择权限域名服务器 dns.edu.cn 进行查询。
(7)权限域名服务器 dns.edu.cn 告诉本地域名服务器,权限域名服务器 cuc.edu.cn 的域名地址 bdns.cuc.edu.cn、bdns2.cuc.edu.cn.、pdns.cuc.edu.cn 和对应的IP地址。。
(8)本地域名服务器选择权限域名服务器 bdns.cuc.edu.cn 进行查询。
(9)权限域名服务器 bdns.cuc.edu.cn 告诉本地域名服务器, www.cuc.edu.cn 的IP地址。
(10)本地域名服务器告诉查询主机 www.cuc.edu.cn 的IP地址。
在Windows中安装dig.exe后,用dig www.cuc.edu.cn +trace 命令行查询解析过程如下所示:
C:\Users\user>dig www.cuc.edu.cn +trace
; <<>> DiG 9.9.7 <<>> www.cuc.edu.cn +trace
. 343445 IN NS e.root-servers.net.
. 343445 IN NS i.root-servers.net.
. 343445 IN NS c.root-servers.net.
. 343445 IN NS l.root-servers.net.
. 343445 IN NS a.root-servers.net.
. 343445 IN NS h.root-servers.net.
. 343445 IN NS g.root-servers.net.
. 343445 IN NS b.root-servers.net.
. 343445 IN NS d.root-servers.net.
. 343445 IN NS f.root-servers.net.
. 343445 IN NS j.root-servers.net.
. 343445 IN NS k.root-servers.net.
. 343445 IN NS m.root-servers.net.
;; Received 239 bytes from 114.114.114.114#53(114.114.114.114) in 117 ms
//以上为本地域名服务器向根域名服务器求助
cn. 172800 IN NS a.dns.cn.
cn. 172800 IN NS b.dns.cn.
cn. 172800 IN NS c.dns.cn.
cn. 172800 IN NS d.dns.cn.
cn. 172800 IN NS e.dns.cn.
cn. 172800 IN NS f.dns.cn.
cn. 172800 IN NS g.dns.cn.
cn. 172800 IN NS ns.cernet.net.
;; Received 705 bytes from 199.7.x.x#53(d.root-servers.net) in 78 ms
//以上为从根域名服务d.root-servers.net中获取的cn顶级域名服务器的域名地址和IP地址
edu.cn. 172800 IN NS deneb.dfn.de.
edu.cn. 172800 IN NS ns2.cuhk.hk.
edu.cn. 172800 IN NS dns.edu.cn.
edu.cn. 172800 IN NS dns2.edu.cn.
edu.cn. 172800 IN NS ns2.cernet.net.
;; Received 682 bytes from 203.119.x.x#53(e.dns.cn) in 278 ms
//以上为从e.dns.cn顶级域名服务器获取edu.cn权限域名服务器的域名地址和IP地址
cuc.edu.cn. 172800 IN NS bdns2.cuc.edu.cn.
cuc.edu.cn. 172800 IN NS pdns.cuc.edu.cn.
cuc.edu.cn. 172800 IN NS bdns.cuc.edu.cn.
;; Received 397 bytes from 202.112.x.x#53(dns.edu.cn) in 1 ms
//以上为从dns.edu.cn权限域名服务器获取cuc.edu.cn权限域名服务器的域名地址和IP地址
www.cuc.edu.cn. 43200 IN A 202.205.22.207
cuc.edu.cn. 43200 IN NS PDNS.cuc.edu.cn.
cuc.edu.cn. 43200 IN NS BDNS2.cuc.edu.cn.
cuc.edu.cn. 43200 IN NS BDNS.cuc.edu.cn.
;; Received 193 bytes from 202.205.x.x#53(bdns.cuc.edu.cn) in 3 ms
//以上为bdns.cuc.edu.cn权限域名服务器获取www.cuc.edu.cn的IP地址
另一种DNS查询方式:主机和本地域名服务器都采取递归查询,见下图。
3.DNS的作用
域名的正向解析 将主机域名转换为对应的IP 地址,以便网络程序能够通过主机域名访问到对应的服务器主机 域名——>IP A记录
域名的反向解析 将主机的IP地址转换为对应的域名,以便网络(服务)程序能够通过IP地址查询到主机的域名 IP——>域名 PTR记录
三.DNS服务
1、企业中的DNS服务
常规做法:购买域名,完成ICP备案,并使用公网的DNS服务(万网、新网、易名中国、dnspod、dns.la等等)进行免费(付费解析)
问题:
有一些内网web服务,例如:jira 、wiki 、zabbix 、jenkins等不适合解析至公网
服务器都有hostname, hostname应该设置为FQDN 如何维护主机名和内网的内部IP关系
一些中间件服务(mysql、mq、redis)等,由于会经常迁移和扩缩容,应该使用域名对外提供配置信息,方便维护
企业对解析至公网的域名有更高的要求(效率-ttl更短、安全-dnssec) 不使用付费的公网DNS 自建公网DNS
实现DNS协议的免费开源软件有很多:
Powerdns 、dnsmasq 、bind等。互联网企业中,bind9使用的最广泛的DNS软件。
2、powerDNS
Welcome to PowerDNS
C语言
PownerDNS发起于1999年,2015成为了Open-Xchange的一部分。它可以作为权威与递归DNS,很成熟,支持多种backend。有web前端。文档全面。应用广泛。
是开源 DNS 软件、服务和支持的主要供应商。我们在世界各地部署了一些对 DNS 要求最高的用户,我们以提供优质软件和最好的可用支持而自豪。自 2015 年以来是Open-Xchange 的一部分。
权威服务,Recursor和dnsdist产品是100%开放源代码。对于服务提供商市场,OX 还销售基于我们的开源产品构建的OX Protect以提供具有 24/7 支持的集成 DNS 解决方案,并包括家长控制、恶意软件过滤、自动攻击缓解和长期查询日志记录等功能。
PowerDNS 的用户和客户包括领先的电信服务提供商、大型集成商、Cloudflare、内容分发网络、有线网络和财富 500 强软件公司。在各个重要市场,如斯堪的纳维亚、德国和 荷兰,PowerDNS 是名称服务器软件的第一供应商。
DNS 是互联网的组成部分之一。一般而言,DNS 可以被视为互联网的“电话簿”,因为它将(主机)名称转换为 IP 地址并将电子邮件地址连接到正确的服务器(除其他外)。
DNS 服务失败等同于互联网服务失败。
PowerDNS 是以下产品的供应商:
域名解析软件
软件支持
咨询、建议、专业服务
运营商级迁移服务
开源软件的“应要求增强”
教程
软件做什么
软件提供:
权威(“托管”)DNS
解析(“缓存”)DNS
分发DNS
调试工具
用于配置区域和记录的 API
在不久的将来版本:一个简单的基于 Web 的管理和配置界面
(第三方工具
此列表已移至我们的 Wiki。
此外,在我们的 Wiki 上,还有一个社区管理的前端列表。)
PowerDNS 提供存储在纯文本文件或第三方数据库(如 MySQL、PostgreSQL、Microsoft SQL Server、Oracle 或 Sybase)中的 DNS 数据。
此类数据库通常由传统 DNS 服务器或通过 第三方 Web 界面提供。
DNS 托管、外包
因为我们不想与我们自己的用户竞争,并希望专注于提供最好的软件和支持,所以我们选择不提供 DNS 托管或托管服务。
如果您提供托管 PowerDNS 服务,请联系我们 ,我们将在第三方托管 PowerDNS 服务页面上列出。
对互联网的贡献和支持
PowerDNS 是互联网标准开发的积极贡献者,也是 UKNOF 和 NLNOG 等本地网络运营商社区的经常支持者。
3、Bind
BIND 9 - ISC
C语言
Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley(伯克利)分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。
BIND 9 已经发展成为一个非常灵活、功能齐全的DNS系统。无论您的应用程序是什么,BIND 9 都可能具有所需的功能。作为第一个、最古老、最常部署的解决方案,熟悉 BIND 9 的网络工程师比任何其他系统都多。
BIND 9 是透明的开源软件,在MPL 2.0许可下获得许可。用户可以自由地向 BIND 9 添加功能,并通过我们开放的Gitlab 回馈社区。
如果您需要源代码,请从ISC 网站或我们的 FTP 站点下载当前版本。或者,为Ubuntu、CentOS/Fedora和标准Debian 软件包安装我们更新的 ISC 软件包。如果您更喜欢 Docker,请获取我们的官方 Docker 镜像。
可通过我们的社区邮件列表获得帮助,或者您可以从 ISC 团队购买支持订阅以获得专家、机密、24×7 的支持。
选择版本:我们一次支持 BIND 9 的三个主要分支:稳定、扩展支持和开发。请参阅此建议:我要下载和安装哪个版本的 BIND?以及我们支持的平台列表。
我们还维护了一个重要的特征矩阵和版本历史。
如果您更喜欢 GUI 管理界面,您可以考虑基于 BIND的商业产品。
安装:提供了安装和升级 BIND 9 的说明。ISC 提供适用于 Windows 的可执行文件以及适用于Ubuntu和CentOS、Fedora和Debian-BIND9 ESV、Debian-BIND 9 Stable、Debian-BIND 9 Development 版本的软件包。我们也有官方的Docker 镜像。大多数操作系统还为其用户提供 BIND 9 软件包。它们可能使用与标准 BIND 9 发行版不同的一组默认值构建,其中一些添加了自己的版本号,但不完全映射到 BIND 9 版本。
配置:BIND 发行版中包含的 BIND管理员参考手册 (ARM)是 BIND 配置的主要参考。有关配置建议,请参阅我们知识库中的最佳实践文档。
解析器用户可能会发现递归解析器入门很有用。有许多关于 BIND 的优秀书籍;Ron Hutchinson为火箭科学家编写的DNS大量发布在 Internet 上的 Zytrax.com 上,可以成为非常有用的在线参考工具。
维护:大多数用户将受益于加入绑定用户邮件列表。我们建议所有用户订阅bind-announce@lists.isc.org 以获取有关新版本和安全漏洞的公告。有关其他新闻,请参阅我们的BIND 博客。我们在 Men and Mice 的合作伙伴举办了一系列非常好的实践培训课程。如果您的 DNS 对您的业务至关重要,我们建议您订阅 ISC 的技术支持。
权威DNS服务:
RRL 减少放大攻击
DLZ 支持从外部数据库获取Zone数据,但不建议在high-query的环境中使用。
Minimum Re-load Time
HSM Support HSM加密
DNSSEC with In-line Signing
Catalog Zones zone的增加删除更加方便,在一个db file中定义等多个SOA
Scalable Master/Slave Hierarchy
递归DNS
NXDOMAIN Redirect 当查询域名不存在时,转向一个Web页面,它依赖于DLZ特征。
Flexible Cache Controls 对于不正确或过期的域名记录,可以干掉他们。
Split DNS 通过View和可见性隔离DNS信息。
Optimum Cache Hit Rate 通过 DNS prefetch ,来提高命中率。
Resolver rate-limiting 在遭受攻击时,对权威DNS查询限速,减轻DDoS攻击影响。
DNSSEC Validation
GeoIP 根据查询者IP的地理位置给出不同的DNS结果
RPZ Response Policy Zones, DNS防火墙,重写一些域名响应,指向NXDOMAIN等。
性能
官方给出的性能测试指标是500k左右,这个是没有任何影响因数的,没有log等。
加了日志一般会缩减,一般会缩减5到7倍。如果日志更复杂可能会更慢。
18年测试环境4核CPU,4G内存为70K。
加了DLZ就更慢一些,会下降10倍甚至更多。
bind安装目录下contrib/queryperf是性能测试模块,需编译安装。
监控
通过配置Statistics,感觉比较弱。只有一些统计信息。
web前端
以下前端都是基于zone file的:
namedmanager 比较老,php7不兼容,不支持master/salve
GloboDNS 配置较复杂
4、CoreDNS
CoreDNS 是一个DNS服务器。它是用Go编写的。由于其灵活性,它可以在多种环境中使用。CoreDNS 在Apache License Version 2下获得 许可,并且完全开源。
开发在Github 上进行。一些开发人员在#coredns 频道上闲逛Slack。
CoreDNS有以下3个特点。
1、插件化(Plugins)。基于Caddy服务器框架,CoreDNS实现了一个插件链的架构,将大量应用端的逻辑抽象成插件的形式(例如,Kubernetes的DNS服务发现、Prometheus监控等)暴露给使用者。CoreDNS以预配置的方式将不同的插件串成一条链,按序执行插件链上的逻辑。在编译层面,用户选择需要的插件编译到最终的可执行文件中,使得运行效率更高。CoreDNS采用Go语音编写,所以从代码层面来看,每个插件其实都只实现了CoreDNS定义的接口的组件而已。第三方开发者只要按照CoreDNS Plugin API编写自定义插件,就可以很方便地集成到CoreDNS中。
2、配置简单化。引入表达力更强的DSL,即Corefile形式的配置文件(也是基于Caddy框架开发的)。
3、一体化的解决方案。区别于Kube-dns“三合一”的架构,CoreDNS编译出来就是一个单独的可执行文件,内置了缓存、后端存储管理和健康检查等功能,无须第三方组件辅助实现其他功能,从而使部署更方便,内存管理更安全。
5、NSD
NLnetLabs/nsd: The NLnet Labs Name Server Daemon (NSD) is an authoritative, RFC compliant DNS nameserver. (github.com)
NLnet Labs Name Server Daemon (NSD) 是一个权威的 DNS 名称服务器。它专为在速度、可靠性、稳定性和安全性非常重要的环境中运行而开发。
NSD 有一个纯粹的设计理念,优先考虑原始性能。这意味着,如果您每秒处理数十万甚至数百万次查询,那么 NSD 是世界上领先的实现。这使得名称服务器非常适合顶级域实施、DNS 根服务器以及需要快速优化的权威名称服务器的任何人。目前,三个 DNS 根服务器和许多顶级域注册机构使用 NSD 作为其服务器实现的一部分。NSD 没有在设计上实现递归缓存。如果您需要验证、递归、缓存解析器,那么 NLnet Labs 可以使用Unbound。
NSD 努力成为互联网工程任务组 (IETF) 新兴标准的参考实现。目的是将完善的 Internet 草稿作为编译选项实施,并在开放社区审查的最后阶段将草稿作为默认禁用的可选功能。已接受的 RFC 根据所描述的标准在 NSD 中实现。
NSD 在 BSD 许可下以开源形式免费分发。对于大多数平台,软件包都可用。该软件受安全补丁策略保护。如果您在关键任务环境中运行 NSD,并且您希望直接从 NLnet 实验室的开发人员那里获得服务级别协议支持,请访问我们的支持合同页面以获取更多信息。
四、一些学习网站及配置文档:
DNS解析与CDN加速_李猛哲的专栏-CSDN博客_dns加速
到底什么是CDN? - 知乎
黑马程序员Linux运维工作场景解决方案零基础到就业_哔哩哔哩_bilibili
+配置文档
DNS从入门到跑路_哔哩哔哩_bilibili
实验文档1:BIND9的安装部署 | Stanley's Blog
搭建DNS服务(一) - 姜海涛的博客 | Jht Blog
如何使用 bind 设置 DNS 服务器 - 知乎