設置 DNS 伺服器以將域“abc.com”的請求解析到自己的主機
我有一個公共 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上有很多關於這些的資訊)