顯示具有 WL-520GU Hack 標籤的文章。 顯示所有文章
顯示具有 WL-520GU Hack 標籤的文章。 顯示所有文章

2010/07/09

Oleg: 利用 PoPToP 架設 PPTP VPN 服務

PPTP VPN 算是最容易實作和使用的 VPN 服務。Windows 已內建連線客戶端,只要幾步驟就可以建立連線,在公司連回家中 VPN 穿過公司防火牆看網頁,或者在國外出差時連回家中 VPN 存取網路芳鄰等。連線過程有經過加密,總之是一個幹壞事的好管道。你的 AP 或許會需要這個架設功能,以後好方便使用。刷過 Oleg 韌體的 ASUS WL-520gU 要做到這件事,靠 ipkg 套件管理系統簡直是易如反掌。 (參考:Oleg: 安裝 ipkg Optware 套件管理系統)

安裝方法

$ ipkg install poptop

修改設定

/opt/etc/pptpd.conf

#logwtmp
因為程式會嘗試載入 /usr/lib/pptpd/pptpd-logwtmp.so,可是這個地方根本沒這個檔案,而且在 Oleg 韌體中 /usr/lib 屬於唯讀區域無法讀寫。修改成註解只是不會紀錄連線狀態,對 VPN 連線並無影響。

localip 192.168.1.10
remoteip 192.168.88.1-5
分配IP。請參考:PoPToP - Ubuntu 下架設 PPTP VPN

2010/03/15

Oleg: WL-520GU 刷 Oleg 韌體後時間不準變慢的問題

最近無意間發現,AP的時間好像有問題?本來不以為意,但因為有需要用到 cron 排程,時間必須準確。於是開始調查。網路上查一下終於得知了原因。

原因

WL-520GU 正確時脈是 200MHz (參照 Oleg 設備列表),但是 Oleg 韌體卻判斷成 240 MHz,導致整體時間變成 0.83倍。也就是說,60秒會慢10秒,累計起來一小時就慢了10分鐘了。除了不斷的以 NTP 時間自動校正以外,應該有根治的辦法。

2010/03/13

Oleg: 安裝網頁伺服器 (thttpd, lighttpd, nginx) 和 PHP FastCGI

上一篇:Oleg: 安裝 ipkg Optware 套件管理系統

先前如果有完成 Optware 的設定後,現在就可以裝許多套件來玩了。這一篇主要著重於架設網路伺服器 (Web/HTTP Server) 的部分,查看套件列表可以發現也是有許多選擇,但是大家都不推薦安裝最常見的 Apache,理由非常簡單:跑不動。Apache 對於嵌入式系統的硬體來說實在是負擔過大,取而代之仍有許多輕量級的選擇: cherokee, lighttpd, nginx, thttpd, minihttpd 等。

Oleg: 安裝 ipkg Optware 套件管理系統

ipkg 是一個套件管理系統。如果你有玩過 Fedora、Ubuntu 等等的 Linux Distributions,都有內建如 yum、apt-get 的線上套件管理系統,只要簡單下幾個指令便可以自動下載想要安裝的套件與其相依的函式庫,與傳統的原始碼編譯方法比起來,真是輕鬆快速。傳統要安裝程式,必須先安裝 gcc、make 等編譯工具,然後編譯安裝相依函式庫,最後才是編譯你要的程式才安裝。這對從 Windows 上手的使用者來說,實在是很大的門檻,就沒有可以直接下載檔案便能使用的方法嗎?為了降低使用者入門的門檻,套件管理系統便應運而生了。

但套件管理系統雖然方便,原始碼編譯的方式還是不可或缺。由於套件管理系統有一群小組負責維護,套件的版本都是再三經過驗證穩定才釋出的,因此大多不會是最新推出的版本。如果你有急需使用最新版本的需求,除了找第三方的套件來安裝外,就是自行編譯一途了。而有些程式也未必會在套件管理系統當中找到,這時候也是只能找第三方套件或自行編譯。最後是自行編譯可以更靈活的設定想要的功能 (在編譯時透過 ./configure 下一大堆 --with-XXX=OOO 參數的,有編譯過的人應該都有深刻的印象)。

初始化 ipkg

而對於 AP 這種嵌入式系統來說,自行編譯的難度太高了,因此還是推薦使用 ipkg 這個套件管理系統。以下的操作都是要透過 Telnet/SSH 登入機器進行下指令的操作,請先登入後進入命令輸入模式。Oleg 有內建,呼叫的方法如下:
ipkg.sh (操作) [參數]

副檔名 sh 代表他是一個 Shell Script,預設的情況下我們必須先更新取得線上有哪些套件可以使用才能進行後續動作,所以第一件事就是先執行:
ipkg.sh update

等待連線取得最新的套件列表後,就可以開始安裝想要的程式啦!

2010/03/11

Asus WL-520GU 刷 Oleg-Lly 韌體

有了前次刷韌體的經驗,已經對這些操作熟悉不少。因為之前 DD-WRT 狂斷,只好先刷回原廠韌體看看是否有問題,過了一週後恢復了原有的穩定性,猜想 DD-WRT 可能對我這台 RAM 只有 16MB的 AP貧乳娘來說,負擔過大了吧。其實剛要決定刷韌體時就已經知道除了 DD-WRT 外,還有 Tomato 跟 Oleg 等韌體,尤其是 Oleg 這個韌體很特別:它是基於華碩釋出的原廠韌體原始碼修改而成的,也就是說以什麼功能都沒有,僅有的就只有穩定的原廠韌體為基礎,加上得以自訂嵌入式系統的 Telnet/SSH 後端,我們就可以作更多利用。

Oleg 韌體簡介

Oleg 版韌體網頁: http://oleg.wl500g.info/
Lly 維護版: http://code.google.com/p/wl500g/

由於 Oleg 版是基於 ASUS 原廠韌體,目前只有 ASUS WL-500 系列 AP 可以安裝,其他型號和廠牌可就抱歉了。而又由於 Oleg 版距離最後釋出的日子已有很長一段時間,有很長的時間這個韌體無人維護,好在有後繼人 Lly 成立了另一專案,並繼承了 Oleg 的修改。由於 Oleg 已久未更新的緣故,我推薦直接取得 Lly 版的。除了還有繼續修正問題外,也有逐步支援其他機器的意圖,是個有前途的版本。

進行韌體更新

直接從 Lly 維護版的 Google Code 取得對應機器的 trx 檔後,以瀏覽器登入原版 AP 管理介面,直接到韌體更新的地方上傳這個 trx 檔就可以了,超簡單!等系統進度顯示完成後會重新啟動,再重新進入管理介面,如果可以進入的話就表示成功了。

2010/02/09

DD-WRT: 使用 Optware

上一篇提到的 can't resolve symbol 問題,我終於看到了類似的案例:ASUS WL-500gP的library是否支援fstat64函式追蹤。這位使用者試圖嘗試使用 fstat64 這個方法,但這個方法需要新的函式庫 libuClibc-0.9.28.so 才有支援,於是他放到 /jffs/opt/lib 內,取代原有檔案。執行測試程式後,卻發生 can't resolve symbol 的問題。幾經查證之下,原來 /lib 裡就有同名函式庫,系統依照 LD_LIBRARY_PATH 環境變數定義的順序,先找到了 /lib 內的檔案,但這個檔案或許是為了嵌入式系統而特化的而導致沒有這個方法,於是發生錯誤。

這位使用者提出了解套法:修改 LD_LIBRARY_PATH 的搜尋順序,雖然問題解決了,但換 wget 這個程式出問題了,wget 這個指令其實是由內建的 BusyBox 來提供支援的,可能由於載入的函式庫已經不是原本那個特化過的版本,因而發生錯誤。DD-WRT 官方論壇也有人發文 (wget: Segmentation fault),得到的回應是使用套件版的 wget 來解決問題,問題真正的核心依舊沒有解決。

結合上一篇我的「can't resolve symbol 'setlocale'」問題,我們推理一下:由於 DD-WRT 內建的 ipkg 是來自於功能較強大的 OpenWRT,所以它提供的套件所需要的函式庫自然也不同於特化過的 DD-WRT。因此我透過 ipkg 安裝的套件,預設使用的函式庫應該要是 OpenWRT 的 (功能完整的),但現在環境是 DD-WRT (嵌入式特化精簡的)。

又因為執行程式時,環境變數 LD_LIBRARY_PATH 所設定的函式庫載入順序,DD-WRT版的函式庫 (/lib) 一定會比Open-WRT版的 (/jffs/opt/lib) 要來的早載入,因此發生類似的問題。也就是說如果我也採用修改環境變數的方式,讓它讀取到 OpenWRT 版本的函式庫,就可以正常執行,但是這麼一來內建的一些程式就會發生問題 (如 wget)。

這時候我要介紹另一個套件庫Optware。這套函式庫最大的特點在於,它的所有套件在編譯的時候,就已經先定義好了 RPATH (一種指定搜尋函式庫目標的變數) 到 /opt/lib,這個目錄是 Optware 自己的,且 RPATH 的搜尋優先權遠大於環境變數 LD_LIBRARY_PATH。因此我若使用了 Optware 的套件包,它的套件會自己根據內建的 RPATH 搜尋到 Optware 自己的函式庫目錄 /opt/lib,與環境變數毫不衝突。使用它我就不必再為了相容系統跟套件的問題傷透腦筋,因為實際上它們兩個是互不相干的。

另外,Optware 有針對 DD-WRT 作特化。DD-WRT 內建的 ipkg 是直接使用 OpenWRT 的套件,而實際上是有很多套件不能相容的,無法執行。而 Optware 提供的 ipkg-opt 套件卻針對 DD-WRT 進行維護,雖然套件數量遠不及前者,但都是可以正常執行的。

知道了解套法後,我們馬上來安裝看看 Optware。由於並沒有內建的關係,需要執行一些步驟才可以。

前置準備:

先確定系統的 /opt 資料夾可讀寫,並是 ext2/3 檔案系統。因為Optware使用這個目錄,而預設值 DD-WRT 的 /opt 是空的無法操作,所以你必須借助 USB 隨身碟、外接碟甚至是有支援 MMC/SD 卡的機種來加以掛載擴充。檔案系統必須為 ext2/3 就比較麻煩,要先借助 Linux 來格式化,這邊我就先略過不提。

有了空間,還必須掛載。你可以參照第一篇 (Asus WL-520GU 刷 DD-WRT 韌體) 下方 USB 掛載的說明,使用 Automatic Drive Mount 功能來掛載到 /opt。又或者你的 USB 有分區,需要手動掛載特定分區 (修改地方為 系統管理→指令→儲存啟動指令):
mount /dev/scsi/host0/bus0/target0/lun0/part1 /opt

另外,也可能需要開啟 JFFS 功能,儘管 Optware 的套件不會用到。(不確定)

開始安裝:

接著就是安裝 ipkg-opt,Optware的套件管理程式,這需要執行一些程式:
# wget http://www.3iii.dk/linux/optware/optware-install-ddwrt.sh -O - | tr -d '\r' > /tmp/optware-install.sh
# sh /tmp/optware-install.sh
第一行直接貼到 Telnet/SSH 去執行,完成就可以取得安裝的程式檔案 /tmp/optware-install.sh。然後第二行才是執行這個安裝程式,你會見到類似的畫面輸出:
Checking system config ...
Using 192.168.1.1 as default gateway.
Using the following nameserver(s):
nameserver 192.168.1.30
Warning: local nameserver is different than gateway!
Check config or enter:
sed -i s/192.168.*/192.168.1.1/ /tmp/resolv.conf
to correct this.
Installing package uclibc-opt_0.9.28-13_mipsel.ipk ...
Connecting to ipkg.nslu2-linux.org[140.211.166.82]:80
uclibc-opt_0.9.28-12 100% |***********************************************| 832 KB 00:00:00 ETA
Updating /opt/etc/ld.so.cache
......
如果沒有錯誤發生,它應該會在 /opt 目錄下建立 Optware 的結構,並且安裝執行環境跟最重要的 ipkg-opt 套件管理程式,以後就可以使用 ipkg-opt 來取代 DD-WRT 內建的 ipkg 指令。

執行以下指令查看 Optware 的套件庫一覽表,雖然沒有 OpenWRT 的 ipkg 多,卻也是十分豐富了:
# ipkg-opt list|more
abook - 0.5.6-2 - Abook is a text-based addressbook program designed to use with mutt mail client.
ack - 1.90-1 - grep-like text finder
adduser - 1.10.3-1 - a multi-call binary for login and user account administration
adns - 1.4-2 - Asynchronous resolver library and DNS resolver utilities.
aget - 0.4.1-1 - Aget is a multithreaded HTTP download accelerator.
aiccu - 20070115-2 - Automatic IPv6 Connectivity Client Utility.
alac-decoder - 0.1.0-2 - A decoder for the apple lossless file format
......

最後,要解決我要使用 swapon 的問題,安裝 util-linux-ng 這個擴充工具套件就可以了,裡面就有 swapon 跟 fdisk 等原本系統應備的工具指令,當然也有許多跟內建的重疊到,但按照環境變數 PATH 的設定,內建的指令會優先執行,因此不必擔心相容問題。
# ipkg-opt update
# ipkg-opt install util-linux-ng
# swapon

Usage:
swapon -a [-e] [-v] [-f] enable all swaps from /etc/fstab
swapon [-p priority] [-v] [-f] enable given swap
swapon -s display swap usage summary
swapon -h display help
swapon -V display version
......

DD-WRT: 無故斷線?AP水土不服問題

才刷了一天 DD-WRT,馬上發現一些問題:

老哥回報說AP有一定機率在啟動不久後斷線,也就是重新開機之類的。實際使用時還真的發現掛PTT BBS會斷,表示內部的PPPoE一定有斷過,查詢網頁管理介面的資料也確實有跡象。趕緊上各大網站看看有沒有類似的例子。首先是 PTT,有使用者刷了 WL-520GC 後,也是發生斷線的問題,但這位使用者說是掛 PTT 才會斷,其他沒問題。另一位使用者則是更新了韌體之後才解決了問題。

因為案例相當少,所以資料也相當少,初步整理發現可能是韌體的問題。大家都說更新了就沒事,是否是這樣呢?又找到一個Blog苦主的AP跟我一樣深受斷線之苦,而他也是使用v24-sp2 revision 13064版本,是目前官方釋出最新版,不過他文內提到裝了更新韌體之後就解決了,於是我開始尋找新韌體。

原來DD-WRT還有其他人編譯的版本,像這個Eko版本更新的就很多 (位置),可以看到 13064 以下還有其他新版,隨便拿一個版本試看看,我拿 rev.13577 版。利用網頁介面指定新韌體檔上傳刷機後,等待五分鐘,無痛升級完成,剩下就待時間考驗了。希望能解決斷線問題。

我還遇到另外的問題,是關於 DD-WRT 試圖相容 OpenWRT 套件的 ipkg 套件管理程式。要啟用套件管理首先 /jffs 要有空間,因為我掛載了 USB 所以不是問題。輸入:
# ipkg update
可以更新套件庫資料,這邊都還OK。等要裝套件了,例如裝個 swap-utils 好了:
# ipkg install swap-utils
出現下載套件檔案的進度指示,也提示安裝完成,我可以下指令看看囉?

# swapon
swapon: can't resolve symbol 'setlocale'
WTF? 查了一下setlocale似乎是C的語系相關函式,怎了用都無法解決,網路上也沒有適當的解答。有人說是 library 的問題,那到底是哪個也沒說清楚。總之這部分卡很大,目前只能放著。看網路上其他同好都操作順利,我的 DD-WRT 之路怎麼這麼艱辛,要換成 Oleg 版比較好嗎?orz

2010/02/06

Asus WL-520GU 刷 DD-WRT 韌體

家裡有一台Asus製的WL-520GU無線AP,很多ptt鄉民推薦這台,尤其是刷過DD-WRT、Tomato的,還說要是沒刷過就沒有意義了。真的有這麼離譜嗎?使用原廠的韌體也有一段時間了,設定簡單、介面漂亮是他最大的特色,除此之外就沒有了。到底第三方的韌體有什麼吸引力可以讓一堆人冒著喪失保固的風險也要刷呢?

DD-WRT至少多出以下特色:
- USB 隨身碟支援 / FTP
- VPN 連線
- 網路統計圖表
- VoIP
- XLink Kai
- 網路橋接及防火牆設定
- Telnet / SSH 管理介面

更重要的,它根本就是一個小型的Linux嵌入式系統,甚至提供Telnet/SSH可以連進去管理,強大之餘可以做出更多應用。例如說網友Abin就把它改成網頁伺服器。

1. DD-WRT在下載頁面有非常多的版本,這是因為每一台AP的Flash RAM大小不一樣,可以容納的檔案不同之故,檔案越大的功能越全面,比如說Mega版的就是涵蓋所有功能的版本,但是要確定有8MB才可以刷。一般AP用Standard或者Mini版的就可以,有的RAM太小的就只能刷Micro版了,維基百科有各版本的介紹,DD-WRT Wiki有更複雜的列表

像我選擇了 Standard + USB (mini-usb-ftp) 的版本,因為WL-520GU有一個USB孔。原本是作為列印伺服器之用的,刷了支援USB的版本之後搖身一變成為了檔案伺服器了。這樣十分方便,這是原廠韌體所無法支援的。

2. 下載了韌體 bin 檔之後,我們還需要韌體的上傳工具,標準的 TFTP 工具就可以了,像 DD-WRT 官方提供的 tftp2.exe 就夠用了。

3. 確定了版本之後,首先將網路環境簡化到只剩 WL-520GU 跟電腦兩台即可,電腦的網路設定改成手動指定 192.168.1.2,WL-520GU則是自訂值或預設 192.168.1.1。

4. 先把 WL-520GU 的電源拔掉,在天線旁邊有兩顆按鈕,其中一顆黑的是Restore重置鈕,按住不放再插上電源,等約三秒電源指示燈在閃爍的時候放開按鈕,代表我們開啟了維護模式,可以準備上傳韌體。

5. 電腦端開啟 TFTP 工具,Server填AP的IP位置 (如圖我的是 192.168.1.101,預設是 192.168.1.1),Password留空,File選取剛才下載的韌體檔。按下Upgrade鍵等進度列跑完。跑完後程式提示完成後再等個兩三分鐘讓AP進行安裝,直到電源指示燈不閃了就代表更新完成了。


6. 先以拔電源的方式讓 AP 重新啟動,再用電腦開啟瀏覽器,瀏覽 http://(AP設定的IP) 來開啟設定畫面,如果出現提示輸入帳號密碼的視窗則以root / admin的組合輸入,就代表大功告成啦。


刷韌體是很容易,但是要把之前所作的設定調回來可就不太容易,DD-WRT的設定項目非常的多,跟原廠韌體絕對是不能比。

另外要附掛USB隨身碟也十分容易:
  1. 準備一個格式化好的隨身碟 (檔案系統應該是 FAT)
  2. 插到 WL-520GU 的USB插槽
  3. 設定介面的 伺服器→USB 就是相關設定,把「USB 驅動核心」打開之後會有更多選項跳出,選取所有的USB1.1跟2.0支援,然後把「USB 儲存裝置驅動」跟相關檔案系統支援也打開。
  4. 最後別忘了也把 Automatic Drive Mount 打開,可以開機後自動掛載隨身碟。Disk Mount Point則隨喜好,我設定在 /jffs 上。儲存重開後就可以看到相關資訊。
  5. 系統管理→基本管理的jffs支援也可以打開。這個是刷完韌體後 Flash 剩下的空間可供使用,有512KB多可以用。如果上面的 USB 已經夠大了這邊開不開都無所謂了,這是給沒有 USB 可擴充的 AP 一個可以儲存資料的地方。


最後有一個我十分注意的功能,專有名詞叫做 PPPoE-Relay,用途是讓使用NAT虛擬IP上網的電腦,也可以透過分享器撥號取得實體IP。用例子說的話就是無線AP設定自動撥號取得動態IP,平常一開機所有電腦都可以NAT上網。但偶爾也想透過撥號取得實體IP來對外。這個功能在原廠的韌體裡是有的,在設定PPPoE的時候就有項目可勾選 (但我現在忘了名稱),但刷到 DD-WRT 卻找不到類似的功能,除非你在「基本設定」把WAN連接類型關閉,下面才會多一個「將 WAN 端指定給交換器」的選項,但這樣一來NAT就沒有作用了,每台電腦都必須透過撥接才能上網,真的沒有兩全的方案嗎?

原來 PPPoE-Relay 功能預設是在付費的 DD-WRT 韌體才有,但有人提出變通方案:利用姊妹品 OpenWRT 的套件 rp-pppoe-relay 來達成。簡單來說在AP啟動時執行這個小程式就可以達成這項任務,但是這個小程式要放在AP裡面很困難,因為AP裡面沒有很便利的讀寫區,有的只是燒錄的ROM跟RAMDISK,前者無法寫入後者重開機就消失了。如果有開啟額外 Flash 空間建立 JFFS2 的話就可以拿它來用,或者也可以靠外部 USB 來達成。

1. 先取得 pppoe-relay 檔案 URL 位置。參考DD-WRT PPPoE Passthrough (on WRT54G)這篇我們可以知道 OpenWRT 網站有 pppoe-relay 檔案可以下載 (這裡)。複製URL位置備用。

2. telnet 192.168.1.1
登入AP,帳號固定是root,密碼看你的設定。

3. cd /tmp
切換到RAMDISK下,我們要做些解壓的動作。

4. wget (剛才那個套件的網址)
可以下載到套件包。

5. tar -xzf rp-pppoe-relay_3.10-1_mipsel.ipk
解壓套件。

6. tar -xzf data.tar.gz
再解一層。

7. cp usr/sbin/pppoe-relay /jffs
複製檔案到 JFFS 下,如果你剛才有開啟JFFS2或是擴充USB隨身碟並掛到/jffs下應該會有空間可放

8. 到網頁介面的系統管理→指令新增一行
sleep 10 && /jffs/pppoe-relay -S vlan1 -C br0


並儲存啟動指令,這樣啟動時就會執行這個小程式。

至此全部的設定大功告成,還有很多地方沒有提到如 VPN 的就請自行摸索囉,我也是才剛會而已。