域名系统(DNS)是互联网的基础之一,但大多数精通网络的人可能不知道他们每天都使用它来工作、查看电子邮件或在智能手机上浪费时间。从本质上讲,DNS是一个名称与数字匹配的目录。在这种情况下,这些数字指的是计算机用来相互通信的IP地址。大多数对DNS的描述都使用电话簿比喻,这对于30岁以上知道电话簿是什么的人来说没有问题。如果您未满30岁,请将DNS想象成您智能手机的联系人列表,它会匹配尽可能多的人的姓名、电话号码和电子邮件地址。DNS简史当互联网非常非常小的时候,很容易将特定的IP地址与特定的计算机相关联,但是随着越来越多的设备和人员加入到不断发展的网络中,这种简单的情况将不再存在长久。仍然可以在浏览器中输入一个特定的IP地址来访问一个网站,但是那时,就像现在一样,人们期望一个由易于记忆的单词组成的地址,就像我们今天所认识的那种域名(例如linux.cn)。在1970年代和80年代初期,这些名称和地址由斯坦福大学的伊丽莎白·费因勒(ElizabethFeinler)分配,她在名为HOSTS的文本文件中维护了一份主列表。一台连接到Internet的计算机。随着Internet的发展,这种情况显然无法维持,尤其是因为Feinler只处理下午6点之前的请求。加州时间,圣诞节也放假了。1983年,南加州大学的研究员保罗·莫卡佩特里斯(PaulMockapetris)的任务是在解决该问题的几项提案中找到一个中间立场。但他基本上忽略了所有出来的建议,并开发了自己的系统,他称之为DNS。虽然从那时起它显然发生了很大变化,但在基本层面上它仍然以近40年前的方式运作。DNS服务器如何工作将名称与数字相匹配的DNS目录并不完全隐藏在Internet的某个黑暗角落。截至2017年底,它记录了超过3.32亿个域名,这作为一个目录确实是巨大的。与互联网本身一样,该目录分布在世界各地并存储在域名服务器(通常简称为DNS服务器)上,这些服务器定期相互通信以提供更新和冗余。权威DNS服务器与递归DNS服务器的比较当您的计算机想要查找与域名关联的IP地址时,它首先向递归DNS服务器(也称为递归解析器)发出请求。递归解析器是一种服务器,通常由ISP或其他第三方提供商运营,它知道要请求哪些其他DNS服务器来解析网站的名称及其IP地址。实际拥有所需信息的服务器称为权威DNS服务器。DNS服务器和IP地址每个域名可以对应多个IP地址。事实上,一些网站有数百个甚至更多的IP地址对应一个域名。例如,您访问www.google.com的计算机可能会访问与另一个国家/地区的人在浏览器中输入相同网站名称完全不同的服务器。目录具有分布式特性的另一个原因是,如果目录只在一个位置共享,在数百万、可能数十亿人同时寻找信息时,当你在寻找一个站点时,你需要多长时间得到回应——这就像排队等候使用电话簿。什么是DNS缓存?为了解决这个问题,DNS信息在许多服务器之间共享。但是,有关最近访问过的网站的信息也缓存在客户端计算机本地。您可能每天多次使用google.com。您的计算机不必每次都向DNS名称服务器查询google.com的IP地址,而是将此信息保存在您的计算机上,这样它就不必访问DNS服务器来解析此名称的IP地址。其他缓存也可能存在于用于将客户端连接到Internet的路由器上,以及用户的Internet服务提供商(ISP)的服务器上。有了这么多的缓存,对DNS名称服务器的查询数量实际上比看起来要少得多。如何找到我的DNS服务器?通常,当您连接到Internet时,您使用的DNS服务器将由您的Internet提供商自动建立。如果您想查看哪些服务器是您的主要名称服务器(通常是递归解析器,如上所述),可以使用网络实用程序提供有关您当前网络连接的信息。Browserleaks.com是一个很棒的工具,可以提供大量信息,包括您当前的DNS服务器。可以用8.8.8.8的DNS吗?但请记住,虽然您的ISP会设置一个默认的DNS服务器,但您没有义务使用它。有些用户可能有理由避开他们的ISP的DNS——例如,一些ISP使用他们的DNS服务器将对不存在地址的请求重定向到带有广告的网页。如果你想要一个替代方案,你可以将你的计算机指向公共DNS服务器以充当递归解析器。最著名的公共DNS服务器之一是Google的,其IP地址为8.8.8.8和8.8.4.4。谷歌的DNS服务往往很快,虽然人们对谷歌提供免费服务的别有用心存在一些疑问,但他们从你那里得到的并不比从Chrome那里得到的更多。Google有一个页面详细介绍了如何配置您的计算机或路由器以连接到Google的DNS。DNS如何提高效率DNS的组织结构有助于保持快速、平稳地运行。为了说明这一点,我们假设您要访问linux.cn。如上所述,对IP地址的初始请求是向递归解析器发出的。递归解析器知道它需要询问哪些其他DNS服务器来解析网站名称(linux.cn)及其IP地址。该搜索进入根服务器,根服务器了解所有顶级域,例如.com、.net、.org以及所有国家/地区域,例如.cn(中国)和.uk(英国)。根服务器遍布世界各地,因此系统通常会将您引导至地理位置最近的服务器。一旦请求到达正确的根服务器,它就会转到顶级域(TLD)名称服务器,该服务器存储二级域名的信息,即.com、.org、.net之前的单词(例如,linux.cn信息为“linux”)。然后,请求转到保存网站信息和IP地址的名称服务器。一旦找到IP地址,它就会被发送回客户端,客户端现在可以使用它来访问网站。所有这一切只需要几毫秒。由于DNS已经运行了30多年,因此大多数人认为这是理所当然的。在构建系统时没有考虑到安全问题,所以黑客们充分利用了这一点,制造了各种攻击。DNS反射攻击DNS反射攻击可以用有关DNS解析服务器的信息淹没受害者。攻击者使用欺骗受害者的IP地址从他们能找到的每个开放DNS解析器请求大量DNS数据。当解析器响应时,受害者会被大量未请求的DNS数据淹没。DNS缓存中毒DNS缓存中毒可以将用户转移到恶意网站。攻击者设法在DNS中插入虚假地址记录,以便当潜在受害者请求解析其中一个中毒网站的地址时,DNS会以另一个受攻击者控制的网站的IP地址进行响应。一旦访问这些虚假网站,受害者可能会被诱骗泄露密码或下载恶意软件。DNS资源耗尽DNS资源耗尽攻击可以阻塞ISP的DNS基础设施,阻止ISP的客户访问Internet上的网站。攻击者注册一个域名并通过使受害者的域名服务器对域名具有权威性来完成此攻击。因此,如果递归解析器无法提供与网站名称关联的IP地址,则会查询受害者的名称服务器。攻击者会对自己注册的域名产生大量请求,并查询不存在的子域名,从而导致大量解析请求被发送到受害者的域名服务器,使其不堪重负。什么是DNS安全?DNS安全扩展旨在使参与DNS查询的不同级别的服务器之间的通信更加安全。它由负责DNS系统的互联网名称与数字地址分配机构(ICANN)设计。ICANN意识到DNS顶级、二级和三级目录服务器之间的通信弱点可能允许攻击者劫持查询。这将允许攻击者使用恶意网站的IP地址响应来自合法网站的查询。这些站点可能会向用户上传恶意软件,或进行网络钓鱼和欺骗攻击。DNSSec将通过让每一级DNS服务器对其请求进行数字签名来解决这个问题,从而确保来自最终用户的传入请求不会被攻击者利用。这建立了一个信任链,以便在查询的每个步骤中验证请求的完整性。此外,DNSSec可以判断域名是否存在,如果不存在,则不允许将该欺诈域名传递给寻求域名解析的无辜请求者。随着越来越多的域名被创建,越来越多的设备继续通过物联网设备和其他“智能”系统加入网络,随着越来越多的网站迁移到IPv6,将需要维护一个健康的DNS生态系统。大数据和分析的增长也对DNS管理产生了更大的需求。SIGRed:再次出现蠕虫DNS漏洞随着WindowsDNS服务器漏洞的发现,世界已经看到了DNS漏洞可能导致的混乱。被称为SIGRed的底层安全漏洞需要复杂的攻击链,但利用未打补丁的WindowsDNS服务器可以在客户端安装和执行任意恶意代码。而且这个漏洞是“可蠕虫感染的”,这意味着它可以在没有人为干预的情况下从一台计算机传播到另一台计算机。该漏洞被认为非常严重,以至于美国联邦机构有几天时间安装补丁。DNSoverHTTPS:新的隐私格局在撰写本文时,DNS正处于其历史上最大转变之一的边缘。谷歌和Mozilla共同控制了大部分浏览器市场,它们正在鼓励转向DNSoverHTTPS(DoH),其中DNS请求将由已经保护大多数网络流量的HTTPS协议加密。在Chrome的实现中,浏览器会检查DNS服务器是否支持DoH,如果不支持,则将DNS请求重新路由到Google的8.8.8.8。这一举动并非没有争议。早在1980年代就DNS协议做了大量早期工作的PaulVixie称此举是安全方面的“灾难”:例如,企业IT部门将更难监控或指挥流经其网络的DoH流量。不过Chrome无处不在,DoH很快就会默认打开,让我们拭目以待。
