Linux

DNS 伺服器無法解析 localhost 名稱

  • November 28, 2017

我正在嘗試在我的 RHEL6.4 vm 上設置 Apache 伺服器,但由於dnsmasq某種原因無法辨識主機名,因此無法:

nslookup rhel64.example.com
Server:         xxx.xxx.xx.1
Address:        xxx.xxx.xx.1#53

server can't find rhel64.exmple.com: NXDOMAIN

/etc/hosts:

xxx.x.x.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

/etc/resolv.conf:

; generated by /sbin/dhclient-script
search novalocal example.com
nameserver xxx.xxx.xx.1

如果您需要查看任何內容來解決我的問題,請告訴我。我不能使用不同的 DNS 伺服器。

尋找一種dnsmasq在不更改 DNS 伺服器的情況下解析主機名的方法。

我希望您的伺服器的 IP 地址是固定的。你/etc/hosts應該包含

127.0.0.1  localhost
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
xxx.x.x.1  rhel64.example.com rhel64

localhost絕不應指向 127.0.0.1 或 ::1 以外的地址。根據需要添加具有固定地址的其他主機/etc/hosts

對於動態地址,請確保您在 中設置了正確的域/etc/dnsmasq.conf,並確保在請求中發送了主機名。檢查dnsmasq.leases應該在/var/lib目錄中的文件嘗試驗證。應該像這樣指定域。

domain=example.com

或者,您可以在文件中提供固定地址dnsmasq.conf/etc/ethers. 像這樣的行會將 mac 地址映射aa.bb.cc.dd.ee.ff192.0.2.1. /etc/hosts如上所述,將指定 DNS 名稱。

aa.bb.cc.dd.ee.ff     192.0.2.1

編輯:我會使用的診斷包括。

在執行 dnsmasq 的主機上執行 getent。

getent hosts rhel64

這應該返回您在 hosts 文件中輸入或由 DNS 返回的值。如果可行,請嘗試使用該host命令查找地址。nslookup如果主機不可用,請使用。試試這些命令。(看來您dnsmasqapache伺服器位於同一主機上。

hosts rhel64.
hosts rhel64.example.com.
hosts rhel64.  localhost
hosts rhel64.example.com.  localhost
hosts rhel64.  rhel64. 
hosts rhel64.example.com.  rhel64.
hosts rhel64.  rhel64.example.com.
hosts rhel64.example.com.  rhel64.example.com.

哪個命令失敗以及它如何失敗應該可以幫助您確定問題。您可能還想確保 dnsmasq 正在偵聽所有 IP 地址。

診斷問題時:請求rhel64.是針對未使用域限定的主機名,請求rhel64.example.com.是針對完全限定的名稱。名稱上的最後一個點告訴解析器不要嘗試搜尋列表中的域。第二個主機名(如果指定)將覆蓋 中列出的名稱伺服器/etc/resolv.conf。在這種情況下,我使用了來自 的伺服器/etc/resolv.conf、本地主機地址(127.0.0.1 或 ::1)、從 DNS 中查找的主機名地址以及從名稱伺服器中查找的完全限定名稱的地址。如果名稱的初始查找失敗,最後兩個伺服器將無法工作。

netstat -an | grep :53

編輯:在重新閱讀您的文章時,我注意到您從 DHCP 獲取地址,關於設置固定 IP 地址的說明適用於 Unix 風格的 DHCP 伺服器。它們應該應用於可能是 xxx.xx1 的路由器的 dchp-server,這不是您的伺服器地址。您應該能夠使用命令ifconfig或較新的命令獲取目前 IP 地址ip addr。這是應該與 /etc/hosts 文件中的主機名匹配的地址。

如果您無權訪問路由器,您可以嘗試讓 DHCP 為您更新 DNS 服務。將以下條目添加到我們的 DHCP 配置文件中:option fqdn.fqdn rhel64.example.com;或選項 fqdn.fqdn rhel64;

添加條目後,您將需要重新啟動該dhclient過程。試試命令

sudo dhclient -r
sudo dhclient

否則,您將需要重新啟動介面或整個網路設置。

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