almost 4 years ago

想要做 SDN 研究,又沒有SDN機器的時候該怎麼辦呢?
自己弄一台啊,不然怎麼辦XD? 找一台路由器,刷機!
(刷機有風險的啊! 有變磚頭的風險,而且刷完就不保固了)
可是我弄不出來啊!所以只好在網路上找各種資源了QAQ
找到蠻多資料是用 TL-WR1043ND 刷 OpenWRT 和 Openflow
所以我也用這台來試試看囉。


我的步驟:

1. 選一台可以刷OpenWRT的無線路由器 (這裡我選 TL-WR1043ND v2.1)
2. 尋找刷入OpenWRT的方式 (這裡我選Web UI)
3. 製作含Openflow的OpenWRT 映像檔
4. 透過 web UI 刷入 OpenWRT

一、什麼是 OpenWRT (按我可搜尋)

是一個 linux kernel 的 OS。
檔案小,適合裝載記憶體容量有限制的裝置上,如路由器。
有兩種控制方式:
    - Command line (用指令)
    - Web UI (網頁介面)

   

二、選擇可以刷 OpenWRT 的機器 (按我查看有哪些裝置)

從連結裡面可以看到有很多裝置支援 OpenWRT,可以查詢到我們要用型號的詳細資料如下圖

如果你只是想要刷 OpenWRT 進去的話,找到你的型號直接下載 OpenWRT進行安裝
第一次裝 OpenWRT 的話,下載 Factory
已經是 OpenWRT 要進行更新的話,下載 sysupgrade

   

三、刷入OpenWRT的方式

根據 从零开始学习OpenWrt:刷機 + 使用 + 編譯教程

路由器有三種方法可以更新任體:

  1. Web上傳更新 (進入網頁管理界面-韌體升級)
  2. tFTP上傳更新 (把自己的電腦設置成為tFTP服務器)
    • TFTP(Trivial File Transfer Protocol)小型文件傳輸協議非常簡單,通過少量存儲器就能輕鬆實現——這在當時是很重要的考慮因素。
  3. TTL寫入 (實體線路 + 拆機,網路上一些資料會用TTL解磚)

三種方式的示意圖(網路上抓取)

既然有 TL-WR1043ND v2.1 的 OpenWRT 的檔案可以抓
TL-WR1043ND v2.1 又有 Web 介面可更新韌體
那我檔案放進去更新就好啦!事情難道有笨人所想這麼簡單嗎?
疑疑?那網路上怎麼其他人教學刷 SDN路由器,需要架 Ubuntu ,還要下一堆指令?
原來:若要刷包含 Openflow 的 OpenWRT ,要自己做檔案啦!
好吧。如果有別人提供符合你型號的oenpflow OpenWRT檔案給你裝,也可以拉。

 

四、製作含 Openflow 的 OpenWRT 映像檔

參考資料:Vishal Shahane's blog : Compiling custom firmware for wireless router with OpenWRT and OpenFlow

環境:Ubuntu 14.04 64bits with 20 GB HD and 512MB RAM on VMWare (on i7 Win7 64bits)

  1. 安裝編譯 OpenWRT 所需的套件

    sudo apt-get update
    
    sudo apt-get install autoconf binutils bison build-essential ccache flex gawk gettext git libncurses5-dev libssl-dev ncurses-term quilt sharutils subversion texinfo xsltproc zlib1g-dev 
    
  2. 創一個資料夾,抓 OpenWRT 下來

    mkdir ~/openwrt
    
    cd ~/openwrt
    
    svn co svn://svn.openwrt.org/openwrt/trunk/
    
  3. 更新和安裝 feeds

    cd ~/openwrt/trunk
    ./scripts/feeds update -a
    ./scripts/feeds install -a
    ./scripts/feeds install -a luci
    
  4. 下載 Openflow 的 source code 到 OpenWRT 內進行編譯
    (我自己是只有下載 openflow 1.3,沒有載openflow 1.0)

    OpenFlow 1.0

    git clone git://gitosis.stanford.edu/openflow-openwrt
    cd openflow-openwrt
    git checkout -b openflow-1.0/tplink origin/openflow-1.0/tplink
    cd ~/openwrt/trunk/package/
    ln -s ~/openwrt/openflow-openwrt/openflow-1.0/
    cd ~/openwrt/trunk/
    ln -s ~/openwrt/openflow-openwrt/openflow-1.0/files
    

    OpenFlow 1.3

    git clone https://github.com/CPqD/openflow-openwrt.git
    cd ~/openwrt/trunk/package/
    ln -s ~/openwrt/openflow-openwrt/openflow-1.3/
    cd ~/openwrt/trunk/
    ln -s ~/openwrt/openflow-openwrt/openflow-1.3/files
    
  5. 做一些設定

    cd ~/openwrt/trunk
    make menuconfig
    
    1. 選 'Target System' 底下的 'Atheros AR71xxx/Ar9xxx'
    2. 選 'Target Profile' 底下的 'TP-LINK TL-WR1043ND'
    3. 選 < * >  'Network' 底下的 'openflow' package
    4. 選 < * >  'Network' 底下的 'tc' package  (我找不到 tc)
    5. 選 < * >  'Kernel Modules' -> 'network support' -> 'kmod-tun'

      如果找不到TC就安裝下面的 (我有裝這兩個):
      選 < * >  Kernel Modules -> network support' -> 'kmod-sched-core' 和 'kmod-sched' under '
  6. 建整個檔案, 這裡需要一些時間讓他跑

    cd ~/openwrt/trunk
    make V=s
    
  7. 建完檔案可以在這裡看到檔案

    cd ~/openwrt/trunk/bin/ar71xx/
    
     

五、OpenWRT刷入的步驟:

1.先裝好實體(把三根天線插上去XD),把可對外網路連到藍孔(Internet)上,用來刷機的電腦連到黃孔(Ehernet)。

2.打開網頁192.168.0.1 (機器預設密碼是admin/admin)
(1) 點選快速安裝並依照安裝指南進行設定,設定完畢實際連線看看,確認機器連線無問題。


(2) 系統工具 → 韌體升級,選擇 build 出來的 "openwrt-ar71xx-generic-tl-wr1043nd-v2-squashfs-factory.bin" 大方地給他升級下去!(這時候不能停電什麼的,要讓他跑完,不然會失敗!)

(3) 更新完重開機會跳出這個畫面,不要緊張!不是壞了,是 OpenWRT 預設的是 192.168.1.1

3.在瀏覽器上面輸入 198.168.1.1(第一次登入:帳號是 root,不用輸入密碼)

4.登入後第一件事情,先改密碼!(二擇一

(1)利用瀏覽器頁面改密碼:
點選上面 Go to password configuration


進去此頁面更改密碼,改完拉到最下面按 Save。

(2) 利用 Termianl改密碼:
除了瀏覽器頁面外,也可以利用 Command line 的方式改密碼(若是你沒有安裝luci就用這種)

telnet 192.168.1.1
passwd root

注意!!設定完密碼之後,就只能用 ssh 登入,不能用 telnet 。

要利用Putty登入

5.更新韌體,還記得我們 build 出來的 OpenWRT 有兩個嗎?

In Ubuntu(build openWRT的那台)把 sysupgrade 資料傳到路由器

cd ~/openwrt/trunk/bin/ar71xx/
sudo scp openwrt-ar71xx-generic-tl-wr1043nd-v2-squashfs-sysupgrade.bin root@192.168.1.1:/tmp

------------------------------------------------以下有遇到才用------------------------------------------------
如果在 scp 遇到 Warning,請打下面那行指令把 ssh 刪掉

sudo rm /root/.ssh/known_hosts

------------------------------------------------以上有遇到才用------------------------------------------------

In 192.168.1.1

cd /tmp
sysupgrade -v openwrt-ar71xx-generic-tl-wr1043nd-v2-squashfs-sysupgrade.bin

更新不會很久,不過他更新完會停在這個畫面,再重開一個終端機,就可以把卡住的這個關掉哩。

6.安裝 TC,因為在 build openWRT 的時候沒看到 TC,但 openflow package 必須要有 TC(國外部落格這樣寫@@,但實際上沒 TC 會發生什麼問題我不知道)。
In Ubuntu

sudo wget http://chef.mesh.altermundi.net/downloads/r37619/ar71xx/packages/ tc_3.11.0-1_ar71xx.ipk
sudo scp /home/user/tc_3.11.0-1_ar71xx.ipk root@192.168.1.1:/tmp

In 192.168.1.1

opkg install ./tc_3.11.0-1_ar71xx.ipk
cd /sbin
ln -s /usr/sbin/tc
cd /etc
ln -s /lib/functions.sh

7.重開及檢查

reboot

重開機後 Putty會不動,關掉再重開一個。

ps | grep of

會看到 ofprotocol,代表 openflow 有運作!

Logdown Blog 寫文章的程式語言是 Markdown →