pfSense 安裝dns-server的方法
我最近研究以pfSense架設路由器,並安裝dns-server套件的方法。由於套件語法有點問題,安裝會發生「 Parse error: syntax error, unexpected '&', expecting T_VARIABLE or '$' in /usr/local/pkg/tinydns.inc on line 880 」錯誤。我想到一種方法可以繞過錯誤,雖然作法不是很漂亮,不過還是記錄一下。
pfSense簡介
pfSense是一套具備路由器、防火牆等多功能的網管系統。它是基於FreeBSD(維基百科)、可以空機安裝的完整系統,也是開放原始碼可供人自由下載、安裝。pfSense具備網頁管理介面,可直接用瀏覽器控制、監控系統狀況。而且可以安裝各種套件(package)擴充pfSense的功能。
kidz在Mobile01上有好幾篇介紹pfSense安裝與設定的教學,想知道到如何使用pfSense的人可以參考看看。
pfSense安裝dns-server失敗
我使用的pfSense是1.2.3版。而pfSense的套件之一「dns-server」是搭配TinyDNS軟體修改而成的整合套件,目前版本是1.0.6.14。
但是安裝dns-server的過程會發生錯誤,套件無法順利安裝。錯誤訊息寫在網頁最下方,有時候會不小心略過。訊息內容為:
Parse error: syntax error, unexpected '&', expecting T_VARIABLE or '$' in /usr/local/pkg/tinydns.inc on line 880
這個意思是,/usr/local/pkg/tinydns.inc的880行程式錯誤。
我下載該程式來檢查,原本的880行附近的程式如下(878行到884行):
/* Uncompress the v6 IP so we have all of the sections we need */
$fullip = explode(":", Net_IPv6::uncompress($ip));
/* Expand even more so we have a digit in every possible place */
foreach ($fullip as & $q) {
$q = sprintf("%04s", $q);
}
foreach裡面多了一個「&」,我以紅字粗體標示,這就是發生錯誤的原因。
修正後878行到884行的程式如下:
/* Uncompress the v6 IP so we have all of the sections we need */
$fullip = explode(":", Net_IPv6::uncompress($ip));
/* Expand even more so we have a digit in every possible place */
foreach ($fullip as $q) {
$q = sprintf("%04s", $q);
}
我把修正後檔案上傳到SkyDrive供人下載,網址如下:
雖然我想把這個錯誤報告回報給pfSense,但是論壇不知為何不能註冊,甚至有人在論壇上已經提過相同的問題了,但還是沒有解決。期待好心人士能夠幫忙反應一下吧。
修正pfSense安裝dns-server
不過光是修正檔案沒有用,這樣還是無法安裝到pfSense中。於是我想到一個替代的方法:在pfSense下載tinydns.inc之後、準備要安裝dns-server之前,將tinydns.inc替換成修正版本。
這樣不是很漂亮,但至少可以讓它安裝成功。而短時間內我也找不到更漂亮的方法了。
以下介紹操作步驟:
1. 下載tinydns.inc修正檔、開啟pfSense的SSH
tinydns.inc的修正檔網址如上所述,請從SkyDrive空間下載。
傳送檔案的方法,我使用的是sftp,這要先開啟pfSense的SSH通訊協定才行。設定的位置是在Adcanced中的Secure Shell,請勾選「Enable Secure Shell」,再按下「Save」按鈕儲存。
試著用FileZilla Client之類的軟體以SFTP連線看看,順利的話應該能夠連到pfSense。
2. 準備sftp連線
先準備好FileZilla中本機目錄與遠端目錄的路徑。左邊是你的本機目錄,也就是要上傳的tinydns.inc修正檔的位置;右邊則是pfSense檔案系統中存放tinydns.inc的位置, 預設是在/usr/local/pkg目錄底下。
待會就要上傳了,這個視窗先放著待命。
3. pfSense開始安裝套件
回到pfSense的套件列表,並安裝dns-server。
請觀察它的安裝訊息,確定「Additional files… tinynds.inc」訊息已經處理完畢(通常很快,這是第一個下載的檔案),然後馬上進入下個步驟。
4. 上傳修正版tinydns.inc
再回到FileZilla,上傳tinydns.inc。
5. dns-server安裝成功
然後安裝過程就會順利地進行,看到「Installation completed」的訊息,表示安裝已經成功。
使用dns-server
如果要設定dns-server,你可以從導覽列「Services」中的「DNS Server」進入。
設定內容也挺複雜的,我還要研究看看就是了。
結語
pfSense感覺還不錯用,很容易上手。介面其實有簡體中文版本,但這樣子常常會被翻譯術語混淆,所以我個人比較喜歡用英文版。
這個方法不是很漂亮,如果有更好的作法,歡迎大家建議指正,感謝。