Domain-Name-System

設置 DNS 伺服器以將域“abc.com”的請求解析到自己的主機

  • March 3, 2016

我有一個公共 IP 地址的伺服器(比如說) 198.20.30.40

我正在嘗試在此主機上設置 DNS 伺服器,以便我可以解析對“stackoverflow.com”的所有請求,以便將其解析為“198.20.30.40”,而不是實際的 stackoverflow。當然,我已將請求 stackoverflow 的客戶端中的 Primary-DNS 伺服器設置為 198.20.30.40。還有其他 open-dns 伺服器 (8.8.8.8) 設置為輔助 DNS。

遵循教程後,我無法讓它工作。

這就是我做“探勘”時得到的。看起來它正在工作

$ dig stackoverflow.com
; <<>> DiG 9.8.3-P1 <<>> stackoverflow.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43984
;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available
;; QUESTION SECTION:
;stackoverflow.com.         IN  A
;; AUTHORITY SECTION:
stackoverflow.com.      86400   IN  SOA ns.stackoverflow.com. hostmaster.linux.bogus. 990 28800 7200 2419200 86400
;; Query time: 152 msec
;; SERVER: 198.20.30.40#53(198.20.30.40)
;; WHEN: Thu Mar  3 15:14:45 2016
;; MSG SIZE  rcvd: 90

但是,當我執行 nslookup 時,我得到以下資訊。它沒有給出我的伺服器的 IP 地址,即。198.20.30.40

$ nslookup stackoverflow.com
;; Got recursion not available from 198.20.30.40, trying next server
Server:     8.8.8.8
Address:    8.8.8.8#53
Non-authoritative answer:
Name:   stackoverflow.com
Address: x.y.z.d

這是我的 /etc/bind/named.conf.local 配置文件的樣子

zone "stackoverflow.com" {
       type master;
       notify no;
       file "/etc/bind/stackoverflow.com";
};
zone "30.20.198.in-addr.arpa" {
       type master;
       file "/etc/bind/198.20.30";
};

我的 /etc/bind/stackoverflow.com

$TTL 3D
@       IN      SOA     ns.stackoverflow.com. hostmaster.linux.bogus. (
                       990       ; serial, todays date + todays serial #
                       8H              ; refresh, seconds
                       2H              ; retry, seconds
                       4W              ; expire, seconds
                       1D )            ; minimum, seconds
;
               NS      ns              ; Inet Address of name server
               MX      10 mail.linux.bogus.     ; Primary Mail Exchanger
               MX      20 mail.friend.bogus.   ; Secondary Mail Exchanger
;
localhost       A       198.20.30.40
ns              A       198.20.30.40
www             CNAME   ns
media           CNAME   ns
jobs            CNAME   ns
ir              CNAME   ns
help            CNAME   ns
mail            A       198.20.30.40

我的 /etc/bind/198.20.30

$TTL 3D
@               IN      SOA     ns.stackoverflow.com. hostmaster.linux.bogus. (
                               989       ; Serial
                               8H      ; Refresh
                               2H      ; Retry
                               4W      ; Expire
                               1D)     ; Minimum TTL
                       NS      ns.stackoverflow.com.
40                     PTR      ns.stackoverflow.com.
40                     PTR      jobs.stackoverflow.com.
40                     PTR      help.stackoverflow.com.

你已經回答了你自己的問題,只是你沒有意識到。

在沒有 的情況下執行dig+norecurse,您會看到:

;; flags: qr aa rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; WARNING: recursion requested but not available

當您嘗試使用時nslookup,您會看到:

;; Got recursion not available from 198.20.30.40, trying next server

您已經配置了一個權威的DNS 伺服器,它不響應任何 DNS 查詢。它僅響應對已配置域的請求。僅授權伺服器不應配置為 DNS 伺服器,以用於工作站或伺服器進行的所有遞歸查詢,這就是您在上面所做的。換句話說,絕對不能在與遞歸伺服器(例如 8.8.8.8)相同的上下文中使用僅授權伺服器。

您在這裡遇到的是這種特殊配置錯誤的方式dig和行為方式的差異。將顯示有關遞歸不可用的警告,但如果可用,則提供權威答案。還會警告您遞歸不可用,但不會顯示權威答案並完全跳到下一個伺服器。nslookup``dig``nslookup

此時強烈建議從遞歸伺服器列表中刪除僅權威伺服器,並對這些類型的伺服器之間的差異進行一些獨立研究。雖然可以將權威伺服器配置為遞歸伺服器,但如果這是面向網際網路的權威伺服器,這幾乎總是一個壞主意,因為這會導致稱為“開放解析器”的不安全配置。(Google上有很多關於這些的資訊)

引用自:https://serverfault.com/questions/761333