Skip to main content

· 4 min read

//2/22/2005 //8/6/2004

1. 概述

1.1\. 版權,許可與其它
1.2\. 歸類
1.3\. 版本, 歷史和待辦事項
1.4\. 翻譯
1.5\. 技術
1.6\. 序
1.7\. 使用詞彙與縮寫
1.8\. 了解這個 HOWTO 的必需條件

2. 基礎

2.1\. 什麼是 IPv6?
2.2\. IPv6 在 Linux 作業系統上的歷史
2.3\. IPv6 的位址格式的形式 ?
2.4\. FAQ 問與答(基礎)

3. 位址格式

3.1\. 沒有特殊前綴的位址
3.2\. 位址前綴
3.3\. 位址格式 (主機部份)
3.4\. 用作路由的位址前綴長度

4. IPv6 - 支援 (ready) 系統確認

4.1\. IPv6-支援 kernel
4.2\. IPv6-支援 網路設定工具
4.3\. IPv6-支援 測試/調試 程式
4.4\. IPv6-支援 程式
4.5\. IPv6-支援 客戶端程式 (selection)
4.6\. IPv6-支援 伺服器端程式
4.7\. FAQ 問與答 (IPv6-支援 系統確認)

5. 設定界面

5.1\. 不同的網路設備
5.2\. 啟動與關閉界面

6. 設定 IPv6 位址

6.1\. 顯示目前的 IPv6 位址
6.2\. 新增 IPv6 位址
6.3\. 移除 IPv6 位址

7. 設定正常 IPv6 路由

7.1\. 顯示目前的 IPv6 路由
7.2\. 新增 IPv6 通過閘道器的路由
7.3\. 移除 IPv6 通過閘道器的路由
7.4\. 新增 IPv6 通過介面的路由
7.5\. 移除 IPv6 通過介面的路由
7.6\. IPv6 路由FAQ

8. 芳鄰搜尋

8.1\. 使用 "ip" 指令顯示芳鄰
8.2\. 使用 "ip" 指令處理芳鄰列表

9. 設定 IPv6-in-IPv4 通道

9.1\. 通道的類型
9.2\. 顯示目前通道
9.3\. 設定點對點的通道
9.4\. 設定 6to4 通道

10. 設定 IPv4-in-IPv6 通道 11. 在 /proc-filesystem 的內核設定

11.1\. 如何存取 /proc-filesystem
11.2\. /proc/sys/net/ipv6/ 中的數值類型.
11.3\. /proc/sys/net/ipv4/ 中 IPv6 相關的數值類型
11.4\. /proc/net/ 中 IPv6 相關的數值類型

12. Netlink-Interface to kernel 13. 網路調試

13.1\. 伺服器接口(socket) 繫結
13.2\. tcpdump 封包傾印範例

14. 在不同的發行版中設定 IPv6

14.1\. Red Hat Linux and "clones"
14.2\. SuSE Linux
14.3\. Debian Linux

15. 自動設定與移動性

15.1\. 無狀態自動設定
15.2\. 使用Router Advertisement Daemon (radvd)達成有狀態自動設定
15.3\. 動態主機設定協定 v6 (DHCPv6)
15.4\. 移動性

16. 防火牆

16.1\. 使用 netfilter6 防火牆
16.2\. 準備
16.3\. 使用方法

17. 安全性

17.1\. 節點安全性
17.2\. 存取限制
17.3\. IPv6 安全性驗證

18. 加密與認證 18.1. 使用加密與認證的模式 18.2. 核心支援 (ESP 與 AH) 18.3. 自動金鑰交換 (IKE) 18.4. 額外訊息

19. 服務品質 (QoS) 20. Hints for IPv6-enabled daemons

20.1\. Berkeley Internet Name Daemon BIND (named)
20.2\. Internet super daemon (xinetd)
20.3\. Webserver Apache2 (httpd2)
20.4\. Router Advertisement Daemon (radvd)
20.5\. tcp_wrapper

21. 程式設計 (使用 API) 22. Interoperability 23. 更多資訊與網址

23.1\. 書籍, 文章, 線上評論 (mixed)
23.2\. Conferences, Meetings, Summits
23.3\. 線上資訊
23.4\. IPv6 基礎架構
23.5\. Maillists
23.6\. 線上工具
23.7\. Trainings, Seminars
23.8\. 'The Online Discovery' ...

24. Revision history / Credits / The End

24.1\. Revision history
24.2\. Credits
24.3\. 結語

· 2 min read

用來與 OMNET++ IPv6Suite 模組 作對照的模擬工具是 NS2 上的 Mobiwan2 模組. 這是目前最多人使用的模擬模組. 除了基礎對照系統架設之外, 還將根據之前學長在 NS2.1b1 上使用 Mobiwan 的程式, 改寫成 for NS2.27 的 Mobiwan2 版本. 以順便了解其架構,並利用其優點在 INET6 porting 上

剛開始照著 NS2 (Network Simulator) 教學手冊 的 安裝篇 裝, 成功後再裝 Mobiwan2 卻遇到問題.

解決方法是在執行 NS2-AllinOne 安裝前先照著 Mobiwan2 網站上的指令 patch 好,

# cd <your>ns-allinone-2.27/ns-2.27
# zcat <patchfile.gz></patchfile.gz></your>patchfile.gz<your><patchfile.gz> |patch -p1</patchfile.gz></your>

然後再執行 NS2 安裝

./install

要是已經把 NS2 裝好了怎麼辦?還能怎麼辦,我只會一個笨方法...... 先把之前裝的整個目錄砍掉後,再裝一次吧...Orz.

在 Cygwin 上測試的方法:命令列中輸入 startxwin.bat。會產生一個新的視窗,在此命令視窗中輸入

$ cd your path to ns-2.27
$ ./ns simple-mipv6.tcl

若要在 Fedora Core 3 上安裝,因為 gcc 版本太新 (3.34) 的關係,笨笨的 NS2 不懂得支援, 去下載 http://www.ececs.uc.edu/~cdmc/ucbt/src/ns227-gcc34.patch 這個好心人寫的修正檔, 丟到 ns-allinone-2.27 目錄下,打入

#patch -p0 -p0 < ns227-gcc34.patch

修正後再來裝就可以了.

· 3 min read

這系列文章僅記錄過程,目的是從紀錄中看到自己對的 ipv6 了解,對做事方法的改進. 不總結經驗。因為一但總結經驗就會陷入長段撰寫文件的誤區。而且在現在階段,甚至不能確定此專案能否成功。希望我能有寫出總結經驗文章來的一天吧:)

1st. Part: 第一步先從 ICMPv6 開始著手 Porting. 在熟悉 INET 目錄規劃後,首先是根據 INET 目錄規則來建立 INET 專案所應用到的目錄, 剛開始在 Network 目錄下先建立 IPv6 與 IPv6d 兩個目錄。並在 Nodes 目錄下建立 INET6 目錄.

從 IETF RFC 列表 中挖出了 RFC 2463, Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification, 依此為憑開始 porting.

編輯 Network/IPv6/ICMPv6.ned 參照 IPv6Suite, 從 IPv6Suite/IP/IPv6/Generic 目錄下的 ICMPv6.ned. 觀察它的 ICMPv6 模組組成. 發現該模組與 INET 的 ICMP.ned 大不相同,是由 IPv6Core, Neighbourdiscovery, ICMPv6Combine, 還有 MLD (multicast) 模組組成的複合模組. MLD 模組在剛開始 porting 時可以忽略暫時不處理。剩下的三塊中... 應不應分拆成三個檔案三個 simplemodule? , 是否要使用到 ICMPv6Combine 這塊呢?我馬上陷入了第一個難題中.

2nd. Part: 告解式除錯 (Confessional Debug): 為何不先弄好 IP header 呢?這絕對是問題. 還好意識到這件事情的時間點還算早。更堅定了我 "只有邊寫邊紀錄才能意識到自己的錯誤" 的想法,因此接下來應先搜尋 IP header 定義的部分,從這裡開始作修改.

暫時將 DualStack 放到一邊,完成純 IPv6 Support 的模組後再考慮 DualStack. 但一定會將之排入計畫裡. 因為雖然 DualStack 對我的論文模擬來說重要性不大, 但在實際工作上將會遇到. porting 過一遍心裡會先有點底,相信多少有些助益.

· 3 min read

3rd. Part:

再次瀏覽 INET 目錄,評估應該增修的檔案: 初步規劃大致如下:

  • Network/IPv6 //.ned, .msg 資源檔,IP6 實作
  • Network/IPv6d //IP6 分模組實作
  • Network/Autorouting/FlatNetworkConfigurator6.ned // 模擬用位址自動設定
  • Nodes/INET6 // 組合模組成為節點
  • Applications/PingApp6

這時又發現了 INET 的一個好處:模組所包含的目錄大致與 TCP/IP 架構分層符合, 對熟悉網路的我來說,很容易找到應該增修檔案的位址.

順便規劃 DualStack, 但暫時不做,原因如 Day1 2nd. Part:

  • Network/DualStack
  • Network/Autorouting/FlatNetworkConfiguratorDS.ned
  • Nodes/DualStack 應用層不必修改.

做 DualStack 的話還會另外引入 6to4 等 transition/tunnel 模組, 工作量會遠遠比目前列出的 DualStack 所需修改內容多上許多, 且現在自己還不具備白手疊床架屋的能力. 因此先弄好 IPv6 部分的 porting 才是最重要的.

昨天思考 ICMPv6 3 個模組部分,決定分拆成多個 simplemodule, 在 NetworkLayer6 裡再進行合作.

4th. Part: 編輯 Network/IPv6/IPv6.ned:

IPControlInfo: When IPv6 sends up a packet to a higher layer protocol, it will also attach an IP6ControlInfo to the packet, with the source and destination IPv6 address

  • 與上層溝通的訊息,若名稱不改的話。以後做 DualStack 從上層傳下來的封包會否出問題?

  • 另外弄個小 script 來判斷位址長度是否比改名造成的後果來的容易? When delivering packets to higher-layer protocols, the output gate is determined from the Protocol field in the IPv6 header. The protocol-to-gateindex mapping must be given in the protocolMapping string parameter

  • protocolMapping 應該被 NextHeader 或延伸標頭分析取代 routing table 儲存在 RoutingTable6 模組裡. if the route entry contained a next hop address, it will be passed to the interface in the attached IPRoutingDecision.

· 7 min read

//1.1.1 03/06/05 Doc is Included in INET6 Project //1.1 01/05/05 //1.0 12/31/04 //0.9 12/28/04 //0.5 12/26/04 init

Install and Using OMNET++ on Windows 對開發者來說,儘管在 Linux 環境下編譯 OMNET++ 模擬套件也是個好選擇, 但是也有不少人希望能在 Windows 環境下順利利用 OMNET++ 編譯模擬套件. 而目前相關文件仍然極少. 本文總結了作者如何在 Windows 環境下利用 Microsoft Visual C++ 6 (MSVC6) 編譯 OMNET++ 模擬套件的經驗

1. 安裝 MSVC6 & MSVC Service Pack 6 安裝 MSVC6 時 "註冊變數" 選項一定要勾選

2. 設定 打開選單 -> 工具 (Tools) -> 自訂 (Customize) 點選 Add-ins and Macro files 分頁標籤 (Tab) , 看到 omnetpp 選項,將之勾選

回到命令 (Commands) 分頁標籤 (Tab), 分頁左上角的分類 (Category) 選單會多出巨集 (Macros) 選項. 選擇巨集 (Macros) 選項,看到 addNEDfileToProject 巨集, 點選 addNEDfileToProject 巨集, 使用鼠標將巨集拖曳到工具列上, 選擇合適的位置,圖示後按確定.

在完成上兩步之後,我們已經將 VC 環境設定完成, 可以準備開始在 VC 上建立新的 OMNET++ 專案, 或是匯入原本不是在 Windows 環境下執行的專案

3. VC 中建立新專案 若要從頭開始建立新的模擬套件, 可以先在 Windows 檔案管理員中任意地點建立放置新專案的資料夾, 再從 OMNET++ 安裝目錄 /sample 中複製 .dsw, .dsp 專案檔到新專案的資料夾中.

複製範例專案檔的目的是因為範例專案檔已經將 OMNET++ 編譯所需的編譯器, 連結旗標,Tkenv/Cmdenv 參數等都設定好了,讓我們不需再重新設定.

點擊 .dsw 檔進入 VC 編輯畫面. 將檔案檢視 (File View) 中的檔案名稱清空後,即可開始編輯新的專案

4. VC 中匯入專案 有時我們會想使用別人在 OMNET++ 中已完成的模擬套件或成果, 而對方使用的平台並非 Windows, 此時我們可以用類似前一步驟的方式為這個模擬套件加入新的 VC 專案檔. 從 omnet 安裝目錄 /sample 中複製 .dsw, .dsp 專案檔到原來模擬套件的資料夾中. 點擊 .dsw 檔進入 VC 編輯畫面. 將 File View 中的檔案名稱清空後,即可開始編輯新的專案

5. VC 中編輯專案 在 IDE 環境下依照一般 VC 中編輯專案的方式增刪編輯檔案. 但要將其他平台上的 c++ 檔案拿來用時,注意檔案副檔名不能使用 .cc, 副檔名都要先改成 .cpp 後在 VC 下才能正常編譯 (這點好像不一定,至少在 INET 模組裡就不必改)

當遇到設計好 .ned 檔要加入 VC 時, 先點選工具列上新增的 addNEDfileToProject 巨集圖示, 輸入該 .ned 檔檔名 (包含副檔名), 之後 addNEDfileToProject 巨集會幫忙生成 .ned 對應的 cpp 檔.

詳細設定可參考 OMNeT++ 安裝目錄下 doc/Readme-MSVC.txt

6, VC 中編譯專案 首先打開命令列,準備開始編譯的動作. 命令列開啟流程為按作業系統左下角的 "開始", 在選單中選擇 "執行", 其後將跳出輸入視窗,在視窗中鍵入 cmd (或 Terminal) 按下確定後即彈出類似 Dos 視窗. 接著用一般 Dos 指令切換到專案目錄下準備開始編譯,鍵入 opp_nmakemake 這動作會根據目錄中的來源檔案生成 Makefile.vc 檔案

接著使用下面指令來生成模擬: nmake -f Makefile.vc 做完以上部驟之後就可以照一般 VC 編譯方式編譯啦:)

7, 重新編譯專案 之前已編譯過時資料夾中會存有舊的 Makefile.vc 檔案,可鍵入 opp_nmakemake -f 來強制覆寫 Makefile.vc .

在編譯前要清除過時連結資料,可以在命令列中輸入 nmake Makefile.vc clean 也可以在 VC 中使用 選單 / Build/Clean 選項將過時連結資料清除

8. 選擇 Tkenv 視窗模式模擬 在預設的情況下,使用 OMNET++ 編譯出來的檔案將是在 cmdenv 命令列環境下執行. 為了更容易檢視模擬結果, 我們可以透過以下方法將模擬切換到在 TKenv 環境下執行:

選單 / Build/Set Active Project Configuration 從四個選項中選取 xx- win32 Release Tkenv

參考資料: 1. OMNeT++ and MF build instructions for Windows 2. OMNeT/doc/Readme-MSVC.txt

refer: Make sure you enter these settings for all configurations (In the Project|Settings dialog, select 'All configurations' from the combo in the top-left corner.)

  • include path: You must tell MSVC the location of omnetpp.h and other header files. Add c:\omnetpp-2.3\include to the include path in Project|Settings --> 'C/C++' tab --> 'Preprocessor' category --> Additional include directories.
  • library path: MSVC needs to know where to find sim_std.lib, envir.lib and other libraries. Add omnetpp/lib to the linker path in Project|Settings --> 'Link' tab --> 'Input' category --> Additional library path.
  • nedc: It's advisable to put OMNeT++'s bin directory into the PATH so that MSVC will find the NED compiler. (An alternative is to enter explicit nedc path for each NED file's Custom build step, but that's much more cumbersome.)

Add the .ned files to the project and set custom build option for them: Description: NED Compiling $(InputPath) Command: nedc -s _n.cpp $(InputPath) Outputs: $(InputPath)_n.cpp Hint: you can select all .ned files together, and 'All configurations' from the combo at the left of the Settings dialog, and then you have to type this settings only once. Note: If you copied one of the sample projects, you'll have to adjust Command, because they contain explicit nedc path (....\bin\nedc).