Domain-Name-System

使用 Bind9 為海量虛擬主機設置 DNS 名稱伺服器

  • August 27, 2014

我正在嘗試在本地 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。根.exa​​mple.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

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