DNS:资源记录如何为权威 DNS 服务器工作



但请耐心等待。我不需要 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();
}

因此,无论请求是什么,此处理程序都会添加响应记录,如下所示

  • AR部分(附加记录)
  • 名称"节点.js"
  • 键入 TXT(文本字符串)
  • 类 (互联网)
  • 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 服务器中的典型资源记录列表是什么?

我想从发送固定的开始 所有 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设置为非零值。

真正的权威服务器也会在权限部分发送 DNS 服务器名称,但您应该能够在此处不这样做。

最新更新