說明:這是一篇對DNS排錯的文章,因為在網上(包括RedHat知識庫)幾乎沒有對文中提到的錯誤進行直接描述和提出最好最快的解決方案的報告,經過長達近一個小時的排錯和資料查閱才有了這篇文章的脫稿。
昨天我剛剛在非生産環境中的Red Hat Enterprise Linux Server上配置了一台DNS伺服器,以做測試使用。但是很快遇到了一個奇怪的錯誤。
我在執行“service named status”後,其中第一行顯示如下内容:
一般大家都知道,rndc 主要是用來控制named程序及其配置檔案的,可以用來連接配接DNS伺服器并對配置進行重新載入,其端口号就是953。那麼導緻這個錯誤的原因可能是什麼呢?
我的解決思路:
首先,發現問題,仔細閱讀檢視指令的回顯資訊。例如我詳細的檢視service的狀态資訊。
很顯然,上面的顯示中的第97行顯示的
rndc: connect failed: 127.0.0.1#953: connection refused
named is stopped
是錯誤的資訊。
然後我開始檢視系統日志,顯示結果如下:
很明顯,根據上面的結果第35,37,46行的提示很可能是權限或者配置檔案的錯誤造成的。是以下面一一檢查即可。
首先不是權限的問題。我檢視了所有DNS相關的所有配置檔案,展示如下,也為大家以後出錯作為參考。因為使用root登入終端對檔案或目錄執行移動或建立工作很容易導緻權限問題。
通過比對之前的備份,發現在權限上沒有問題。
PS:如果大家遇到這方面的問題請使用如下的指令進行修改。
那麼既然不是權限的問題,是不是iptables給設定的規則不正确呢?
檢視iptables配置資訊,顯示如下:
顯然,不是iptables的配置有問題。再者,iptables如果有政策在阻止通路,其錯誤資訊也不是如上面所示。
最終我診斷為可能是/etc/named.conf 配置檔案存在問題。
是以進行檢查配置檔案,操作和顯示如下:
說明,在參數上沒有問題。是以我開始懷疑,是不是/etc/named.conf或者/etc/rndc.conf存在配置錯誤?但是,作為新配置安裝的DNS不會在密鑰上出現問題,是以我檢查了/etc/named.conf,确實沒發現什麼錯誤。然後我檢查了/etc/rndc.conf這個檔案,終于發現問題的所在。
結果如下:
顯然,最後的注釋說的很清楚,要想使用rndc就必須在/etc/named.conf中進行配置。
是以将顯示如下的/etc/named.conf第一段代碼更改為第二段代碼。
第一段代碼:
第二段代碼:
最後,重新啟動named守護程序
結果顯示如下,就表示可以了。
最後總結:
其實問題的出現不一定就是存在硬錯誤,還可能存在軟錯誤。就像C程式設計一樣,有的文法錯誤,編譯器或文法檢查器能幫你識别并找出錯誤,但是在算法上的邏輯錯誤隻能由程式設計人員自己發現和糾正。在配置Linux網絡伺服器時同樣也可能遇到這類問題,隻要管理者仔細檢視問題,檢查日志就很快發現問題的所在。希望在今後的工作中能更多的總結和發現、解決問題的思路,大膽的卻有根據的自己去發現和解決問題。