FreeBSD auto-chroot named

前些日子伺服器從 4.11-STABLE 升級至 6.1-STABLE 時找了不少資料
一些傳說中的疑難雜症也都迎刃而解,只剩 DNS 沒搞定
有經驗的 administrator 可能隨即聯想到 named chroot
但問題癥結卻非如此,讓我苦惱了很久

直到今天靈光一閃,終於解決….

話說從頭
FreeBSD自 5.3-RELEASE 起,內建的 named 即支援自動 chroot
原本 /etc/namedb 的設定檔預設被 symbolic link 至 /var/named
這項設定是由 /etc/rc.d/named 的 script 完成,與他相關的是 /etc/rc.conf 的一些參數
以下設定為 /etc/defaults/rc.conf 的設定值,也就是系統預設值:

named_enable=”NO”
named_program=”/usr/sbin/named”
#named_flags=””
named_pidfile=”/var/run/named/pid”
named_uid=”bind”
named_chrootdir=”/var/named”
named_chroot_autoupdate=”YES”
named_symlink_enable=”YES”

預設是在開機時不啟動 named
named_program 指的是程式路徑
named_flag 被註解,表示不用外加任何參數
named_pidfile是記載pid的檔案位置
named_uid & named_chrootdir 分別表示 chroot 後執行身分與根目錄
如果 named_chroot_autoupdate 被設為 “NO”,則不自動 chroot
named_symlink_enable 也隨之失效 (因為身分是 root)

照理說只要在 /etc/rc.conf 內指定 named_enable=”YES”
就可以在開機時載入 chroot named,順利啟動 DNS
我碰到的情況比較詭異,可以確定 named 以 bind 的使用者身份被執行
但是 DNS 對於 localhost 的 query 毫無反應 (更不用提 remote)

非要以 root 身分手動跑一次

/etc/rc.d/named restart

DNS 才會乖乖的運作,身分卻仍舊是 bind

重新開機後,心血來潮查了 /etc/resolv.conf 發現裡面只有

nameserver 168.95.192.1
nameserver 168.95.1.1

這兩組 nameserver 設定,本來設好的 nameserver 127.0.0.1 卻無故消失
讓我想起了 PPPoE 的過程中取得 dns 的陳年公案

所以只要在 /etc/ppp/ppp.conf 中將自動取得 dns 的選項拿掉

enable dns

就可以避免 ppp 在連線時將 /etc/resolv.conf 覆寫
此時就可以將 nameserver 127.0.0.1 安心寫入。
(擱了好久的小問題,總算解決了。以後可以全自動搞定開機流程囉!!)

參考資料

Leave a Reply

Your email address will not be published.