Skip to main content

59 posts tagged with "IPv6"

View All Tags

· One min read

畢業以後用了許多時間玩了各種技術,發現還是無法忘懷小丑魚 (NEMO,Network Mobility)。 我的熱情可能還是在網路移動技術上吧。

花了些時間察看 NEPL (NEMO Platform for Linux) HOWTO 以了解最近 Mobile IPv6 的更新情況,發現現在 MIPv6 for Linux (MIPL) 專案似乎已經被 USAGI 接管了。新的專案名稱叫 UMIP,並直接包含 NEMO 的功能。

(以後待續...)

· One min read

· One min read

CEATEC JAPAN 2006 上東京大學的 Ezaki San 的研究室 (養海龜 的那間) 又推出了 Dual Stack Mobile IPv6 展示,可以應用在一般 IPv4 環境中. 前陣子看 Draft 時覺得這個方法很棒但是實做也很複雜,想不到這麼快就有實做展示出現了.

看展示平台的樣子是拿筆電當作 Home Agent, 拿 Sharp Zaurus 分別當作 IPv4 與 IPv6 環境下的 Mobile Node, 讓兩者可以順暢使用 IPv6 做溝通.

圖片連結自 http://www.ipv6style.jp/jp/20061018/ceatec3.html

· One min read

Corega 上次在 INTEROP TOKYO 2006 中展出了一台支援 NTT OCN IPv6 連線服務的寬頻路由器 CG-BARPRO6, 現在這台機器可以用更新韌體的方式新增支援 Feel6 連線服務.

據我試用過的結果,Feel6 服務跟 OCN 服務的差別除了使用的 Tunnel 技術不同之外,兩者在 CG-BARPRO6 上都可以透過同樣的設定方式使用.

Feel6 服務是免費的,在台灣只要上 Feel6 網站,填寫資料後也可以申請 Feel6 服務,比設一堆 Tunnel Broker 方便多了:-)

資料來源: コレガ、CG-BARPRO6 の最新ファームウェアを公開

· One min read

在看 ブロードバンドルータ (CG-BARPRO6) による OCN IPv6 接続 這篇文章時, 發現回覆中提到很可惜沒支援 "v6-v4 TCP Relay" 這功能.

IPv6-IPv4 TCP Relay 到底是什麼呢?

上網查了一查,原來就是一種 BIS (Bump In Stack) 的應用,讓 IPv4 Only 的程式可以透過 Port Mapping 來存取 IPv6 網路.

例如回覆中提到一台僅支援 IPv4 的網路電視機器,因為區網內使用私有地址的關係,需要在外部建一台 Virtual Server 才能在各地存取網路電視這資源. 如果 Router 能支援 "IPv6-IPv4 TCP Relay", 我們就能在外部使用 IPv6 位址存取網路電視了!

想起來就很讚,做起來.......:-D

參考: 介面 Portproxy 的 Netsh 命令

· One min read

http://www.ocn.ne.jp/ipv6/

提供以每個月 315 日圓的低價格試驗 IPv6 網路

網站上演示了透過 IPv6 網路與支援 OCN IPv6 連線的家用閘道器來控制資訊家電, 這願景很可能在近期變的真實.

· One min read

我一直在找可以在家裡面使用 IPv6 網路的方法.

今天因為工作的關係,接觸到了日本的feel6這個服務. 免費註冊,取得帳號後需先下載它所附的程式, 附的程式裡面除了有撥接上網用的 PPPoE 等設定之外,也會幫忙自動設定一個 IPv6 Tunnel 連線

因此以後在家要連上網路時只要直接用它附的程式在家一次就直接接上了 IP/IPv6 網路!

不過要會點日文才能通過前面重重註冊帳號的關卡啦, 我是有好心人士在電話裡手把手教會的:D

· One min read

http://www.mobile-ipv6.org/ MIPL Mobile IPv6 for Linux is an implementation of Mobility support in IPv6. Mobility support allows a mobile device to be tracked as it migrates between networks or even ISPs, allowing packets to be forwarded to where the device is currently located.

Download the stuff at these locations:

mipv6-2.0-rc2.tar.gz (Latest USER SPACE part)

mipv6-2.0-rc2-linux-2.6.8.1.patch.gz (Latest KERNEL part)

Remember, you need both of those. First is the user space daemon, and the other is a patch to enable MIPv6 in the kernel. INSTALL and INSTALL.kernel should get you started.

The NEPL NEMO Platform for Linux is a NEMO implementation based on the MIPL 2 architecture.

It aims to be fully RFC 3963 compliant supporting both implicit and explicit mode signalling. Version 0.1 only supports static routing between the HA and MR.

nemo-0.1.tar.gz (NEMO Basic Support Protocol (RFC 3963) and MIPv6 userspace daemon, works with the patched 2.6 kernel) radvd-0.7.2-NEMO.tar.gz (Modified router advertisement daemon needed for proper operation of a NEMO Home Agent)

· One min read

Rediscovering IPv6: Why Is IPv6 IPsec Not Widely Used? 這篇在談為什麼 IPSec 推不起來

IPsec is still not used for purposes other than connecting to organization network, or making connections among corporate sites. In other words, IPsec is not used for P2P communications, which is one of the main motives for using IPv6.

Technical: IPsec: a basis for IPv6 security Part1 Part2

  • 容易使用的產品才有銷路
  • 與其加入所有功能,不如專注作好一件事

· One min read

Get ready for IPv6: Five security issues to consider

security 其實是無處不在的,許多技術領域都存在著 security 問題, 只有底層的支撐技術到一定階段才能夠考慮安全因素,而越面向大眾的東西就越多非安全因素

IPv6 雖號稱更安全,但仍有不少引入的安全問題可以談, 多數 IPv6 Security issue 都是因認識不足,或是來自位址轉換 / 隧道技術 (Tunneling) 引入衍伸的問題...

· One min read

The TCP/IP Guide http://www.tcpipguide.com/free/t_toc.htm 我所看過最全的免費線上版網路書,難能可貴的是可以用短短幾頁將每個主題說明清楚,萬分拜服

以下是 IPv6 相關章節 Internet Protocol Version 6 (IPv6) / IP Next Generation (IPng) **IP Security (IPSec) Protocols** **Internet Control Message Protocol (ICMP/ICMPv4 and ICMPv6) **TCP/IP IPv6 Neighbor Discovery Protocol (ND) **TCP/IP Routing Protocols (Gateway Protocols)

**

· One min read

IPv6 Programming in 5 minutes in IPv6Style

Use DNS record to check dual stack:

  1. Try accessing the IPv6 address written in the AAAA record.

  2. If an attempt to connect using IPv6 fails, try accessing the IPv4 address written in the A record. Use address family independent function: getaddrinfo()

· 2 min read

If the dest_addresses parameter contains more than one address, one of them is randomly chosen for each packet.

An address may be given in the dotted decimal notation, or with the module name. (The IPAddressResolver class is used to resolve the address.)

To disable the model, set dest_addresses to "".

The peer can be UDPSink or another UDPBasicApp (it handles received packets exactly like UDPSink).


UDPAppBase: *** void UDPAppBase::bindToPort(int port)

cMessage msg = new cMessage ("UDP_C_BIND", UDP_C_BIND); 建立新 message "msg", 使用 UDP_C_BIND 格式

UDPControlInfo ctrl = new UDPControlInfo (); 建立新 record "ctrl"

ctrl->setSrcPort (port); 將 port 參數設定進 ctrl 的 SrcPort 參數中

msg->setControlInfo (ctrl); 將 ctrl 包進 msg 中的 ControlInfo 參數中

send (msg, "to_udp"); 送到傳輸層的 udp 做處理

void UDPAppBase::sendToUDP(cMessage *msg, int srcPort, const IPvXAddress& destAddr, int destPort)

msg->setKind(UDP_C_DATA); Send message to UDP, with the appropriate control info attached

其他類似 bindToPort ()


UDPSink: void UDPSink::initialize()

WATCH (numReceived); TKenv 中顯示 numReceived 變數

if (port!=-1) bindToPort (port); port 數字正常就將 port 參數繫結到埠號

void UDPSink::handleMessage (cMessage *msg) 處理封包並秀 numReceived 狀態在畫面中

void UDPSink::processPacket (cMessage *msg) 收到封包後刪除,numReceived 數 +1


UDPBaseApp

const char destAddrs = par ("dest_addresses"); 讀入目的位址 cStringTokenizer tokenizer (destAddrs); const char token; while ((token = tokenizer.nextToken ())!=NULL) destAddresses.push_back (IPAddressResolver ().resolve (token)); 解析 string 成可辨識的位址格式

void UDPBasicApp::sendPacket () IPvXAddress destAddr = chooseDestAddr (); 超過一個目的位址時從中選擇隨機目的位址

IPvXAddress UDPBasicApp::chooseDestAddr () { int k = intrand (destAddresses.size ()); destAddresses.size () 即目標位址數量,intrand (n) 從 n 中隨機取一數

return destAddresses[k];

}

· 2 min read

22th. Part: 修改 IPControlInfo.msg: 協定對應改成 IP6NextHeaderFieldId

檢討:在修改一陣子模組之後,對整個架構更了解的同時, 也更了解修改整個 IP 協定的難度. 因為了解,而越來越缺少每個部分改好兜起來就能跑的自信.

所以檢討了現在 porting 的方法,歸納出下面幾條新的 porting 步驟:

第一階段:多方嘗試 (完成) 1. 初步對各主要模組了解,trace code 同時並做初步 porting. 2. 儲存當前 porting slices 成果

第二階段:系統化調試 1. 一切修改都應該先以能執行,能隨時觀察模擬流程為目標. (每次修改都能編出可用的快照檔 (snapshot)) 2. 將 IP 相關模組複製一份,編譯,確定可用的新增協定方式 3. 階段修改 2. 修改 Mac 層加入訊息 3. 修改 IPDatagram.msg 新增協定 4. 修改協定訊息 5. 修改各 Class 名稱 6. 實際修改 Class 7. 路由表位址,位址解譯,flatconfigurator

第三階段:新增功能 1. Neighbor Discovery (Major Option). MIPv6 & NEMO (After Wireless Support) 2. DualStack 3. Extension Header Proccessing 4. RSVP, Multicast

· 3 min read

從 UDPApp 或 TCPApp 一堆檔案中,總是要從 xxSinkApp 最先開始看, 最簡單又能猜測到大致流程的一定是這幾個檔案,透過這樣 tracing code 熟悉了大致架構後,看其他相關檔案時會事半功倍.

因為 xxSinkApp 明顯講的都會是如何收到這種類型的封包,還有收到後如何將封包消滅的過程


TCPSinkApp void TCPSinkApp::initialize()

TCPSocket socket; 宣告 TCPSocket

socket.setOutputGate(gate("tcpOut"));

socket.bind(address[0] ? IPAddress (address) : IPAddress (), port); 繫結 "位址 - 埠號"

socket.listen(true);

.... 參考一般 socket 連線相關文件

void TCPSinkApp::handleMessage (cMessage *msg) if (msg->kind ()==TCP_I_PEER_CLOSED) 如果狀態為 TCP_I_PEER_CLOSED

msg->setKind (TCP_C_CLOSE); 將狀態設成 TCP_C_CLOSE

send (msg, "tcpOut"); 將訊息送到 "tcpOut"

else if (msg->kind ()==TCP_I_DATA || msg->kind ()==TCP_I_URGENT_DATA) 如果狀態為 TCP_I_DATA 或 TCP_I_URGENT_DATA

bytesRcvd += msg->length ()/8; bytesRcvd += 收到的封包 bit 長度 / 8 (變成 byte)

delete msg; 並將訊息刪除

else delete msg; 收到其他狀態訊息的話都直接刪除


TCPEchoApp echoFactor=1 will result in sending back the same message unmodified The lengths of the messages are multiplied by echoFactor before sending them back

void TCPEchoApp::sendOrSchedule(cMessage *msg)

if (delay==0) 若 delay 變數值為 0

bytesSent += msg->length ()/8; 紀錄總共送出的封包 byte 長度

send (msg, "tcpOut"); 並送出訊息

else scheduleAt (simTime ()+delay, msg); 否則繼續等待 delay 這段時間

void TCPEchoApp::handleMessage(cMessage *msg)

if (msg->isSelfMessage ()) 若訊息來自本身 紀錄總共送出的封包 byte 長度 並送出訊息

else if (msg->kind ()==TCP_I_PEER_CLOSED) 如果狀態為 TCP_I_PEER_CLOSED

msg->setKind (TCP_C_CLOSE); 將狀態設成 TCP_C_CLOSE

sendOrSchedule (msg); 將訊息傳到 sendOrSchedule () 處理

else if (msg->kind ()==TCP_I_DATA || msg->kind ()==TCP_I_URGENT_DATA) 如果狀態為 TCP_I_DATA 或 TCP_I_URGENT_DATA 紀錄總共收到的封包 byte 長度

if (echoFactor==0) 若 echoFactor==0 將訊息刪除

else 其他: msg->setKind (TCP_C_SEND); 狀態設成 TCP_C_SEND

//reverse direction, modify length, and send it back

TCPCommand ind = check_and_cast<TCPCommand >(msg->removeControlInfo ()); 將 msg 的 ControlInfo 去掉後,強制轉換型別成 TCPCommand

TCPSendCommand *cmd = new TCPSendCommand();

cmd->setConnId(ind->connId()); msg->setControlInfo(cmd);

delete ind; 將不再用到的 ind 刪除

計算回傳訊息大小: long len = long (msg->length ()echoFactor) & ~7U; 將原訊息長度echoFactor

if (len<8) len=8; 若訊息長度小於 1 byte, 補足成 1 byte

msg->setLength (len); 設定回傳訊息長度 sendOrSchedule (msg); 排到 sendOrSchedule () 中

else delete msg; 收到其他狀態訊息的話都直接刪除

· One min read

void TCPGenericCliAppBase::setStatusString(const char *s) { if (ev.isGUI()) displayString().setTagArg("t", 0, s); }

void TCPGenericCliAppBase::socketEstablished(int, void ) { // redefine* to perform or schedule first sending ev << "connected\n"; setStatusString("connected"); }

· One min read

剛看到

http://ctieware.eng.monash.edu.au/twiki/bin/view/Simulation/Installation

上提供了 IPv6SuiteWithINET for OMNeT++ 3.1, windows/linux 版.

趕快來試用,如果沒問題的話那 INET6 計畫的下一步就修正成寫 IPv6SuiteWithINET 文件推廣囉, 當然,要先自己 trace 一遍才知人家怎麼做的

4/21 quick revice: 必須安裝 VC 7.1 編譯程式才能編譯,6.0 的不行。程式可以由下面連結下載 http://www.microsoft.com/downloads/details.aspx?FamilyID=272be09d-40bb-49fd-9cb0-4bfa122fa91b&displaylang=en

· One min read

Define_Module (PingApp); 模組名稱是 PingApp

PingApp::initialize()

  1. 讀入 omnetpp.ini 中設定的參數.
  2. 在 TKenv 中監視
  • sendSeqNo
  • expectedReplySeqNo
  • dropCount
  • outOfOrderArrivalCount 這幾個結果 PingApp::handleMessage (cMessage *msg)

if (msg->isSelfMessage ()) 若訊息來自本身節點

destAddr = IPAddressResolver ().resolve (par ("destAddr")); 解析目的位址設定

來自其他節點則啟動回覆機制

processPingResponse(check_and_cast<pingpayload>(msg));

void PingApp::sendPing()

PingPayload msg = new PingPayload (name); 新增封包,接著下面照著宣告的格式填入對應的值 msg->setLength (8packetSize); //? 封包裡沒宣告

sendToICMP (msg, destAddr, srcAddr, hopLimit); 把訊息送到 ICMP 裡

PingApp::scheduleNextPing(cMessage *timer)

simtime_t nextPing = simTime () + intervalp->doubleValue (); 模擬時間加上間隔時間

void PingApp::sendToICMP(cMessage *msg, const IPvXAddress& destAddr, const IPvXAddress& srcAddr, int hopLimit) 判斷送出 v4/v6 icmp 格式封包

void PingApp::processPingResponse (PingPayload *msg) 收到 ICMP 封包,判斷</pingpayload> v4/v6 並<pingpayload>處理 </pingpayload>

· 2 min read

16.3.1. 確認是否支援

嘗試載入模組,確認是否編譯成功

# modprobe ip6_tables

確認相容性

� 'ip6tables' firewalling (IPv6)!"

16.3.2. 學習如何使用 ip6tables

16.3.2.1. 列出所有 IPv6 netfilter 輸入條件

  • 短指令

# ip6tables -L

  • 延伸指令 ip6tables -n -v --line-numbers -L

16.3.2.2. 列出特定過濾器

# ip6tables -n -v --line-numbers -L INPUT

16.3.2.3. 使用選項在輸入過濾器中插入紀錄規則

� --log-level 7

16.3.2.4. 在輸入過濾器中插入拋棄條件

# ip6tables --table filter --append INPUT -j DROP

16.3.2.5. 依號碼刪除一筆條件

# ip6tables --table filter --delete INPUT 1

16.3.2.6. 允許 ICMPv6 訊息

使用較舊的 Linux 核心 (未修正的核心 2.4.5 與 iptables-1.2.2) 將無法指定類型 (type)

  • 接受透過隧道 (Tunnel) 進來的 ICMPv6 通訊

# ip6tables -A INPUT -i sit+ -p icmpv6 -j ACCEPT

  • 接受透過隧道 (Tunnel) 出去的 ICMPv6 通訊

# ip6tables -A OUTPUT -o sit+ -p icmpv6 -j ACCEPT

新的 Linux 核心可以指定 ICMPv6 類型:

# ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT

16.3.2.7. 速率限制

http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/x2231.html

· 3 min read

16.2.1. 取得原始檔

取得最新的 Linux 核心原始檔: http://www.kernel.org/

取得最新的 iptables 套件:

16.2.2. 將原始檔解壓縮

切換到原始檔所在目錄:

# cd /path/to/src

將原始檔解開並更名 # tar z|jxf kernel-version.tar.gz|bz2

# mv linux linux-version-iptables-version+IPv6

解壓縮 iptables 原始檔

# tar z|jxf iptables-version.tar.gz|bz2

16.2.3. 將最新 iptables/IPv6 - 相關 修正檔修正到 Linux 核心原始檔上

切換到 iptables 所在目錄:

# cd iptables-version

使用修正檔 # make pending-patches KERNEL_DIR=/path/to/src/linux-version-iptables-version/

使用其他 IPv6 相關修正檔 (核心尚未包含的)

# make patch-o-matic KERNEL_DIR=/path/to/src/linux-version-iptables-version/

在以下選項中選擇 yes (iptables-1.2.2)

  • ah-esp.patch
  • masq-dynaddr.patch (only needed for systems with dynamic IP assigned WAN connections like PPP or PPPoE)
  • ipv6-agr.patch.ipv6
  • ipv6-ports.patch.ipv6
  • LOG.patch.ipv6
  • REJECT.patch.ipv6

確認 IPv6 extensions

Extensions found: IPv6:owner IPv6:limit IPv6:mac IPv6:multipor
``

## 16.2.4\. 配置, 建立與安裝新 Linux 核心
切換到Linux核心所在目錄:

`# cd /path/to/src/linux-version-iptables-version/`

編輯 Makefile
- EXTRAVERSION =
+ EXTRAVERSION = -iptables-version+IPv6-try

執行 configure, 啟動 IPv6 相關支援

Code maturity level options Prompt for development and/or incomplete code/drivers : yes Networking options Network packet filtering: yes The IPv6 protocol: module IPv6: Netfilter Configuration IP6 tables support: module All new options like following: limit match support: module MAC address match support: module Multiple port match support: module Owner match support: module netfilter MARK match support: module Aggregated address check: module Packet filtering: module REJECT target support: module LOG target support: module Packet mangling: module MARK target support: module


同時亦配置其他與系統相關的參數. 完整的核心編譯與安裝請參照其他 HOWTOs

## 16.2.5\. 重新建立與安裝iptables binaries

確認核心原始碼已存在於 /usr/src/linux/

將舊目錄更名
`# mv /usr/src/linux /usr/src/linux.old`

建立一個新的軟連結(softlink)

`# ln -s /path/to/src/linux-version-iptables-version /usr/src/linux`

重新建立 SRPMS
`# rpm --rebuild /path/to/SRPMS/iptables-version-release.src.rpm`

安裝新的 iptables 套件 (iptables + iptables-ipv6)

* 在 RH 7.1 系統上, 正常狀況下已安裝好舊版的 iptables , 因此我們"更新"它

`# rpm -Fhv /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm`

* 若尚未安裝, 就先"安裝"它

`# rpm -ihv /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm`

* On RH 6.2 systems, normally, no kernel 2.4.x is installed, therefore the requirements don't fit. Use "--nodeps" to install it

`# rpm -ihv --nodeps /path/to/RPMS/cpu/iptables*-version-release.cpu.rpm`

也許須先新建一個軟連結給 iptables 參照檔

`# ln -s /lib/iptables/ /usr/lib/iptables`

· One min read

IPv6 原生防火牆僅 Linux 核心 2.4 版以上才有支援。在較舊的 2.2 版以下你只能透過協定 41 過濾 IPv6-in-IPv4 封包.

注意:以下敘述的規則或範例不一定能真正保護你的系統!本書對此不負任何責任

在安裝後測試你的規則設定,可參照 Section 17.3 .

注意 USAGI 專案正在處理 IPv6 結束連線追蹤問題!如此將可讓安全規則設定更加容易且更安全!

16.1.1. 更多資訊

· One min read

IPv6 防火牆相當重要,特別是當在內部網路使用全球通用位址時。因為 IPv6 不像在 IPv4 網路裡內部主機自動由私有 IPv4 位址保護,如 RFC 1918 / Address Allocation for Private Internets 或私有 IPv4 位址自動分配 (Automatic Private IP Addressing, APIPA)Google search for Microsoft + APIPA, 在 IPv6 上一般通常使用全球通用位址,而任何具備 IPv6 連線能力的節點都可以連結上所有內部 IPv6 支援節點.

· 3 min read

目前並無合適的工具可用來確認系統上關於 IPv6 網路的安全性問題。目前即使是 Nessus 或其他商業性安全性檢測軟體都還無法掃描 IPv6 位址.

17.3.1. 法律議題

注意:僅可掃描自有或經過對方授權的電腦,否則您將有遭遇法律追訴的可能。在掃描前請多確認掃描目的 IPv6 位址是否正確.

17.3.2. 使用 IPv6 - 支援 的 netcat 作 IPv6 安全性驗證

透過使用 IPv6 - 支援 的 netcat (可參照 IPv6+Linux-status-apps/security-auditing ) 你可以包裝一個指令段 (wrapping a script) 以完成在特定通訊埠區段的掃描,或取得 banners 等等工作。使用範例:

# nc6 ::1 daytime
13 JUL 2002 11:22:22 CEST

17.3.3. 使用 IPv6 - 支援 的 nmap 作 IPv6 安全性驗證

NMap, 作為世界上最棒的通訊埠掃描工具之一,從 3.10ALPHA1 版起即支援 IPv6 . 使用範例:

# nmap -6 -sT ::1
Starting nmap V. 3.10ALPHA3 ( www.insecure.org/nmap/ )
Interesting ports on localhost6 (::1):
(The 1600 ports scanned but not shown below are in state: closed)
Port State Service
22/tcp open ssh
53/tcp open domain
515/tcp open printer
2401/tcp open cvspserver
Nmap run completed -- 1 IP address (1 host up) scanned in 0.525 seconds

17.3.4. 使用 IPv6 - 支援 的 strobe 作 IPv6 安全性驗證

Strobe 是一個 (與 NMap 相較) 功能較簡單的通訊埠掃描工具,但也提供了 IPv6 - 支援修正檔 (參照 IPv6+Linux-status-apps/security-auditing ).

使用範例:

# ./strobe ::1 strobe 1.05 (c) 1995-1999 Julian Assange
::1 2401 unassigned unknown
::1 22 ssh Secure Shell - RSA encrypted rsh
::1 515 printer spooler (lpd)
::1 6010 unassigned unknown
::1 53 domain Domain Name Server

附註: strobe 並未繼續開發,在此顯示的版本並不十分正確.

17.3.5. 驗證結果

若驗證結果與你的 IPv6 安全策略不相符,使用 IPv6 防火牆來關閉漏洞,例如使用 netfilter6 (參照 Firewalling/Netfilter6 ). 資訊:更多關於 IP 安全性的資訊可在此取得:

· One min read

在此非常鼓勵更新所有修正檔並關閉所有非必要的服務。也最好僅繫結必須的 IPv4/IPv6 位址到所使用的服務上。同使也安裝上本地防火牆.

More to be filled...

· One min read

在 Linux 2.6.x 版的核心中你可以同樣使用 "ip" 指令來獲取 IPsec 的策略 (policy) 與狀態 :

ip xfrm policy

...

ip xfrm state

...

· One min read

18.2.1. Linux 2.4.x 版的核心支援

目前 2.4 版未支援。在加密程式碼部分還有些法律上的問題。同樣的問題也發生在其他專案上

18.2.2. Linux 2.6.x 版的核心支援

目前的版本 (2.6.9 以上) 已支援 IPv4 與 IPv6 的 IPsec .

這部份的程式由 USAGI 專案協助實作.

· 2 min read

有兩種加密與認證的模式可行:

18.1.1. 傳輸模式 (Transport Mode)

傳輸模式是種真實的點對點連線模式。它的 IP 標頭並未被加密 (但通常已包含於認證中), 而只有負載 (通常為 ICMP, TCP 或 UDP) 被他們的特定標頭所加密

使用 AES-128 來加密,並使用 SHA1 來做認證,此模式讓 MTU 減少 42 位元

18.1.1. 隧道模式 (Tunnel Mode)

隧道模式可於點對點和閘道對閘道連線模式中使用。完整的 IP 封包將被加密並取得新的 IP 標頭 (The complete IP packet is being encrypted and gets a new IP header prepended .)

This mode usually decreases the MTU by 40 octets from the MTU of transport mode.
在此模式下通常會讓使用了傳輸模式的 MTU 再減少 40 位元

· One min read

IPsec 需要透過一個安全的金鑰交換過程。在 Linux 中是透過 IKE daemons 程式來達成。它們也使用公用安全機制 (common known secret, 即一般所言的 "預先分享安全機制"(pre-shared secret)), 或使用 RSA 金鑰 (此金鑰也可用在 X.509 認證上) 處理對方的認證。目前 Linux 上提供有兩種不同的 IKE daemons, 兩者在使用與配置過程上完全不同。相較於 * S/WAN , 筆者比較偏好 "pluto" 實作,因為 "pluto" 比較容易而且只需一步設定安裝.

· One min read

此 HOWTO 文件應列於 "網路 / 協定" 分類

This HOWTO should be listed in category "Networking/Protocols".

· 4 min read

2.4.1. 為什麼稱作 IPv6, 而非繼 IPv4 之後稱為 IPv5 ? 在任何 IP 標頭中,前 4 位元是為協定版本號所保留的。所以理論上一個協定的版本號在 0 和 15 之間都是可以的:

* 4 己經為IPv4所使用.
* 5 為串流( Stream )協定所保留 (STP, RFC 1819 / 網際網路串流協定第二版)(不曾真正公開使用過)

因此下一個可以用的號碼是 6, 因此 IPv6 就這樣誕生了!

2.4.2. IPv6 位址:為什麼 IPv6 位址位元數要這麼長? 在設計 IPv4 的時候,人們認為 32 位元的長度足夠全世界使用。回頭看看這些年來,32 位元就現在和未來幾年來仍足以使用. 然而,32 位元過不久將不能滿足各種網路設備對全球 IP 位址的需求。想一想將來要連結網路的移動電話,汽車 (包括電子總控系統), 烤麵包機,冰箱,照明開關...

所以設計者選擇了 128 位元,是今天 IPv4 大小 (2^96) 與長度的 4 倍.

雖然實際可使用的大小可能比它看起來的還要小。這是因為現在的定義位址設計,64 位元被用於界面識別. 另外 64 位元則用於路由。假設於目前嚴格的集合階層 (/48, /35, ...), IPv6 所能提供的位址空間仍可能有耗盡的一天,但在可見的將來中應仍不會發生.

您可由 RFC 1715 / The H Ratio for Address Assignment Efficiency and RFC 3194 / The Host-Density Ratio for Address Assignment Efficiency. 中得到更進一步的資訊

2.4.3. IPv6 位址:為什麼在新的設計裡位元數這麼少? 雖然,可能有些人在考慮 IPv8 和 IPv16, 然而這些設計無論從接受和執行都是那麼的遙遠. 目前 128bit 對於標頭和數據傳輸延遲來說是最佳的選擇. 考慮到在 IPv4 和 IPv6 的最小最大傳輸單位 (MTU), 它們分別是 576 位元組和 1280 位元組, IPv4 的標頭長度為 20 位元組和 (最小值,加上 IPv4 位址選項可以增大到 60 位元組), 在 IPv6 的標頭中則是 48 位元組 (固定不變的), 標頭分別占它們 MTU 的 3.4% 和 3.8%, 這意味著兩個協定標頭所造成的負載幾乎相同. 更多位元的位址需要更大的標頭,因而佔據更大的負載.

同樣,考慮到正常連結的 MTU 最大值 (像現在的以太網): 1500 位元組 (特別的例子:Jumbo frames 使用了 9k 位元組). 最終,如果在要傳輸的第三層封包中 10% 或 20% 都用來傳送位址而非封包內容,這可能不是個很好的設計方式.

· 2 min read

IPv6 是將用來取代 IPv4 (也叫做 IP) 的ㄧ種新的第三層協定 (請參考 linuxports/howto/intro_to_networking/ISO - OSI Model) IPv4 是很早以前設計的 (1980 年一月,RFC 760 / 網路協定 (Internet Protocol)) , 自協定設計之初即不斷地有人要求 IP 網路協定應提供更多的位址和更高的性能. RFC 2460 / 網路協定第六版 (Internet Protocol Version 6 Specification) 是最新的 RFC 版本. IPv6 與 IP 最主要的不同點在於重新設計了封包標頭。包括將位址的長度從 32 bits 增加到 128 bits. 因為第三層主要負責使用基於位址的封包路由來達成端對端位址傳輸。因此與 IPv4 ㄧ樣,傳輸時必需包含新的 IPv6 位址 (來源和目標). 想知道更多關於 IPv6 歷史的資訊的話可以參考看看較舊版本的 IPv6 相關 RFC 列表 SWITCH IPv6 Pilot / References http://www.switch.ch/lan/ipv6/references.html

· 3 min read

前文提到 IPv6 的位址為 128 位元。這麼高的位元數換算成一般十進位數字表示法的話,長度將達到 10 的 39 次方:

2^128-1: 340282366920938463463374607431768211455

這麼長的數字或位址將很難記得住。而且,IPv6 的位址是逐位定位的 (就像 IPv4, 但這個觀點不是公認的). 所以透過十六進制表示法能更好地表示這些數字。將每 4 位元 (也叫做 "nibble") 表示為數字 (0-9) 或字符 a-f (10-15). 這種表示法可以將 IPv6 的地址長度縮減到可用 32 個字符來表示.

2^128-1: 0xffffffffffffffffffffffffffffffff

這種表示法仍然不是很方便. (因為這樣一長串看下來很容易就會混淆或遺漏了單個十六進制數字), 所以 IPv6 的設計者將地址形式定為每 16 位元就用 "冒號" 區分開來. 此外,開頭的 "0x"(在程式設計當中用來表示十六進制數值) 也被省略了:

2^128-1: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff

如此一來,一個可用的地址 (請參考之後提到的地址類型) 如下:

3ffe:ffff:0100:f101:0210:a4ff:fee3:9566

為了簡化,每個 16 位元區塊中高位元的 0 可以被省略:

3ffe:ffff:0100:f101:0210:a4ff:fee3:9566 -> ¬ 3ffe:ffff:100:f101:210:a4ff:fee3:9566

連續值為 0 的 16 位元位址區塊可以用 "::" 表示。但是在一個 IPv6 位址當中只能使用這種簡寫一次,否則就不再是唯一表示的位址了:

3ffe:ffff:100:f101:0:0:0:1 -> 3ffe:ffff:100:f101::1

簡化得最短的 IPv6 本地位址:

0000:0000:0000:0000:0000:0000:0000:0001 -> ::1

也有一種方法叫做簡潔 (compact, base85 coded) 表示法。定義於 RFC 1924 / IPv6 簡潔位址表示法 (定於 1996 年四月一日), 但從沒有被廣泛使用過,可能只是個愚人節笑話。但還是給個例子:

ipv6calc --addr_to_base85 3ffe:ffff:0100:f101:0210:a4ff:fee3:9566

Itu&-ZQ82s>J%s99FJXT

資訊: ipv6calc 是一個 IPv6 地址格式的計算和轉換的計劃,您可以在 ipv6calc 首頁中找到: http://www.deepspace6.net/projects/ipv6calc.html 鏡像站: http://mirrors.bieringer.de/www.deepspace6.net/projects/ipv6calc.html

· 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\. 結語

· 4 min read

//2/25/2005 //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. 互聯性 23. 更多資訊與網址 23.1. 書籍,文章,線上評論 (mixed) 23.2. Conferences, Meetings, Summits 23.3. 線上資訊 23.4. IPv6 基礎架構 23.5. 郵件列表 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. 結語