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

时间:2011-04-06 14:59:02

标签: node.js dns ndns

但请耐心等待我。我不需要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部分(附加记录)
  • 名称“node.js”
  • 输入TXT(文本字符串)
  • Class IN(Internet)
  • 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服务器的典型资源记录列表是什么?

1 个答案:

答案 0 :(得分:5)

  

我想先发送一个固定的   所有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服务器名称,但是你应该可以在这里不用这样做。