《DNS与BIND(第5版)》——10.5 转发机制

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

本节书摘来自异步社区《DNS与BIND(第5版)》一书中的第10章,第10.5节,作者: 【美】Joseph Davies 更多章节内容可以访问云栖社区“异步社区”公众号查看。

10.5 转发机制

某些网络连接不希望发送过多的流量到外界去,可能是因为对外的连接速率低、延迟高;例如,远程办公室通过卫星连接到公司的网络。在这些情况下,可能需要将对外的DNS流量限制到最低。BIND提供了一种解决此问题的机制:转发器(forwarder)。

如果需要将名称解析分流至特定的名称服务器,那么转发器也是很有用的。例如,如果网络中只有一台主机连接到Internet,并且该主机是名称服务器,则可以将其配置为其他名称服务器的转发器,这样它们就可以查询Internet上的域名了。(本书第11章讨论防火墙时,将会更多地用到转发器。)

如果给网站指定了一个或多个服务器作为转发器,则名称服务器会把所有对外的DNS查询先发送给转发器。也就是说,转发器负责处理站点所有对外的DNS查询,并建立充足的信息缓存。对于任何对外部区域的查询,转发器几乎都能在缓存中找到答案,这样就能避免其他服务器对外发送查询。让一个名称服务器成为转发器非常简单:只要修改站点上所有其他服务器,将它们的查询指向转发器即可。

当一个primary或slave名称服务器被配置为使用转发器时,其操作模式将会稍有变化。如果解析器查询的记录已经存在于名称服务器的权威数据或缓存数据中,名称服务器就会用其作为应答;这部分操作没有变化。然而,如果该记录不在数据库中,名称服务器会向转发器发送查询,在等待短暂的周期而没有收到应答后,才会继续正常的操作,开始执行迭代(iterative)的名称解析过程。这种操作模式称为转发优先(forward first)。最主要的不同在于:名称服务器会向转发器发送一个递归(recursive)的查询,希望能直接得到应答。而在其他任何时候,名称服务器只会向其他名称服务器发送非递归的查询。

例如,在BIND 8和9的名称服务器上,用forwarders子语句指定区域movie.edu的转发器。wormhole.movie.edu和toystory.movie.edu都是该网站的转发器。除了转发器本身,应该在所有名称服务器的配置文件中加入如下forwarders子语句:


<a href=https://yqfile.alicdn.com/2978adeabacdbdc3c0230f11fea37ad7c27cc152.png" >

当使用转发器时,请尽量使站点配置保持简洁。否则最终有可能得到一个非常混乱的配置。

警告

避免转发器形成链。不要配置为:名称服务器A转发给服务器B,而服务器B又转发给服务器C(最糟糕的是C又转发回服务器A)。这将导致过长的解析延迟并使配置变得脆弱,因为链中的任何转发器出现故障都会妨碍或中断名称解析。
10.5.1 给名称服务器更多限制
有时需要给名称服务器更多限制,让它们在转发器宕机或没有应答时,甚至不会试图联系外部的服务器。这可以通过将名称服务器配置成forward-only模式来实现。以forward-only模式工作的名称服务器,只是使用转发器的名称服务器的另一种形态。它仍通过查询自己的权威数据和缓存数据来应答。工作在forward-only模式的名称服务器配置文件应该包含如下内容:


9c0424d81383c5bbeba2e2bbb6b5dbba64b1021d

如果要使用forward-only模式,则必须配置转发器,否则是没有意义的。在BIND 之前的版本上配置名称服务器工作在forward-only模式时,如果打算让转发器的IP地址出现一次以上,可以参考如下配置:


4894117d77a14bcf417715ea4272a4ae15b5a6ff

名称服务器只和每个转发器联系一次,等待短暂的时间接收转发器的应答。可以通过重复列出转发器IP地址的方式,让名称服务器重复发送查询给转发器,并以此增加forward-only名称服务器等候转发器应答的总时间。

提示

使用经验:forward-only模式能够比forward-first模式(默认模式)提供更可预测的名称解析服务。如果名称服务器发送查询,而转发器很久没有应答导致超时,那时名称服务器再开始执行迭代名称解析,发送原始查询的解析器往往已经放弃或濒临放弃。于是,解析器会得到不一致的解析结果:一些查询(解析速度快的)得到了应答,而另一些则会超时。
10.5.2 转发区域
习惯上,所有区域要么全都使用转发器,要么全都不用转发器:使用转发器解析名称服务器自己无法解析的每条查询,或者根本不用转发器。然而,在某些情况下,能够对转发机制有更多的控制会很方便。例如,对特定的域名使用特定的转发器,而仍使用迭代方式解析其他域名。

BIND 8.2引入了一个新功能:forward zones(转发区域),该功能允许名称服务器配置成只在查询特定域名时才使用转发器。(BIND 9自版开始支持转发区域。)例如,可以将名称服务器配置为,对所有以pixar.com为结尾的域名的查询,都转发给Pixar的一对名称服务器:


882d30ac90638e584d2d430a405e61adcec84f60

为何要做如此明确的配置,而不让名称服务器遵循com名称服务器对pixar.com名称服务器的授权关系呢?想象一下,如果你和Pixar之间有一条私人连接,并且你被告知需要使用一组只能从你的网络到达的特殊名称服务器,并可以通过它们来解析所有pixar.com域名,那么就应该做上述配置。

即使转发规则被指定在zone语句中,它们仍会作用于以指定域名为结尾的所有域名。也就是说,无论所查询的域名foo.bar.pixar.com是否位于pixar.com区域,由于其以pixar.com为结尾(或者说在pixar.com域中),转发规则也同样起作用。

还有另一种不同的转发区域,和刚才的例子刚好相反。它允许指定哪些查询不使用转发机制。因此,它只适用于在options语句中指定了转发器的名称服务器,通常,options语句会作用于所有查询。

这种转发区域使用zone语句来配置,但不使用forward类型,而是使用正常区域的master、slave或stub类型,并配置forwarders子语句。为“关闭”options语句中的转发配置,要将转发器列表指定为空集:


<a href=https://yqfile.alicdn.com/461a5f05f80a01c8a208d0124ed84ba23015abaf.png" >

等一下,为什么关闭所管理区域的转发功能?难道直接应答查询而不使用转发器吗?

记住,转发规则对以该区域的域名为结尾的所有域名的查询都有效。因此这条转发规则实际只作用于,对movie.edu授权的子域域名所作的查询,例如fx.movie.edu。如果没有该转发规则,这个名称服务器将把对matrix.fx.movie.edu的查询转发给192.249.249.3和192.249.249.1这两个名称服务器。有了该转发规则,名称服务器就会根据movie.edu区域提供的子域NS记录,直接查询fx.movie.edu名称服务器。

转发区域对Internet防火墙的配置有很大帮助,本书将在第11章进行探讨。

转发器选择机制

BIND 8名称服务器自开始,BIND 9名称服务器自9.3.0开始,只需要设置一次转发器列表。名称服务器不会按列表中的顺序依次查询转发器;它们将列表中的名称服务器解释为“候选”转发器,并根据往返时间选择首先查询的转发器,该往返时间由上次查询的响应时间确定。

如果转发器失效了,这样做就很有好处,尤其当出问题的就是列表中的第一个转发器时。旧版的BIND会在查询列表中的下一个转发器之前,持续盲目查询失效的转发器。而新版的BIND很快会意识到那个转发器已经失去响应,并且会尝试查询另一个。

相关文章
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
103 2
|
3月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
129 3
|
2天前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
|
1月前
|
PHP 开发者 UED
PHP中的异常处理机制解析####
本文深入探讨了PHP中的异常处理机制,通过实例解析try-catch语句的用法,并对比传统错误处理方式,揭示其在提升代码健壮性与可维护性方面的优势。文章还简要介绍了自定义异常类的创建及其应用场景,为开发者提供实用的技术参考。 ####
|
2月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
2月前
|
缓存 NoSQL Java
千万级电商线上无阻塞双buffer缓冲优化ID生成机制深度解析
【11月更文挑战第30天】在千万级电商系统中,ID生成机制是核心基础设施之一。一个高效、可靠的ID生成系统对于保障系统的稳定性和性能至关重要。本文将深入探讨一种在千万级电商线上广泛应用的ID生成机制——无阻塞双buffer缓冲优化方案。本文从概述、功能点、背景、业务点、底层原理等多个维度进行解析,并通过Java语言实现多个示例,指出各自实践的优缺点。希望给需要的同学提供一些参考。
55 7
|
1月前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
2月前
|
Java 开发者 Spring
深入解析:Spring AOP的底层实现机制
在现代软件开发中,Spring框架的AOP(面向切面编程)功能因其能够有效分离横切关注点(如日志记录、事务管理等)而备受青睐。本文将深入探讨Spring AOP的底层原理,揭示其如何通过动态代理技术实现方法的增强。
85 8
|
2月前
|
Java 测试技术 API
Java 反射机制:深入解析与应用实践
《Java反射机制:深入解析与应用实践》全面解析Java反射API,探讨其内部运作原理、应用场景及最佳实践,帮助开发者掌握利用反射增强程序灵活性与可扩展性的技巧。
143 4
|
2月前
|
存储 消息中间件 算法
深入探索操作系统的心脏——内核机制解析
本文旨在揭示操作系统核心——内核的工作原理,通过剖析其关键组件与机制,为读者提供一个清晰的内核结构图景。不同于常规摘要的概述性内容,本文摘要将直接聚焦于内核的核心概念、主要功能以及其在系统管理中扮演的角色,旨在激发读者对操作系统深层次运作原理的兴趣与理解。

相关产品

  • 云解析DNS
  • 推荐镜像

    更多