绑定 9 - 允许查询与侦听

绑定 9 - 允许查询与侦听

我只是想知道 Bind 9 的 allow-query-on 和 listen-on 语句之间的行为差​​异。它们似乎执行类似的功能。根据 ARM 第 6 章(“Bind 9 配置”):

可以使用 listen-on 选项指定服务器将回答查询的接口和端口。

给出的语法是:

监听 [ 端口 ip_port ] [ dscp ip_dscp ] { 地址匹配列表 } ;

同一章中还有:

allow-query-on:指定哪些本地地址可以接受普通的 DNS 问题。

给出的语法是:

允许查询 { 地址匹配列表 };

从语法上看,allow-query-on 似乎不允许指定端口号。还有其他区别吗?

答案1

它们并不是真正相似的函数。该listen-on语句是named绑定到特定 IP 地址和端口所必需的。如果不设置它,默认是在服务器上所有接口的端口 53 上侦听 DNS 查询。如果您的服务器有多个接口,并且您只想在其中一个接口上提供 DNS 服务,请使用listen-on仅侦听一个接口。尝试以另一种方式使用allow-query-ononly 将使 BIND 仍然侦听所有接口。最好的方法是同时使用两者,即仅绑定到您需要的接口,然后进一步限制您允许的查询类型。

答案2

聆听

listen-on用于指定进程named应该使用哪些地址/端口组合bind(3)
即,地址/端口组合告诉named操作系统它是一个“监听”的过程,因此想要接收发送到那里的任何内容。

由于套接字 API 级别不了解 DNS,因此无法在此处进行任何细粒度的控制。您要么监听,要么不监听,如果您监听,则其他任何程序都无法监听同一地址/端口(这会影响在同一主机上可以并行运行的其他程序)。

允许-*-on

allow-*-on(并且,从相反的角度来看,常规allow-*DNS 指令是 BIND 内部针对收到的不同类型 DNS 消息(不同类别的查询、更新、区域传输等)的访问控制措施。

由于这是 BIND 内部的功能,它解释了收到的 DNS 数据并允许更细粒度的访问控制(但它必须首先在某处监听以接收消息)。

答案3

我目前正在研究 BIND,也想知道同样的问题。我认为答案在于您未提及的语句,即还有 existallow-query-cache-onallow-recursion-on语句。它们结合起来可以比listen-on语句更精细地配置 BIND。

此外,关于allow-query-on,文档继续说道:

例如,这使得可以在面向内部的接口上进行查询(...),而不必知道内部网络的地址。

我相信这就是这些陈述存在的答案。

举个例子,

options {
  allow-query-on { 203.0.113.17; };
  allow-recursion-on { 10.0.0.17; };
  allow-query-cache-on { 10.0.0.17; };
};

类似于

acl corpnets {
  10.0.0.0/16;
  172.16.0.0/12;
};

options {
  allow-query { any; };
  allow-recursion { corpnets; };
  allow-query-cache { corpnets; };
};

但在第二个示例中,您需要保持 ACL 保持最新。

最后要说的是,我相信这些只在某些特殊情况下才需要,就像许多 BIND 选项一样。

相关内容