2011-04-06 114 views
3

但请耐心等待。我不需要帮助ndns或JavaScript。我需要DNS资源记录帮助。DNS:资源记录如何为授权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(文本字符串)
  • 类(互联网)
  • 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 

> 

如何发送正确回答这个输出?我想先发送一个固定的IP地址给所有的A记录,不管是什么,并且拒绝其他大部分的东西都是不支持的或者什么的。

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

+1

您能否简化您的问题_a lot_。我全职做DNS,但我无法弄清楚你究竟在问什么,我们或者你的DNS服务器。请删除多余的信息,并用简单的术语解释您尝试发送的DNS查询,然后应该明白DNS应该生成的答案。 – Alnitak 2011-04-06 15:16:43

+0

p.s.另外,请安装'dig' for windows并使用它来显示示例。 'nslookup'太可怕了。 – Alnitak 2011-04-06 15:17:39

+0

@Alnitak:对不起,我删掉了大部分问题。首先,我想知道A查找的典型问题和资源记录 – 2011-04-06 15:26:09

回答

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服务器的名字,但你应该能够逃脱不这样做在这里。

+0

谢谢,我还有更多问题,但这是一个很好的起点,我将在稍后制定其他问题。我认为我的问题是我没有正确地阻止非A请求,每当我触摸事物时就会导致失败。什么是“rcode”的例子? – 2011-04-06 15:53:46

+0

取决于名称是否“有效”。如果名称是有效的,但类型不是,则返回一个没有答案的响应。如果名称无效,则返回“拒绝”(5)。 – Alnitak 2011-04-06 15:56:55

+0

无效的名字将会是不在我们的服务器上或者语法无效的名称? – 2011-04-06 22:04:35