【计网】DNS学习笔记
前言
笔者是一名某高校本科在读大一生,对于计算机网络具象描述若有缺漏请见谅。本篇文章将主要讲述《DNS与BIND 第五版》10.8名称服务器地址排序 10.9优先选择特定网络上的名称服务器 10.10非递归名称服务器 10.11回避伪装的名称服务器。
什么是DNS?什么是BIND?
DNS--域名系统
DNS(Domain Name System,域名系统)是互联网中用于将域名与IP地址相互映射的分布式命名系统。它充当了互联网的“电话簿”,将人类可读的域名(如example.com)转换为计算机可理解的 IP 地址(如192.0.2.1),从而实现互联网上各种服务和资源的定位和访问。

- DNS 的主要功能包括以下几点:
- 域名解析:将域名解析为对应的 IP 地址,以便在网络中定位和访问特定的主机或服务。
- 反向解析:根据 IP 地址查找对应的域名。
- 域名管理:管理域名的注册、分配和维护,确保每个域名在全球范围内唯一性。
- DNS 缓存:通过缓存机制提高解析效率,减轻 DNS 服务器负载,提升用户体验。
DNS 是互联网基础设施中至关重要的一部分,几乎所有互联网应用都依赖于 DNS 来进行域名解析。当用户在浏览器中输入域名时,DNS 就会自动进行解析,找到对应的 IP 地址,然后将用户的请求路由到正确的服务端。
BIND--DNS软件套件
BIND(Berkeley Internet Name Domain)是一种广泛使用的域名系统(DNS)软件套件。它最初由美国加州大学伯克利分校开发,现在由互联网系统联盟(Internet Systems Consortium)维护和支持。
该软件提供了一个完整的DNS实现,包括名称服务器、解析器和管理工具。它支持所有主流的操作系统平台,并且可以扩展以适应各种规模和复杂度的网络环境。BIND还支持多种DNS协议和功能,如动态DNS、DNSSEC(DNS安全扩展)和IPv6。
BIND被广泛用于全球互联网中,作为域名解析的核心技术之一。许多互联网服务提供商、企业和组织都使用BIND来提供DNS服务。在运行BIND时,需要进行相应的配置和管理,以确保安全性、可靠性和高效性。
名称服务器地址排序
名称服务器地址排序是将域名按照特定规则进行排序的过程。在DNS中,域名与IP地址是一一对应的关系,或者一个域名对应多个IP地址,通过名称服务器(Name Server)来提供域名解析服务。
当查询者向服务器请求某一域名的所有IP地址时,在DNS内部就需要完成地址排序操作,由部署的BIND完成。
在BIND中地址排序的关键在于一个称为sortlist的options子语句,sortlist子语句以地址匹配列表作为参数。然而,和作为访问控制列表使用的地址匹配列表不同。地址匹配列表中的每个条目,由于一个域名不止含有一个IP地址的原因,本身就是具有一个或两个元素的地址匹配列表。以下是一个简单的例子:
options {
sortlists {
{ 192.249.249/24; {192.249.249/24; 192.253.253/24;};};
};
};
若查询者客户端所查询域名对应多个IP地址,由上例可见,第一个元素被用于核对查询者的IP地址。如果地址匹配,则名称服务器将会对发送给查询者的应答进行排序。这个排序会作用在位于192.249.249/24这一网段上的查询者
名称服务器地址排序是在DNS系统内部进行的操作,对于普通用户而言,并不需要直接进行名称服务器地址排序操作,而是由DNS服务提供商和系统管理员负责管理和维护DNS服务器的配置和排序工作。
在BIND 8 的早期版本中地址排序功能被移除,主要是因为开发者认为该功能无用,但在BIND 8.2中恢复并增强了该功能。BIND 9.1.0是BIND 9中第一个支持地址排序功能的版本。
优先选择特定网络上的名称服务器
优先选择位于较低时段的DNS服务器,而位于同等时段的服务器则具有同等优先权。如果一个DNS服务器比较两个远程服务器的RTT(round-trip time)值,则该服务器会选择较低时段服务器发送查询。不过,如果两个远程服务器在相同时段中,则该服务器还会检查哪一个服务器在拓补上更近。
topology以地址匹配列表为参数,其中的条目是网络号,并按照本地名称服务器使用的从高到低的优先级顺序列出。
topology {
15/8;
172.88/16;
192.168/16;
};
在以上配置中,若在配置条目里的RTT值相同时,本地名称服务器会优先查询在15/8网段的名称服务器,之后才是172.88/16,以此类推后者是192.168/16网段中的名称服务器。
非递归名称服务器
递归查询是DNS的一种查询模式,其中本地DNS收到客户端查询请求后,会代替客户端继续向其它DNS服务器发出查询请求,如果本地域名服务器不知道被查询域名的IP地址,它会以客户端的身份向其它名称服务器发出查询请求报文。递归查询的特点是,本地域名服务器必须使用一个准确的查询结果来回复客户端,或者如果无法查询到所需的IP地址,它会返回错误结果。
但实际名称服务器非常繁忙,比如root名称服务器不能再浪费时间进行递归查询。
通常情况下root名称服务器不会接受到递归查询,除非由管理员将root名称服务器设置为转发器。
要使BIND名称服务器工作在非递归模式,可以配置以下语句:
options {
recursion no;
};
此外,如果不希望服务器抓取glue记录产生缓存可搭配一下语句:
options {
fetch-glue no;
};
将名称服务器配置为非递归工作模式后,解析器无法使用非递归的名称服务器,可以使用allow-recursion子语句:凡是匹配该子语句作为参数的地址列表的查询者都可以发送递归查询,但是对待不在列表内的查询者就像是关闭了递归功能。
options {
allow-recursion { 192.253.254/24; }; //只有子网列表上的解析器才应该发送递归查询
};
回避伪装的名称服务器
在使用DNS时可能会发现有些远程名称服务器的信息过时,不准确,甚至被污染或者有害的。为了避免出现问题,除了修复有问题的名称服务器外,我们可以配置名称服务器,使其不再向指定的名称服务器发起查询请求,我们可以将已知出现问题的服务器加入blackhole列表中,名称服务器不会对列表内的服务器发起请求,同样也不会相应列表内服务器的查询:
options {
backhole {
10/8;
172.16/12;
192.168/16;
};
};
或不通过加入blackhole列表方式:
server 10.0.0.2 {
bogus yes;
};
结尾
本片文章仅为个人学习笔记,若描述或观点产生批漏敬请谅解,资料源自《DNS与BIND 第五版》,部分资料源于网络。