2011-04-06 149 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