每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开。有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相对直观有意义的主机名就行了。这就是 DNS 协议所要完成的功能。
在没有DNS服务器的情况下,每个系统在本地网络上保留其主机名和相应IP地址列表的副本是合理的——特别是在没有互联网连接的小型站点上。
在Linux系统中,这个列表就是/etc/hosts文件。 即使你没有DNS服务器或DNS服务器不可用,该文件也可以使用/etc/hosts文件将IP地址转换为名称。
也许你已经有DNS服务器了,但你也会因为其它原因而想保留这个文件。例如,系统可能需要在向外部查询之前在本地查找DNS服务器的IP地址;这意味着系统在查询DNS服务器之前先检索该文件,如果查找到对应的域则无须查询任何DNS服务器直接将其转换为IP地址。
然后,返回你的浏览器,输入,看看结果如何。如果你的系统上安装了Apache并且本地主机正在运行,浏览器会显示localhost的索引页,而不是Google页面。
因此这个文件所做的是将IP地址转换成名字,但这仅仅是在同一互相连接的网络下。 那么外部网络和众多系统的所有记录是如何维护的呢?
当你访问网站时,你可以输入FQDN(Fully Qualified Domain Name,完全限定域名)或类似或的域名。在域名中从右到左的两个点之间的每个文本依次是顶级域组件、二级域组件和三级域组件。
实际上,当你访问任何网站时,浏览器会默认在域的末尾添加一个不可见的点,因此该域将像一样。 该点被称为根域。
该点是由一大堆称为根域名服务器的特殊服务器管理的。截止这篇文章发表前,世界上有13个根域名服务器。 你可以把他们当成互联网的大脑 – 如果他们失效了,世界上就没有互联网了。
为什么是13呢? 因为如果世界的某处地震可能会破坏一个根服务器,所以其他的服务器可以继续提供服务直到受影响的服务器重新上线。
我们已经见过顶级域名的组成部分,如 com。可以认为,顶级域名为 DNS 命名空间提供分类组织。
只有mail.google.com 的名称服务器知道他下面存在的所有主机,所以Google会回复是否有一个叫mail 的子域名。根名称服务器对此并不知情。
这些服务器上存放了特定域名的配置文件,并且基于此权威地规定了特定域名的地址。主DNS服务器知道全部在它管辖范围的主机和子域名的地址。
这些服务器作为主DNS服务器的备份,也承担一定负载。主服务器知道辅助DNS服务器的存在,并且会向他们推送更新。
这些服务器上不存放特定域名的配置文件。当客户端请求缓存服务器来解析域名时,该服务器将首先检查其本地缓存。如果找不到匹配项便会询问主服务器。接着这条响应将被缓存起来。您也可以轻松地将自己的系统用作缓存服务器。
Linux 下有很多实现了 DNS 功能的包,不过我们只关注 BIND DNS 服务器。它用于世界上大多数 DNS 服务器。
我们知道 DNS 服务器类型有主域名服务器、辅助域名服务器和缓存域名服务器。不同于缓存域名服务器,主域名服务器和辅助域名服务器在应答过程中是处于同等地位的。
包含主要区域信息的文件存放在 /var/named 目录下,从 options 可知,这是一个工作目录。
注意:软件服务器或者托管面板会根据你的域名自动为你创建主域服务器信息的文件名,因此如果你的域名是那么你主域服务器信息的文件就为 /var/named/example.org.db。
对于辅助域服务器来说,它的域名和主域服务器是一样的。上述语法里的的slave类型表示这是一个辅助域服务器,“masters IP Address list”表示辅助域服务器中区域文件内的信息都是通过主域服务器中区域文件内的信息复制过来的。
即使你已经配置了主域或者辅助域服务器,你仍有必要(不是必须)定义一个缓存服务器,因为这样你可以减少DNS服务器的查询次数。
这些文件包含具有某些选项的每个区域的DNS记录类型。 那么,这些DNS记录类型是什么以及它们是如何写的?
第一行以域名example.com开始,以句号结束——该语句和/etc/named.conf文件中的区域定义是一致的。我们要始终记得,DNS配置文件是极其挑剔的。
mail.host.com. 是域管理员的邮箱地址。你会发现这个邮箱地址没有“@”标志,而是被句号所取代,并且末尾还有一个句号。
第2行是一个序列码,它被用来告诉域名服务器文件是什么时候升级的。因此,如果你对区域码做了变更,你必须对这个序列码进行递增。这个序列码的格式是 YYYYMMDDxx ,其中的 xx 是从 00 开始的。
第3行是每秒刷新率。这个值被用来告诉第二个域名服务器查询主服务器中的记录是否已经被更新的频率。
第4行是每秒重试的频率。如果第二个服务器多次尝试连接主域名服务器来进行更新检测,但无法连接上的时候,第二个服务器就会在每秒内重试指定的数值次数。
第5行是超时指示。其目的是为了第二个服务器能将区域数据缓存下来。这个值告诉这些服务器如果它们不能连接到主服务器来进行更新,那么它们就会在这个指定数值秒数之后抛弃这个值。
当然这个域以句号结束。数字10是邮件服务器的重要性标志,如果你拥有多个邮件服务器,其中较小的数字不太重要。
假设某个站点具有一个主机名为whatever-bignameis.example.com的Web服务器,并且由于系统是Web服务器,因此可以为主机创建一个名为www的CNAME记录或者别名。
您可以将任何信息存储到TXT记录中,例如你的联系方式或者你希望人们在查询DNS服务器时可获得的任意其他信息。
它是以秒为单位的数值,比如14,400秒(4个小时),因此DNS服务器最多缓存你的域文件4个小时,之后就会向你的DNS服务器重新查询。
因此,当你编写域文件或修改/etc/named.config并重新启动服务时,显示错误之后,你可以从日志中轻松识别错误类型。
此工具用于控制名称服务器和调试问题。 你可以通过以下方式检查Linux DNS服务器的状态:$ rndc status。
此外,如果你更改任何域(zone)文件,您可以重新加载服务,而无须重启命名服务:$ rndc reload example.com。
在这里,我们重新加载example.com域文件。 你可以重新加载所有域:$ rndc reload。
我们已经知道Linux DNS服务器的工作原理以及如何配置它。另一部分当然是与DNS服务器交互的(正在与DNS服务器通信以将主机名解析为IP地址的)客户端。
在Linux上,解析器位于DNS的客户端。要配置解析器,可以检查/etc/resolv.conf这个配置文件。
名称服务器行告诉解析器哪个名称服务器可使用。 只要你的BIND服务正在运行,你就可以使用自己的DNS服务器。
还没有评论,来说两句吧...
发表评论