使用 Bind9 為海量虛擬主機設置 DNS 名稱伺服器
我正在嘗試在本地 LAN 中設置一個 chrooted DNS 名稱伺服器,就像這樣,連接在 LAN 中的每個人都可以訪問為開發環境定義的大量虛擬主機,而無需一一手動編輯其本地 /etc/hosts。海量虛擬主機名為 example.user.dev (VirtualDocumentRoot /home/user/example) 和 example.test (DocumentRoot /var/www/example)。
我設置了所有內容, /var/log/syslog 沒有顯示任何錯誤,但是在檢查 DNS 時:
主機 -v example.test
找不到主人。也使用 dig 命令我沒有收到答案。
挖 -x 例子.test
; <<>> DiG 9.5.1-P3 <<>> -x 範例
;; 全域選項: printcmd
;; 得到答案:
;; ->>HEADER<<- 操作碼:QUERY,狀態:NXDOMAIN,id:47844
;; 標誌:qr rd ra;查詢:1,答案:0,權威:1,附加:0
;; 問題部分:
;example.in-addr.arpa。在 PTR
;; 授權部分:
in-addr.arpa。600 在 SOA a.root-servers.net 中。dns-ops.arin.net。2010042604 1800 900 691200 10800
;; 查詢時間:108毫秒
;;伺服器:80.58.0.33#53(80.58.0.33)
;; 時間:2010 年 4 月 26 日星期一 11:15:53
;; 味精大小 rcvd:107
我的配置如下:
/etc/bind/named.conf.local
區域“example.test”{
type master; allow-query { any; }; file "/etc/bind/zones/master_example.test"; notify yes;
};
區域“1.168.192.in-addr.arpa”{
type master; allow-query { any; }; file "/etc/bind/zones/master_1.168.192.in-addr.arpa"; notify yes;
};
/etc/bind/named.conf.options
- 注意:我們有一個靜態 IP 地址,因此我將向 DNS 伺服器的查詢轉發到該 IP 地址。
選項{
directory "/var/cache/bind"; forwarders { 80.34.100.160; }; auth-nxdomain no; listen-on-v6 { any; };
};
/etc/bind/zones/master_example.test
$ ORIGIN example.test. $ TTL 86400
@ IN SOA example.test。根.example.test。(
201004227 ; serial 28800 ; refresh 14400 ; retry 3600000 ; expire 86400 ) ; min
;
TXT“example.test,DNS 服務”
@IN NS example.test。
本地主機 A 127.0.0.1
example.test。192.168.1.52
範例 192.168.1.52
www CNAME example.test。
/etc/hosts
127.0.0.1 本地主機範例
192.168.1.52 本地主機範例 example.test
/etc/resolv.conf
- 注意:對於 Bind,我只添加了最後 3 行。
名稱
伺服器 80.58.0.33 名稱伺服器 80.58.61.250 名稱
伺服器 80.58.61.254
search example.test
搜尋範例
名稱伺服器 192.168.1.52
編輯
一些重大變化。現在我有這個配置:
/etc/resolv.conf
search example.test
搜尋範例
名稱伺服器 192.168.1.52
名稱
伺服器 80.58.0.33 名稱伺服器 80.58.61.250 名稱
伺服器 80.58.61.254
/etc/hosts
127.0.0.1 本地主機範例 example.test 192.168.1.52 dns1.example.test
/etc/bind/named.conf.local
我剛剛註釋掉了反向地址區域。
/etc/bind/zones/master_example.test
$ ORIGIN example.test. $ TTL 86400
@ IN SOA dns1.example.test。hostmaster.example.test。(
2010042214 ; serial 21600 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; min
在 NS dns1.example.test.
在 NS dns2.example.test。
在 192.168.1.52
範例 IN A 192.168.1.52
dns1 IN A 192.168.1.52
dns2 IN A 192.168.1.52
www CNAME 範例
現在執行:
挖example.test@192.168.1.52
; <<>> DiG 9.5.1-P3 <<>> example.test @192.168.1.52
;; 全域選項: printcmd
;; 得到答案:
;; ->>HEADER<<- 操作碼:QUERY,狀態:NOERROR,id:53489
;; 標誌:qr aa rd ra;查詢:1,答案:1,權威:2,附加:2
;; 問題部分:
;example.test。在一個
;; 答案部分:
example.test。86400 IN A 192.168.1.52
;; 授權部分:
example.test。86400 在 NS dns1.example.test。
範例.測試。86400 在 NS dns2.example.test。
;; 附加部分:
dns1.example.test。86400 IN A 192.168.1.52
dns2.example.test。86400 IN A 192.168.1.52
;; 查詢時間:1毫秒
;;伺服器:192.168.1.52#53(192.168.1.52)
;; 時間:2010 年 4 月 26 日星期一 12:38:56
;; 味精大小 rcvd:118
那麼,現在,我的下一步應該是哪一步?
編輯 2
我像這樣離開了 DNS 伺服器 resolv.conf:
名稱伺服器 192.168.1.52
名稱
伺服器 80.58.0.33 名稱伺服器 80.58.61.250 名稱
伺服器 80.58.61.254
並將 DNS 伺服器地址 192.168.1.52 添加到其 resolv.conf 中的任何客戶端電腦
像這樣,我可以從每台電腦訪問http://example.test。
為了能夠訪問開發環境的每個單獨的虛擬主機,我應該創建一個新區域還是在我創建的 example.test 區域中使用萬用字元?
編輯 3
最後我像這樣離開了我的區域。一個區域用於測試虛擬主機,另一個用於海量虛擬主機用於開發問題。一切都按我的意願工作,速度快,性能好。不知道我搭建的系統有沒有比這個更好的配置。任何建議都會得到照顧。
master_example.test
$ ORIGIN example.test. $ TTL 86400
@ IN SOA dns1.example.test。hostmaster.example.test。(
2010042215 ; serial 21600 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; min
@IN NS dns1.example.test。
@IN NS dns2.example.test。
@IN A 192.168.1.52
www IN CNAME @
master_dev
$ ORIGIN dev. $ TTL 86400
@ 在 SOA 開發中。主機管理員.dev。(
2010042215 ; serial 21600 ; refresh 3600 ; retry 604800 ; expire 86400 ) ; min
@IN NS 開發。
@ IN A 192.168.1.52
*.dev。在 192.168.1.52
/etc/bind/named.conf.local
區域“example.test”{
type master; allow-query { any; }; file "/etc/bind/zones/master_example.test"; notify yes;
};
區域“開發”{
type master; allow-query { any; }; file "/etc/bind/zones/master_dev"; notify yes;
};
區域“1.168.192.in-addr.arpa”{
type master; allow-query { any; }; file "/etc/bind/zones/master_1.168.192.in-addr.arpa"; notify yes;
};
/etc/bind/named.conf.options
- 注意:我們有一個靜態 IP 地址,因此我將向 DNS 伺服器的查詢轉發到該 IP 地址。最後,我在轉發器中添加了 ISP DNS IP,以免成為網路流量的瓶頸,因為在實驗中,我在本地 LAN 內外的 HTTP 連接速度上有了很高的提升。
選項{
directory "/var/cache/bind"; allow-query { 192.168.1.0/24; localhost;}; allow-recursion { 192.168.1.0/24; localhost;}; forwarders { 80.58.0.33; 80.34.100.160; }; auth-nxdomain no; listen-on-v6 { any; };
};
查看您的resolv.conf中的 IP 地址,我感覺您的 BIND 伺服器位於 192.168.1.52 上。據我所知,您不能在 resolv.conf 中指定諸如“對於這些域,使用此名稱伺服器”之類的內容。基本上,您的 BIND 伺服器永遠不會被查詢。正如您在 dig 查找中看到的(這是不正確的,它要求反向 DNS 條目),它嘗試 80.58.0.33,我假設它是您提供商的 DNS 伺服器。
您已經使用“轉發器”選項將 BIND 設置為記憶體名稱伺服器,因此您需要做的是在客戶端 PC 中只有 192.168.1.52 作為名稱伺服器。
要查看您的 BIND 是否配置正確,請嘗試以下操作:
dig example.test @192.168.1.52