【问题标题】:DNS: How do resource records work for an Authoritative DNS server?DNS:资源记录如何为权威 DNS 服务器工作?
【发布时间】:2011-07-30 22:09:43
【问题描述】:

但请多多包涵。我不需要有关 ndns 或 JavaScript 的帮助。我需要有关 DNS 资源记录的帮助。

我已经可以发送资源记录了。我只需要知道如何为权威 DNS 服务器发送正确的。

我正在使用ndns 编写DNS 服务器。 Ndns 应该为我做底层通信,但我仍然需要了解 DNS 的基础知识。除此示例外,未记录 Ndns。它是用 JavaScript 编写的,但无论如何它应该很容易阅读。当收到请求时,它会在响应中添加资源记录并发送响应

function handleDnsRequest(request, response) {
    response.addRR(
        ndns.ns_s.ar,  // Section AR
        'node.js',     // Name
        ndns.ns_t.txt, // Type TXT
        ndns.ns_c.in,  // Class IN
        1991,          // TTL
        'http://nodejs.org/' // Value
        );
    response.send();
}

所以,不管是什么请求,这个handler都会添加一条响应记录如下

  • AR 部分(附加记录)
  • 名称“node.js”
  • 输入 TXT(文本字符串)
  • 类 IN(互联网)
  • TTL 1991(约 33 分钟)
  • 值(文本字符串)

在 Windows nslookup 上提供此输出

C:\>nslookup - 127.0.0.1
node.js text =

        "http://nodejs.org/"
Default Server:  UnKnown
Address:  127.0.0.1

> google.com
Server:  UnKnown
Address:  127.0.0.1

Name:    google.com

>

我怎样才能发送正确的响应?我想首先为所有 A 记录发送一个固定的 IP 地址,无论如何,并以不支持或不支持的方式拒绝大多数其他内容。

在典型的 nslookup 登录中,请求一条记录 从 DNS 服务器出来的典型资源记录列表是什么?

【问题讨论】:

  • 您能否简化您的问题很多。我全职做 DNS,但我无法弄清楚您实际上在问什么,无论是我们中的任何一个,还是您的 DNS 服务器。请去掉多余的信息,并简单地解释您要发送的 DNS 查询,然后您应该生成什么 DNS 答案就应该很明显了。
  • 附注另外,请为 Windows 安装 dig 并显示使用它的示例。 nslookup 太可怕了。
  • @Alnitak:抱歉,我删掉了大部分问题。首先,我想知道 A 查找的典型问题和资源记录
  • @Alnitak:Dig 已安装。我应该运行什么命令?
  • dig @server_ip some_domain_name

标签: node.js dns ndns


【解决方案1】:

我想先发送一个固定的 所有 A 记录的 IP 地址 什么,并否认大多数其他一切 作为不受支持的或诸如此类的。

啊哈,现在我们到了某个地方。

您需要在答案部分返回一个与(第一个)问题具有相同“所有者名称”的 RR,并带有相应的字段。

试试这个:

function listener (req, res)
{
    res.addRR(
         ndns.ns_s.an,         // answer section
         req.question[0].name, // name
         ndns.ns_t.a,          // type
         ndns.ns_c.in,         // class
         3600,                 // TTL
         '127.0.0.1'           // RDATA
    );
    res.header.aa = 1;         // authoritative answer
    res.header.ra = 0;         // recursion not available
    res.send ();
}

这仅处理默认响应,并且不检查入站查询是否针对 A 记录。

要拒绝您要检查的其他查询:

req.question.length == 1
req.question[0].type == ndns.ns_t.a
req.question[0].class == ndns.ns_c.in

然后将res.header.rcode 设置为非零值。

真正的权威服务器也会在authority section中发送DNS服务器名称,但你应该可以不这样做。

【讨论】:

  • 谢谢,我还有更多问题,但这是一个很好的起点,稍后我会制定其他问题。我认为我的问题是我没有正确阻止非 A 请求,每当我触摸它时就会导致失败。 rcodes 的例子是什么?
  • 这取决于名称是否“有效”。如果名称有效但类型无效,则只返回一个没有答案的响应。如果名称无效,则返回“拒绝”(5)。
  • 无效名称是不在我们服务器上的名称,还是语法无效的名称?
  • 一个不在您的服务器上。如果语法无效,则应返回“formerr”。
  • “类”这个词在 Javascript 中是保留的。你是如何让上面的代码运行的?
猜你喜欢
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 2011-06-25
  • 2017-08-24
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
相关资源
最近更新 更多