域名系统dns
网上冲浪既有趣又容易,但是想想如果您必须输入要查看的每个网站的IP地址会是什么样子。 例如,当您在以下位置键入网址时,将查找网站: https : //54.204.39.132 ,这对于我们大多数人来说几乎是不可能记住的。 当然,使用书签会有所帮助,但是假设您的朋友告诉您一个很棒的新网站,并告诉您转到54.204.39.132。 你怎么会记得呢? 告诉别人去“ Opensource.com”要容易得多。 是的,那是我们的IP地址。
域名系统提供了数据库,该数据库可用于将人类可读的主机名(例如www.opensource.com )转换为IP地址(例如54.204.39.132),以便您连接互联网的计算机和其他设备可以访问它们。 BIND (伯克利Internet名称域)软件的主要功能是使用该数据库的域名解析器的功能。 还有其他名称解析器软件,但是BIND当前是Internet上使用最广泛的DNS软件。 在本文中,我将互换使用术语“名称服务器”,“ DNS”和“解析器”。
没有这些名称解析器服务,像我们一样自由,轻松地浏览网页几乎是不可能的。 作为人类,我们倾向于使用像Opensource.com这样的名称来做的更好,而使用数字如54.204.39.132这样的计算机来做的更好。 因此,我们需要翻译服务,以将易于使用的名称转换为计算机易于使用的数字。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::
1 localhost localhost.localdomain localhost6 localhost6.localdomain6
# Lab hosts
192.168.25.1 server
192.168.25.21 host1
192.168.25.22 host2
192.168.25.23 host3
192.168.25.24 host4
在小型网络中,每个主机上的/ etc / hosts文件都可以用作名称解析器。 在多台主机上维护此文件的副本会非常耗时,并且错误可能会造成很多混乱,并浪费大量时间才能找到它们。 我在自己的网络上进行了几年的这项工作,即使仅使用通常能正常运行的八到十二台计算机,维护起来也变得很麻烦。 最终,我转换为运行自己的名称服务器以解析内部和外部主机名。
任何规模的大多数网络都需要使用名称服务软件(例如BIND)对该服务进行集中管理。 主机使用域名系统(DNS)从软件(例如Web浏览器,电子邮件客户端,SSH,FTP和许多其他Internet服务)中提供的名称中查找IP地址。
名称搜索的工作方式
让我们来看一个简化的示例,该示例说明了计算机上的客户端服务对网页进行名称请求时所发生的情况。 对于此示例,我将使用www.opensource.com作为要在浏览器中查看的网站。 我还假定网络上有一个本地名称服务器,就像我自己的网络一样。
1.首先,输入URL或选择包含该URL的书签。 在这种情况下,URL为www.opensource.com 。
2.浏览器客户端(无论是Opera,Firefox,Chrome,Lynx,Links还是任何其他浏览器)都将请求发送到操作系统。
3.操作系统首先检查/ etc / hosts文件,以查看URL或主机名是否存在。 如果是这样,则该条目的IP地址将返回到浏览器。 如果没有,我继续下一步。 在这种情况下,我认为不是。
4.然后将URL发送到/etc/resolv.conf中指定的名字服务器。 在这种情况下,名字服务器的IP地址是我自己的内部名字服务器。 对于此示例,我的名称服务器没有缓存www.opensource.com的IP地址,因此必须将其放在更远的地方。 让我们继续下一步。
5.本地名称服务器将请求发送到远程名称服务器。 这可以是两种目标类型之一,其中一种是转发器。 转发器只是另一个名称服务器(例如ISP上的名称服务器)或公用名称服务器(例如8.8.8.8或8.8.4.4的Google)。 另一个目标类型是顶级根名称服务器的类型 。 根服务器通常不使用所需的目标IP地址或www.opensource.com进行响应,而是使用该域的权威名称服务器进行响应。 权威名称服务器是唯一有权维护和修改域名称数据的服务器。
本地名称服务器被配置为使用根名称服务器,因此.com顶级域的根名称服务器返回www.opensource.com的权威名称服务器的IP地址。 该IP地址可以是三个(在撰写本文时)名称服务器ns1.redhat.com,ns2.redhat.com或ns3.redhat.com中的任何一个。
6.然后,本地名称服务器将查询发送到权威名称服务器,后者返回www.opensource.com的IP地址。
7.浏览器使用www.opensource.com的IP地址发送对网页的请求,该请求已下载到我的浏览器中。
此名称搜索的重要副作用之一是,我的本地名称服务器将结果缓存了一段时间。 这意味着下次我或网络上的任何人想要访问Opensource.com时,该IP地址可能已存储在本地,这将阻止进行远程查找。
DNS数据库
DNS系统依赖于它的数据库来对主机名执行查找以找到正确的IP地址。 DNS数据库是通用的分布式分层复制数据库。 它还定义了Internet上使用的主机名样式,通常称为FQDN(完全合格域名)。
FQDN由完整的主机名组成,例如hornet.example.com和test1.example.com。 FQDN分为三个部分。
1. TLDN( 顶级域名 ),例如.com,.net,.biz,.org,.info,.edu等,提供了FQDN的最后一部分。 所有TLDN在根名称服务器上进行管理。 除了国家顶级域名(例如.us,.uk等)之外,最初只有几个主要的顶级域名。 截至2017年2月,共有1528个顶级域。
2.当指定主机名或URL时,第二级域名始终紧接在顶级域的左侧,因此Redhat.com,Opensource.com,Getfedora.org和example.com等名称提供了组织地址部分。 FQDN。
3. FQDN的第三级是名称的主机名部分,因此网络中特定主机的FQDN类似于host1.example.com。
图1显示了DNS数据库层次结构的简化图。 由单个点(。)表示的“最高”级别没有实际的物理存在。 它是用于DNS区域文件配置的设备,用于为域名启用明确的终止符。 稍后对此进行更多说明。
真正的顶层由根名称服务器组成。 这些是维护顶级DNS数据库的服务器数量有限。 根级别可能包含某些域的IP地址,并且根服务器将在可用时直接提供这些IP地址。 在其他情况下,根服务器为所需域提供权威服务器的IP地址。
例如,假设我要浏览www.opensource.com 。 我的浏览器向本地名称服务器发出请求,该服务器不包含该IP地址。 我的本地名称服务器被配置为在本地缓存中找不到地址时使用根服务器,因此它将对www.opensource.com的请求发送到其中一台根服务器。 当然,本地名称服务器必须知道如何定位根名称服务器,因此它使用/var/named/named.ca文件,该文件包含根名称服务器的名称和IP地址。 named.ca文件也称为提示文件。
在此示例中,根服务器未存储www.opensource.com的IP地址。 根服务器使用其数据库查找www.opensource.com的权威名称服务器的名称和IP地址。
本地名称服务器查询权威名称服务器,该权威服务器返回www.opensource.com的IP地址。 然后,本地名称服务器将响应浏览器的请求,并为其提供IP地址。 Opensource.com的权威名称服务器包含该域的区域文件。
# dig www.opensource.com
;
<<>> DiG 9.10.4-P6-RedHat-9.10.4-
4 .P6.fc25
<<>> www.opensource.com
;; global options: +cmd
;; Got answer:
;; -
>> HEADER
<< - opcode: QUERY, status: NOERROR, id:
54308
;; flags: qr rd ra; QUERY:
1 , ANSWER:
2 , AUTHORITY:
3 , ADDITIONAL:
4
;; OPT PSEUDOSECTION:
; EDNS: version:
0 , flags:; udp:
4096
;; QUESTION SECTION:
;www.opensource.com. IN A
;; ANSWER SECTION:
www.opensource.com.
300 IN CNAME opensource.com.
opensource.com.
300 IN A 54.204.39.132
;; AUTHORITY SECTION:
opensource.com.
129903 IN NS ns1.redhat.com.
opensource.com.
129903 IN NS ns3.redhat.com.
opensource.com.
129903 IN NS ns2.redhat.com.
;; ADDITIONAL SECTION:
ns2.redhat.com.
125948 IN A 209.132.183.2
ns3.redhat.com.
125948 IN A 66.187.233.212
ns1.redhat.com.
125948 IN A 209.132.186.218
;; Query time:
71 msec
;; SERVER: 192.168.0.51
#53(192.168.0.51)
;; WHEN: Sat Mar 04
21 :
23 :
51 EST
2017
;; MSG SIZE rcvd:
186
上面的清单2显示了dig命令的结果,该命令不仅显示所需主机的IP地址,还显示了权威服务器,它们的IP地址以及实际满足请求的服务器。 这是dig命令的使用,该命令获取www.opensource.com的DNS信息。 dig命令是一个功能强大的工具,可以告诉我们许多有关主机的DNS配置的信息。 dig命令从DNS数据库返回实际记录,并在四个主要部分中显示结果。 阅读这些部分的描述时,请参考清单2。
第一部分是问题部分。 对于此示例,它指出我正在寻找“ www.opensource.com ”的A记录。 请注意顶级域名末尾的点。 这表明.com是主机名中的最终域名组件。
答案部分显示两个条目,即CNAME记录和A记录。 A记录是主要名称解析程序记录,并且必须有一个A记录,其中包含每个主机的IP地址。 CNAME代表规范名称,此记录类型是A记录的别名,并指向它。 通常不使用“ www”作为Web服务器的主机名。 通常会看到一个CNAME记录指向FQDN的A记录; 但是,事实并非如此。 请注意,Opensource.com的A记录没有与之关联的主机名。 可能会有一条记录适用于整个域,就像这里的情况一样。
权限部分列出了Opensource.com域的权威名称服务器。 在这种情况下,这些是Red Hat名称服务器。 请注意,这些条目的记录类型为NS。
附加部分列出了Red Hat名称服务器的A记录。
在附加部分之后,我可以找到一些其他有趣的信息,包括返回结果中显示的信息的服务器的IP地址。 在这种情况下,这是我自己的内部名称服务器。
DNS客户端配置
大多数计算机只需要很少的配置就可以访问名称服务。 它通常包括将一到三个名称服务器的IP地址添加到/etc/resolv.conf文件中。 这通常在大多数家用和便携式计算机的启动时执行,因为它们是使用DHCP(动态主机配置协议)进行配置的,该协议为其提供IP地址,网关地址和名称服务器的IP地址。
对于静态配置的主机, resolv.conf文件通常是在安装过程中根据sysadmin进行安装时输入的信息生成的。 在当前基于Red Hat的发行版以及使用NetworkManager来管理网络配置和执行连接管理的其他发行版中,静态信息(例如名称服务器,网关和IP地址)都存储在/ etc /中的接口配置文件中。 sysconfig / network-scripts 。
通过将该信息添加到接口配置文件中,可以覆盖提供给主机的默认设置。 例如,有时我会将我的首选名称服务器添加到笔记本电脑和上网本的接口配置文件中。 公共场所中的远程连接(例如旅馆,咖啡店,甚至朋友的个人Wi-Fi连接)提供的许多名称服务器可能不可靠,在某些情况下,可以使用故意检查结果或将查询重定向到以下网页的转发器广告,因此我总是在界面配置文件中插入Google公共名称服务器。 有关接口配置文件的信息,请参阅我的文章“ 如何在Linux中配置网络” 。
另外,请注意NetworkManager会为其连接的每个Wi-Fi网络创建一个接口配置文件。 配置文件以网络的SSID(服务集标识符)命名。 确保将所需的名称服务器条目添加到正确的文件中。
下面列出了最近几个月NetworkManager在笔记本电脑上创建的一些接口配置文件。
- ifcfg-enp0s25(这是有线网络的配置文件。)
- ifcfg-FBI-DHS.TF1_EXT
- ifcfg-HOME-14A2
- ifcfg-linksys
- ifcfg-LinuxDude
- ifcfg-MomsPlace
- ifcfg-FBI-van
- ifcfg-PointSourceGuest
- ifcfg-Red_Hat_Guest
- ifcfg-Sands_3_hoa1
- ifcfg-Sheraton_Raleigh_Guest_Access
- ifcfg-SM-CLC1
- ifcfg-xfinityWi-Fi
不,我与FBI没有任何关系。 我认识的谁将保持匿名,他的幽默感很有趣,喜欢让邻居感到紧张。
DNS记录类型
DNS记录类型很多,在这里我想介绍一些更常见的记录类型。 我的下一篇文章将描述如何使用BIND创建您自己的名称服务器,并将使用许多这些记录类型来构建您的名称服务器。 这些记录类型在组成DNS数据库的区域文件中使用。
所有这些记录中的一个公共字段是“ IN”,它指定这些是Internet记录。
在Wikipedia上查看DNS记录类型的完整列表 。
SOA
SOA是授权开始记录。 它是任何正向或反向区域文件中的第一条记录,并将其标识为所描述域的权威来源。 它还指定了某些功能参数。 典型的SOA记录类似于以下示例。
@ IN SOA epc.example.com root.epc.example.com.
(
2017031301 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H
) ; minimum
SOA记录的第一行包含区域服务器的名称和区域管理员,在本例中为root。
第二行是序列号。 在此示例中,我使用YYYYMMDDXX格式的日期,其中XX是计数器。 因此,上面的SOA记录中的序列号表示该文件在2017年3月13日的第一个版本。此格式确保对序列号的所有更改都以数字顺序的方式递增。 这样做很重要,因为辅助名称服务器(也称为从属服务器)仅在主服务器上区域文件的序列号大于辅助服务器上的序列号时才从主服务器复制。 进行更改时,请确保增加序列号,否则辅助服务器将不会与修改后的数据同步。
SOA记录的其余部分包括次要服务器从主服务器执行刷新并在第一次刷新失败时等待重试的各种时间。 它还定义了区域的权威状态到期之前的时间。
过去通常以秒为单位指定时间,但是最新版本的BIND允许使用W =周,D =天,H =小时和M =分钟定义其他选项。 如果不使用其他说明符,则以秒为单位。
$原点
$ ORIGIN记录就像一个变量赋值。 BIND程序将此变量的值附加到A或PTR记录中未以句点(。)结尾的任何名称,以便为该主机创建FQDN(完全限定域名)。 这样可以减少键入次数,因为区域管理员只需键入主机名部分,而不必键入每个记录的FQDN。
$ ORIGIN example.com.
另外,@符号用作此变量的快捷方式,文件中任何出现的@都将由$ ORIGIN的值替换。
NS
NS记录指定该区域的权威名称服务器。 请注意,此记录中的两个名称都以句号结尾,因此不会在它们后面附加“ .example.com”。 该记录通常将通过其FQDN指向本地主机。
example.com. IN NS epc.example.com.
请注意,主机epc.example.com也必须在区域中具有A记录。 A记录可以指向主机的外部IP地址或本地主机地址127.0.0.1。
一个
A记录是地址记录类型,它指定主机名和分配给该主机的IP地址之间的关系。 在下面的示例中,主机test1的IP地址为192.168.25.21。 请注意$ ORIGIN的值附加到名称test1上,因为test1不是FQDN,并且在此记录中没有终止时间。
test1 IN A 192.168.25.21
A记录是最常见的DNS数据库记录类型。
CNAME
CNAME记录是主机A记录中名称的别名。 例如,主机名server.example.com可能同时充当Web服务器和邮件服务器。 服务器将有一个A记录,可能有两个CNAME记录,如下所示。
server IN A 192.168.25.1
www IN CNAME server
mail IN CNAME server
在www.example.com和mail.example.com上使用dig命令进行查找将返回邮件或www的CNAME记录,以及server.example.com的A记录。
PTR
PTR记录用于提供反向查找。 这是当您已经知道IP地址并且需要知道标准主机名的时候。 例如,许多邮件服务器对发送邮件服务器的所谓IP地址进行反向查找,以验证电子邮件标题中提供的名称和IP地址是否匹配。 PTR记录用于反向区域文件中。 尝试确定可疑网络数据包的来源时,也可以使用反向查找。
请注意,并非所有主机都具有PTR记录,并且许多ISP都会创建和管理PTR记录,因此反向查找可能无法提供所需的信息。
MX
MX记录定义了Mail eXchanger(即域example.com的邮件服务器)。 请注意,在上面的示例中,它指向服务器的CNAME记录。 请注意,MX记录中的两个example.com名称都以点号结尾,因此example.com不会附加到名称上。
; Mail server MX record
example.com. IN MX
10 mail.example.com.
域可能定义了多个邮件服务器。 上面的MX记录中的数字“ 10”是优先级值。 其他服务器可能具有相同或不同的优先级。 较低的数字定义较高的优先级。 因此,如果所有邮件服务器都具有相同的优先级,则将以循环方式使用它们。 如果它们具有不同的优先级,则首先将尝试将邮件传递到具有最高优先级(最低编号)的邮件服务器,如果该邮件服务器没有响应,则将尝试将邮件传递到具有第二高优先级的邮件服务器。
其他记录
DNS数据库中可能还会遇到其他类型的记录。 一种是TXT记录,用于记录有关DNS数据库中的区域或主机的注释。 TXT记录也可以用于DNS安全。 其余的DNS记录类型不在本文讨论范围之内。
最后的想法
域名服务是使互联网易于访问的重要组成部分。 它将连接到互联网的无数不同的主机绑定到一个有凝聚力的单元中,从而可以轻松地与地球的远端进行通信。 它具有复杂的分布式数据库结构,该结构也许整体上甚至是不可知的,但是可以由任何连接的设备快速搜索以找到在该数据库中具有条目的任何其他设备的IP地址。
如果您是几乎任何规模的网络上的系统管理员,了解如何构建自己的名称服务器都可能会有所帮助。 在下一篇文章“ 在Linux上构建自己的DNS服务器 ”中,我将描述如何做到这一点。
资源资源
翻译自: https://opensource.com/article/17/4/introduction-domain-name-system-dns
域名系统dns