We’ve already shown you how to mod your home router with the DD-WRT alternative firmware for greatly improved performance, and today we’re going to show you how to take it even further with the DD-WRT Mod-Kit.
如果您還沒有,請務必檢視本系列的前兩篇文章:
假設你熟悉這些主題,繼續閱讀。請記住,這本指南是一個多一點技術,初學者應該小心時,修改他們的路由器。
本指南將提供如何使用“韌體修改工具包”建立您自己的DD-WRT韌體(包括修改和新增的韌體)的詳細說明。
韌體修改工具包使人們能夠在不從原始碼處編譯韌體的情況下對韌體進行修改。在提供的指令碼的幫助下,透過這種方式進行更改,只需下載、替換和刪除一些檔案。
使用這種方法的最主要原因是因為最近DD-WRT對Openwrt IPKG包的支援已經轉向具有硬碟驅動器(透過USB)的路由器,這使得mod kit成為在HD不可用的情況下成功安裝IPKG包的唯一一致的工作方式。此外,這種方法還有一個額外的優點,那就是免除了JFFS對包安裝的依賴性,對於只有4MB快閃記憶體的路由器來說,這是一個真正的問題。
公共能源圖片
雖然DD-WRT的wiki和開發人員的網站上詳細介紹了此過程的說明,但我們的目標是使此指南成為一個複製和貼上過程,任何人都可以使用此過程來實現以下目標:
一旦您遵循了這個過程,它應該是相對簡單的調整它為其他軟體包安裝。
Warning: Tread lightly… keep in mind that incorrect usage of the modification kit, can leave you with a router that needs de-brick-ing (as in turn it into a useless brick). However if you’re a true geek you probably subscribe to the ideology that, he who can destroy a thing, controls a thing, and only true geeks do that
安裝所需的程式包
韌體修改工具包對它的編譯和工作有一些依賴性。為了一次安裝/更新它們,請在終端中發出以下命令:
sudo aptitude install gcc g++ binutils patch bzip2 flex bison make gettext unzip zlib1g-dev libc6 subversion
下載mod kit
建立一個子資料夾,並從官方SVN獲取工具包:
mkdir firmware_mod_kit cd firmware_mod_kit svn checkout http://firmware-mod-kit.googlecode.com/svn/trunk/ firmware-mod-kit-read-only cd firmware-mod-kit-read-only/trunk/
下載要使用的韌體
首先要考慮的是要使用哪個版本?經驗法則是:當有疑問時使用“mini”。這是因為只要你的路由器至少支援“迷你”版本,使用它就可以在沒有任何臃腫軟體的情況下為你提供所有最常用的功能。因此,在大多數情況下,既為程式留有空間,也為其他用途留有一些JFFS空間。
一旦你決定了一個版本,建議使用最新版本的韌體,因為他們往往有很多錯誤修復相比,他們的“穩定”副本。在本文撰寫的最新版本是“03-17-11-r16454”,此版本用於後面的命令中。
wget http://www.dd-wrt.com/dd-wrtv2/downloads/others/eko/BrainSlayer-V24-preSP2/2011/03-17-11-r16454/broadcom/dd-wrt.v24_mini_generic.bin
為了更容易跟蹤我們使用的版本,請重新命名下載的檔案以表示其版本號:
mv dd-wrt.v24_mini_generic.bin dd-wrt.v24_mini_generic-03-17-11-r16454.bin
這當然是可選的,但是下面的命令假定您已經重新命名了檔案。
正在提取韌體
為了能夠更改韌體中的檔案,我們需要將其內容提取到一個臨時檔案中目錄此命令的語法為:./extract_韌體.sh韌體\映像工作\目錄在本例中,這將轉換為:
./extract_firmware.sh dd-wrt.v24_mini_generic-03-17-11-r16454.bin ./working_dir_mini1
注意:第一次執行此命令時,它會在系統上構建mod kit工具。這種情況只發生一次,可能需要一段時間…所以要耐心…
現在韌體已經解壓,我們可以將包安裝到它。在裡面一般來說,該過程是以ipk檔案的形式從openWRT儲存庫下載包及其依賴項。下載後,使用提供的指令碼將它們安裝到提取的韌體中。
關於如何配置和使用Knockd的詳細說明將在以後的文章中詳細介紹,因此您可以選擇現在跳過這一步,或者為將來做準備,因為Knockd不會佔用很多空間。
Knockd是一個守護程序,它在連結層偵聽通訊事件,然後對其執行操作他們。什麼這意味著,您可以讓執行守護程式的裝置甚至不“監聽”埠(埠掃描不會將它們視為開啟的),並且仍然讓它執行您需要的操作,從單個命令一直到完整的指令碼。使用這種技術,您可以觸發伺服器執行任何型別的操作,您需要它遠端(透過網際網路),而不暴露您的家庭網路。
Knockd只有一個列出的依賴項,因此透過發出以下命令下載包及其依賴項:
wget http://downloads.openwrt.org/backports/rc5/knockd_0.5-1_mipsel.ipk wget http://downloads.openwrt.org/whiterussian/packages/libpcap_0.9.4-1_mipsel.ipk
將“knock daemon”(knockd)ipk安裝到韌體中:
./ipkg_install.sh knockd_0.5-1_mipsel.ipk ./working_dir_mini1/
將“資料包捕獲”(libpcap)ipk安裝到韌體中:
./ipkg_install.sh libpcap_0.9.4-1_mipsel.ipk ./working_dir_mini1/
由於“knockd”可以透過一個備用配置檔案呼叫(如何在以後的文章中解釋),因此不需要執行任何其他操作,如果您只想安裝它,您可以跳到韌體構建部分。
SSMTP包使您的路由器能夠傳送電子郵件訊息,就像我們在如何使用Gmail或SMTP在Linux上為伺服器設定電子郵件警報中所展示的那樣。當時我們向您保證,我們將展示如何為DD-WRT配置此功能,現在我們將演示交付。這個如果您要在路由器上建立指令碼,並且希望透過電子郵件接收有關其操作的反饋,則此功能非常有用。
由於嵌入式系統的限制,這個軟體包的設定比普通Linux系統要複雜一些,所以深呼吸…準備好了嗎?…. 我們走吧……:)
下載軟體包:
wget http://downloads.openwrt.org/backports/rc5/s**tp_2.61-1_mipsel.ipk
將“s**tp”ipk安裝到韌體中:
./ipkg_install.sh s**tp_2.61-1_mipsel.ipk ./working_dir_mini1/
TLS支援(可選)SSMTP不將任何其他包列為其依賴項,但是如果您希望能夠使用需要TLS身份驗證的**tp閘道器(即Gmail),您必須安裝openSSL包好吧。注意:這樣做有一個巨大的缺點,就是在路由器上大大減少了JFF的空間。也就是說,openSSL包從4MB的總空間(對於一個普通的非“mega”支援路由器)中佔用了大約500K的空間,再加上JFFS的開銷,您會發現您的左邊有一塊非常寶貴的免費JFFS空間(WRT54GL上大約60KB)。
由於仍有非TLS需要**tp伺服器(通常是您的ISP的),我建議您花一分鐘時間考慮是否真的需要使用TLS需要閘道器。
如果您決定啟用TLS支援,儘管它有缺點,請下載openSSL包:
wget http://downloads.openwrt.org/whiterussian/packages/libopenssl_0.9.8d-1_mipsel.ipk
將“openSSL”(libopenssl)ipk安裝到韌體中:
./ipkg_install.sh libopenssl_0.9.8d-1_mipsel.ipk ./working_dir_mini1/
配置SSMTP包有一個限制,即不能用備用配置呼叫它檔案。因為韌體在路由器上時是隻讀的,這意味著開箱即用,我們只能將配置硬編碼到韌體。但是, 如果我們不想經歷所有的韌體修改步驟,只是為了更改電子郵件設定,該怎麼辦?(例如密碼更改)。
為此,Jeremy(韌體mod kit的建立者)和我自己都得出了這樣的結論(如果我可以謙虛地補充一句的話,那就是獨立地),唯一明智的方法是:
要做到這一點,還需要一些額外的步驟…
符號連結s**tp配置目錄如上所述,我們需要在路由器上設定/etc/s**tp位置,指向/tmp目錄作為執行時路由器上唯一可寫的位置。為此,請刪除ipk安裝程式建立的s**tp目錄:
rm -rf ./working_dir_mini1/rootfs/etc/s**tp/
建立指向路由器根檔案系統上的/etc/s**tp的新符號連結,以指向/tmp/etc/s**tp作為絕對路徑:
ln -s /tmp/etc/s**tp/ ./working_dir_mini1/rootfs/etc/s**tp
注意:儘管這現在看起來不合邏輯,因為我們將包的配置目錄指向韌體修改工具包工作目錄之外的位置,但我向您保證,從執行時路由器的角度來看,這看起來完全正常。
一個初始化指令碼雖然完全可以不將這個指令碼注入韌體並在以後作為啟動指令碼執行,但我覺得把它放在這裡是合適的,如果只是作為將來的一個示例的話使用。最初傑里米後來根據某人的要求**了劇本,我對其進行了調整和擴充,使其與DD-WRT和syslog報告更加相容。
建立新的初始化(啟動)指令碼:
vi ./working_dir_mini1/rootfs/etc/init.d/S80s**tp
注意:您可以使用另一個編輯器,我使用vi是因為它與路由器上的可用內容一致…請將此作為其內容:
#!/bin/sh # # title: s**tp_nvram.sh # author: Jeremy Collake and Aviad Raviv # site: http://www.bitsum.com, http://tl80.cn # # script to build config file from nvram vars. # will work for any config file that uses # var=value type pairs. # # uses prefixes for nvram variables. # # i.e. # s**tp_hostname=something # translates to s**tp.conf # hostname=something # logger_func() { logger -s -p local0.notice -t SSMTP_init $1 }
logger_func "###########Started the SSMTP init run###########" logger_func "Creating the etc directory in /tmp" [ ! -d /etc/s**tp/ ] && mkdir -p /tmp/etc/s**tp/ CONFIG_FILE=/etc/s**tp/s**tp.conf NVRAM_PREFIX=s**tp_ PACKAGE_NAME=`echo $NVRAM_PREFIX | sed 's/_/ /'`
logger_func "Generating $CONFIG_FILE for package $PACKAGE_NAME" #echo $0: generating $CONFIG_FILE for package $PACKAGE_NAME echo "#!/bin/sh" > $CONFIG_FILE echo "#" >> $CONFIG_FILE echo "# auto generated based on nvram by $0" >> $CONFIG_FILE echo "#" >> $CONFIG_FILE
if [ -z "`nvram show | grep s**tp`" ] then logger_func "It appears that you have not set the NVRAM variables required to generate the conf file" logger_func "**C***ider** using these commands in you startup script:" logger_func "nvram set s**[email protected]" logger_func "nvram set s**tp_mailhub=**tp.gmail.com:587" logger_func "nvram set s**[email protected]" logger_func "nvram set s**tp_UseSTARTTLS=YES" logger_func "nvram set s**tp_AuthUser=username" logger_func "nvram set s**tp_AuthPass=password" logger_func "nvram set s**tp_FromLineOverride=YES" logger_func "create the NVRAM variables and re-run the init script or reboot for the settings to take affect." exit 0 fi
########################################################### # # main loop # SED_COMMAND="s/$NVRAM_PREFIX/ /" CONFIG_VARS=`nvram show | grep $NVRAM_PREFIX | sed "$SED_COMMAND"` for i in $CONFIG_VARS; do echo $i >> $CONFIG_FILE done
########################################################### # # sanity check # if [ ! -f "$CONFIG_FILE" ]; then # echo "$0: ERROR - could not create $CONFIG_FILE. Perhaps there is no symink /etc/XXXX -> /tmp/etc/XXXX ?" logger_func "ERROR - could not create $CONFIG_FILE. Perhaps there is no symink /etc/XXXX -> /tmp/etc/XXXX ?" fi logger_func "###########Finished the SSMTP init run###########"
使其可執行:
chmod +x ./working_dir_mini1/rootfs/etc/init.d/S80s**tp
注意指令碼中的NVRAM等待變數,在路由器上安裝了修改後的韌體後,我們有責任給它們一些可以使用的東西。
現在一切都準備好了,是時候把修改過的韌體重新打包成一個壓縮的二進位制檔案了,我們可以把它快閃記憶體到伺服器上路由器“生成.sh“指令碼語法為:./build_韌體.sh輸出目錄工作目錄
為此,我們使用提供的指令碼,因此發出:
./build_firmware.sh output_mini1 ./working_dir_mini1/
一旦“構建”操作完成,將有幾個韌體映像等待在“輸出”目錄中使用。
現在可以重新整理名為“custom\u image\u 00001”的檔案-通用.bin“你的路由器,因為你通常會DD-WRT韌體。
注意:不要忘記在韌體快閃記憶體之前、期間和之後立即恢復到“出廠預設值”。
閃光後步驟
因為我們讓SSMTP包尋找NVRAM變數以生成SSMTP配置檔案,所以現在需要為它提供缺少的資訊。我們將透過使用web GUI的“執行命令”功能來實現這一點。
轉到web GUI->“管理”->“命令”->在文字框中貼上以下內容:
nvram set s**[email protected] nvram set s**tp_mailhub=**tp.gmail.com:587 nvram set s**[email protected] nvram set s**tp_UseSTARTTLS=YES nvram set s**tp_AuthUser=your-gmail-user-name(without the @gmail.com) nvram set s**tp_AuthPass=you-gmail-password nvram set s**tp_FromLineOverride=YES nvram commit
用實際資訊替換等號(=)後的文字,然後點選“執行命令”。注意:如果使用常規的非TLS **tp伺服器,則要使用的埠是25,而不是587。
既然SSMTP資訊已經準備好使用,那麼您將需要呼叫init指令碼。因此,您可以重新啟動路由器,或將其貼上到“命令”文字框中:
/etc/init.d/S80s**tp
然後點選“執行命令”又來了。那個此命令的輸出應如下所示:
測試您是否可以再次傳送電子郵件將此貼上到“命令”文字框中,使用您的電子郵件地址傳送以下命令:
echo "testing crucible emailing 123 qwe" | s**tp -vvv [email protected]
然後點選“執行命令”又來了。因為我們使用-vvv選項來增加詳細性,此命令的輸出應該如下所示:
如果一切順利,你應該在幾秒鐘內收到測試郵件。
我們希望你可以利用這些資訊,推動你的家庭路由器的限制,甚至進一步,你認為可能的,你現在真正控制你的家庭路由器,和DD-WRT…
Linux extends life, Linux expands c***ciousness… Linux is vital for packet travel
...您的需求選擇最佳的VPN服務 選項一:獲取具有vpn功能的路由器 您可以購買一個預構建的VPN解決方案,而不是自己嘗試這樣做。高階家庭路由器通常帶有內建的VPN伺服器,只需尋找一個無線路由器,廣告VPN伺服器的支援。然後,...
...你的頻寬和資料使用的完整影象。你最好的是一個自定義路由器韌體-但有選擇,即使你不想使用其中之一。 監視路由器上的頻寬和資料使用情況 相關:如何在路由器上使用自定義韌體,以及為什麼您可能希望 最準確的監控方...
...僅僅認為透過一個安全的隧道觀看網際網路看起來更好,路由器級別的VPN連線可以解決所有這些問題,然後解決一些問題。 什麼是vpn?我為什麼要這麼做? 有無數的原因,你可能想使用VPN路由你的網際網路流量到一個地方以外...
...埠轉發使得從任何地方訪問這些計算機變得容易。透過在路由器上配置靜態DHCP,您可以將兩者結合起來。 dhcp和埠轉發的問題 DHCP很棒。你把路由器配置成自動分配IP地址,你網路上的計算機就可以正常工作了。埠轉發很有用,...
...一個口吃免費的Skype電話可能比下載一個大檔案更重要。路由器上的服務質量功能可以讓你優先考慮你關心的事情,因此它們比你不關心的事情發生得更快。 服務質量到底是什麼? 服務質量是一個優秀且未充分利用的工具,它...
路由器基本上是小型計算機。預設情況下,它們執行**商提供的作業系統或韌體,以路由網路流量併為您提供各種設定和功能。但是你可以經常更換這個韌體。 大多數人不需要第三方自定義路由器韌體。是的,自定義韌體可以...
...區域網。請繼續閱讀,我們將向您展示如何為雙ssid設定路由器,併為您的客人建立一個單獨的(安全的)訪問點。 我為什麼要這麼做? 想要將家庭網路設定為具有雙接入點(AP)有幾個非常實際的原因。 對於大多數人來說,...
我們已經向您展示瞭如何透過路由器上的“埠敲門”遠端觸發WOL。在本文中,我們將展示如何使用它來保護VPN服務。 Aviad Raviv&bfick提供的圖片。 前言 如果您使用過DD-WRT的VPN內建功能,或者在您的網路中有另一個VPN伺服...
你有沒有想過用你的路由器來“敲宿舍門”這樣一種特殊的方式,只在你的路由器被發現的時候才“開門”呢?howtogeek解釋瞭如何在DD-WRT上安裝敲打守護程序。 Bfick和Aviad Raviv的圖片 如果您還沒有,請確定並檢視本系列中以前...