摘要
Teredo 是一項 IPv6 轉換技術,當 IPv6/IPv4 主機位於一或多個 IPv4 網路位址轉譯 (NAT) 後端時,Teredo 可以針對單點傳送 IPv6 連線提供位址指派和主機對主機自動通道技術。為了周遊 IPv4 NAT,IPv6 封包會以 IPv4 架構的使用者資料包通訊協定 (User Datagram Protocol,UDP) 訊息的形式傳送。本文提供 Teredo 概觀 (包括 Teredo 位址與封包結構),並詳細說明如何在 Teredo 用戶端、Teredo 主機特定轉送、使用 IPv4 網際網路的 IPv6 專用主機、IPv6 網際網路、Teredo 伺服器及 Teredo 轉送之間開始通訊。
| 簡介 | |
| 網路位址轉譯器 (NAT) 概觀 | |
| Teredo 元件 | |
| Teredo 位址 | |
| Teredo 封包格式 | |
| Teredo 路由 | |
| Teredo 處理程序 | |
| 在 Windows XP Service Pack 2 中使用 Teredo | |
| 總結 | |
| 相關連結 |
Teredo 是一項位址指派和自動通道技術,可在 IPv4 網際網路上提供單點傳送 IPv6 連線。6to4 則是另一項自動通道技術,可在 IPv4 網際網路上提供單點傳送 IPv6 連線。不過 6to4 在網站邊緣有 6to4 路由器時運作情況良好。6to4 路由器是使用公用 IPv4 位址來建構 6to4 首碼,並做為 IPv6 通告和轉送路由器。6to4 路由器會封裝及解除封裝傳送到網站節點和從網站節點傳來的 IPv6 流量。
6to4 有賴於公用 IPv4 位址的設定以及邊緣裝置中 6to4 路由功能的實作。許多小型辦公室/住家辦公室 (SOHO) 設定都使用 IPv4 網路位址轉譯器 (NAT) 進行網際網路連線。如需有關網路位址轉譯如何運作的詳細資訊,請參閱本文中的<網路位址轉譯器 (NAT) 概觀>。在大部分的 NAT 設定中,提供 NAT 功能的裝置並無法當做 6to4 路由器使用。即使網際網路邊緣裝置已經廣泛支援 6to4,但仍然有一些網際網路連線設定包含多個層級的 NAT。具有 6to4 能力的邊緣裝置若未指定公用 IPv4 位址便無法使用 6to4。
Teredo 會在網站內的主機間打開 IPv6 封包通道,藉此解決現今網際網路邊緣裝置和多層 NAT 設定缺乏 6to4 功能的問題。相對來說,6to4 則會打開 IPv6 封包在邊緣裝置之間的通道。從主機打開通道會造成另一個 NAT 問題:使用 IPv4 封裝的 IPv6 封包會將 IPv4 標頭中的 [通訊協定] 欄位設為 41。而多數 NAT 只轉譯 TCP 或 UDP 流量,因此必須手動設定為轉譯其他通訊協定,或是得安裝處理轉譯的 NAT 編輯器。由於 Protocol 41 轉譯並非 NAT 的常見功能,因此 IPv4 封裝的 IPv6 流量將無法流經一般 NAT。因此,為了讓 IPv6 流量流經一個或多個 NAT,Teredo 會將 IPv6 封包封裝為 IPv4 UDP 訊息,其中包含 IPv4 與 UDP 標頭。NAT 一般都能轉譯 UDP 訊息,而且 UDP 訊息可以在多層 NAT 中周遊。
總而言之,Teredo 是一項 IPv6 轉換技術,可允許位於一或多個 IPv4 NAT 中的主機之間,自動打開 IPv6 通道。來自 Teredo 主機的 IPv6 流量可以流經 NAT,因為它是以 IPv4 UDP 訊息的方式傳送。只要 NAT 支援 UDP 連接埠轉譯,那麼 NAT 便支援 Teredo。對稱式 NAT 是例外,本文中的<NAT 類型>將加以說明。
Teredo 是設計作為 IPv6 連線最後憑藉的轉換技術。如果發現原始 IPv6、6to4 或「內部網站自動通道定址協定」(Intrasite Automatic Tunnel Addressing Protocol,ISATAP) 連線,主機便不會當做 Teredo 用戶端使用。隨著越來越多的 IPv4 邊緣裝置升級以支援 6to4 且 IPv6 連線日益普及,Teredo 的使用將逐漸減少,直到被淘汰為止。
Teredo 是用於 IPv6 流量的 NAT Traversal 技術。使用 Teredo 打開通道的 IPv6 流量可以穿越一個或多個 NAT,讓 Teredo 用戶端存取 IPv6 網際網路 (經由 Teredo 轉送) 上的主機和 IPv4 網際網路上的其他 Teredo 用戶端。因為能夠連線到其他與 IPv4 網際網路連線的 Teredo 用戶端,而可以在原本經由 NAT 通訊會發生問題的應用程式之間進行通訊。有了 Teredo,啟用 IPv6 的應用程式就可以順利地在 IPv4 網際網路上頻繁地通訊 (相較於 IPv4 專用應用程式)。
部分 IPv4 專用伺服器或對等應用程式類型在 NAT 背後的電腦上執行時,會發生通訊問題。如需詳細資訊,請參閱 <使用網路位址轉譯器的問題>。這些應用程式類型可能需要手動設定 NAT (讓來路不明的傳入流量進入私人網路上的伺服器或對等電腦),或者應用程式必須提供自己的 NAT Traversal 解決方案。
如果應用程式具有 IPv6 能力,便可以使用 Teredo,而無須設定 NAT 或修改應用程式來執行自己的 NAT Traversal。因此,應用程式供應商不用花時間研發針對自訂 NAT Traversal 解決方案修改應用程式,而是應該將應用程式更新為具備 IPv6 能力的應用程式。如果應用程式已經具備 IPv6 能力,便可以使用 Teredo 這個適用於 Windows 的 NAT Traversal 解決方案。
下表顯示包含 Teredo 用戶端與主機特定轉送的 Microsoft Windows 版本,以及預設是否啟用 IPv6 和 Teredo。
| Windows 版本 | 預設啟用 IPv6? | 預設啟用 Teredo? |
Windows XP 加裝 Service Pack 1 (SP1) 與 Advanced Networking Pack for Windows XP (英文) | 否 | 否 |
Windows XP Service Pack 2 (SP2) | 否 | 否 |
Windows Server 2003 Service Pack 1 | 否 | 否 |
Windows Vista (現正處於 Beta 測試) | 是 | 是 (Windows Vista 的最新版本會啟用 Teredo 元件,但預設為非使用中。若要設為使用中,使用者必須安裝需要使用 Teredo 的應用程式,或是選擇變更防火牆設定以允許應用程式使用 Teredo)。 |
Windows Server "Longhorn" (現正處於 Beta 測試) | 是 | 否 |
Windows 中的所有 Teredo 實作都是依據 RFC 4380。
若要在 Windows XP Service Pack 2 或 Windows Server 2003 Service Pack 1 中使用 Teredo 功能,請參閱本文中的<在 Windows XP Service Pack 2 中使用 Teredo>一節。
如需 Windows Vista 與 Windows Server "Longhorn" 的 Teredo 變更的相關資訊,請參閱 <Windows Vista 與 Windows Server "Longhorn" 中的 IPv6 變更內容>。
注意:本文假定讀者具備 IPv6 和 IPv6 轉換技術的概念。如需詳細資訊,請參閱 <IPv6 簡介>(英文) 和 <IPv6 轉換技術>(英文)。
正如 <使用 IPv6 和 Teredo> (英文) 中所述,使用 Teredo 打開通道的 IPv6 流量並不受限於一般 NAT 的 IPv4 封包篩選功能 。雖然聽起來好像是 Teredo 繞過 NAT 並允許可能是惡意的 IPv6 流量在私人網路上傳送,但是請考慮下列事項:
| • | Teredo 不會變更 NAT 的行為。Teredo 用戶端會為自己的 Teredo 流量建立動態 NAT 轉譯表項目。NAT 會將傳入 Teredo 流量轉送到建立相對應 NAT 轉譯表項目的主機。NAT 將不會轉送 Teredo 流量到不屬於 Teredo 用戶端的私人網路上的電腦。 |
| • | 當 Teredo 用戶端使用支援 IPv6 流量的可設定狀況的主機式防火牆 (例如,Windows 防火牆) 時,這些用戶端會受到保護以防止來路不明、不想要的傳入 IPv6 流量。在預設情況下,Windows XP 加裝 SP2、Windows Vista 及 Windows Server "Longhorn" 會啟用 Windows 防火牆。 |
IPv6、Teredo 與可設定狀況的主機式 IPv6 防火牆的組合並不會影響 NAT 對於 IPv4 型流量的封包篩選功能,也不會讓您的 Windows 電腦更容易遭受使用 IPv6 流量 (而非 IPv4 流量) 的惡意使用者及程式的攻擊。
網路位址轉譯器 (NAT) 是以 RFC 1631 定義的 IPv4 路由器,可以在轉送封包時轉譯其 IP 位址和 TCP/UDP 連接埠號碼。例如,假想一下含多部連線到網際網路的電腦的小型公司網路。這家公司通常只需要從網際網路服務提供者 (ISP) 為網路上的每部電腦取得一個公用 IP 位址。但是藉由 NAT,小型公司可以使用私人位址 (如 RFC 1918 所述),並讓 NAT 將此私人定址對應到單一或多個公用 IP 位址。
NAT 是下列需求組合常用的解決方案:
| • | 您希望運用單一連線,而不是將多部電腦連線到網際網路。 |
| • | 您希望使用私人定址。 |
| • | 您希望無須部署 Proxy 伺服器就能存取網際網路資源。 |
當小型公司內部網路上的私人使用者連線到網際網路資源時,使用者的 TCP/IP 通訊協定會建立 IP 封包並包含設於 IP 與 TCP 或 UDP 標頭中的下列值 (粗體字表示受到 NAT 影響的欄位):
| • | 目標 IP 位址:網際網路資源 IP 位址 |
| • | 來源 IP 位址:私人 IP 位址 |
| • | 目的地連接埠:網際網路資源 TCP 或 UDP 連接埠 |
| • | 來源連接埠:來源應用程式 TCP 或 UDP 連接埠 |
來源主機或其他路由器會將此 IP 封包轉送到 NAT,NAT 再轉譯傳出封包的位址,如下所示:
| • | 目標 IP 位址:網際網路來源 IP 位址 |
| • | 來源 IP 位址:ISP 配置的公用位址 |
| • | 目的地連接埠:網際網路資源 TCP 或 UDP 連接埠 |
| • | 來源連接埠:重新對應的來源應用程式 TCP 或 UDP 連接埠 |
NAT 透過網際網路傳送重新對應的 IP 封包。回應電腦傳回回應給 NAT。NAT 收到此回應時,封包中包含下列位址資訊:
| • | 目標 IP 位址:ISP 配置的公用位址 |
| • | 來源 IP 位址:網際網路來源 IP 位址 |
| • | 目的地連接埠:重新對應的來源應用程式 TCP 或 UDP 連接埠 |
| • | 來源連接埠:網際網路資源 TCP 或 UDP 連接埠 |
當 NAT 對應和轉譯位址,並轉送封包到內部網路用戶端時,其中包含下列位址資訊:
| • | 目標 IP 位址:私人 IP 位址 |
| • | 來源 IP 位址:網際網路來源 IP 位址 |
| • | 目的地連接埠:來源應用程式 TCP 或 UDP 連接埠 |
| • | 來源連接埠:網際網路資源 TCP 或 UDP 連接埠 |
傳出封包的來源 IP 位址和 TCP/UDP 連接埠號碼會對應到公用來源 IP 位址以及可能改變的 TCP/UDP 連接埠號碼。傳入封包的目標 IP 位址和 TCP/UDP 連接埠號碼會對應到私人 IP 位址和原始的 TCP/UDP 連接埠號碼。
例如,小型公司的內部網路使用 192.168.0.0/24 私人網路 ID,並接受 ISP 配置的單一公用 IP 位址:131.107.0.1。當小型公司內部網路上使用私人位址 192.168.0.99 的使用者連線到位於 IP 位址 157.60.0.1 的網頁伺服器時,使用者的 TCP/IP 通訊協定會建立一個 IP 封包,其中包含設於 IP 與 TCP 或 UDP 標頭中的下列值:
| • | 目標 IP 位址:157.60.0.1 |
| • | 來源 IP 位址:192.168.0.99 |
| • | 目的地連接埠:80 |
| • | 來源連接埠:1025 |
來源主機將此 IP封包轉送到 NAT 裝置,NAT 裝置會轉譯傳出封包的位址,如下所示:
| • | 目標 IP 位址:157.60.0.1 |
| • | 來源 IP 位址:131.107.0.1 |
| • | 目的地連接埠:80 |
| • | 來源連接埠:5000 |
NAT 透過網際網路傳送重新對應的 IP 封包。網頁伺服器將回應傳回至 NAT。NAT 收到此回應時,封包中包含下列位址資訊:
| • | 目標 IP 位址:131.107.0.1 |
| • | 來源 IP 位址:157.50.0.1 |
| • | 目的地連接埠:5000 |
| • | 來源連接埠:80 |
當 NAT 對應和轉譯位址,並轉送封包到內部網路用戶端時,其中包含下列位址資訊:
| • | 目標 IP 位址:192.168.0.99 |
| • | 來源 IP 位址:157.60.0.1 |
| • | 目的地連接埠:1025 |
| • | 來源連接埠:80 |
[圖 1] 顯示此範例的設定。
私人與公用流量的對應內容會儲存在 NAT 轉譯表內,其中可能包含兩種項目類型:
1. | 動態對應 當私人網路用戶端啟始通訊時建立。在指定時間長度之後,動態對應會從 NAT 轉譯表中移除,除非符合 NAT 轉譯表項目的流量重新整理動態對應。 |
2. | 靜態對應 手動設定以便讓網際網路用戶端啟始的通訊能夠對應到特定的私人網路位址和連接埠。如果您希望私人網路上的伺服器 (例如,網頁伺服器) 或應用程式 (例如,遊戲) 能提供給連線到網際網路的電腦存取,就需要使用靜態對應。靜態對應不會從 NAT 轉譯表中移除。 |
如果 NAT 轉譯表中有對應,則 NAT 只會轉送網際網路的流量到私人網路。這麼一來,NAT 可以為私人網路上的電腦提供可設定狀況的簡單封包篩選功能。
定義的 NAT 類型如下:
| • | 圓錐式 NAT (Cone NAT) 在這個 NAT 中,NAT 轉譯表項目會儲存內部位址及連接埠號碼與外部位址及連接埠號碼之間的對應。當 NAT 轉譯表項目準備好時,便會允許和轉譯來自任何來源位址及連接埠號碼並傳送到外部位址及連接埠號碼的輸入流量。 |
| • | 受限式 NAT (Restricted NAT) 在這個 NAT 中,NAT 轉譯表項目會針對特定的來源位址或特定的來源位址與連接埠號碼,儲存內部位址及連接埠號碼與外部位址及連接埠號碼之間的對應。符合 NAT 轉譯表項目中來自不明外部位址或連接埠號碼的外部目標位址及連接埠號碼的輸入封包將會被丟棄。 |
| • | 對稱式 NAT (Symmetric NAT) 在這個 NAT 中,會將相同的內部位址及連接埠號碼對應到不同的外部位址及連接埠,視外部目標位址 (針對輸出流量) 而定。 Teredo 能在圓錐式和受限式 NAT 中順利運作。Windows XP SP2、Windows XP SP1 和 Advanced Networking Pack for Windows XP 以及 Windows Server 2003 Service Pack 1 中的 Teredo 無法用於對稱式 NAT。如果一或多個對稱式 NAT 背後只有一個 Teredo 用戶端,Windows Vista 和 Windows Server "Longhorn" 中的 Teredo 便可以在 Teredo 用戶端之間運作。 |
Teredo 基礎結構包含下列元件 (如 [圖 2] 所示):
| • | Teredo 用戶端 |
| • | Teredo 伺服器 |
| • | Teredo 轉送 |
| • | Teredo 主機特定轉送 |
Teredo 用戶端是一個支援 Teredo 通道介面的 IPv6/IPv4 節點,透過這個介面可打開封包通道到其他 Teredo 用戶端或 IPv6 網際網路上的節點 (經由 Teredo 轉送)。Teredo 用戶端會與 Teredo 伺服器通訊,藉此取得設定以 Teredo 為基礎的 IPv6 位址所使用的位址首碼,或是藉此協助啟始與 IPv6 網際網路上其他 Teredo 用戶端或主機的通訊。
Windows XP SP2、Windows XP SP1 加上 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 及 Windows Server "Longhorn" 均包含 Teredo 用戶端。
Teredo 伺服器是一個同時連線至 IPv4 網際網路與 IPv6 網際網路的 IPv6/IPv4 節點,可支援接收封包的 Teredo 通道介面。Teredo 伺服器的一般作用是協助設定 Teredo 用戶端位址,以及促使 Teredo 用戶端與其他 Teredo 用戶端之間或 Teredo 用戶端與 IPv6 專用主機之間的初始通訊。Teredo 伺服器會接聽 UDP 連接埠 3544 的 Teredo 流量。
如需關於 Teredo 伺服器如何協助初始通訊的詳細資訊,請參閱本文中的<Teredo 處理程序>。
Windows XP SP2、Windows XP SP1 加裝 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 及 Windows Server "Longhorn" 並不包含 Teredo 伺服器功能。為了方便 Windows 型 Teredo 用戶端電腦間進行通訊,Microsoft 已將 Teredo 伺服器部署在 IPv4 網際網路上。Microsoft 已在 Microsoft Beta 網站 (英文)上發行 Teredo 伺服器轉送技術預覽 (Teredo Server Relay Technology Preview),其中包含為執行 Windows Server 2003 的電腦提供的 Teredo 伺服器功能。
Teredo 轉送是一種 IPv6/IPv4 路由器,可以在 IPv4 網際網路上的 Teredo 用戶端 (使用 Teredo 通道介面) 與 IPv6 專用主機之間轉送封包。在某些情況下,Teredo 轉送會與 Teredo 伺服器互動以便促進 Teredo 用戶端與 IPv6 專用主機之間的初始通訊。Teredo 轉送會接聽 UDP 連接埠 3544 的 Teredo 流量。
如需關於 Teredo 轉送如何協助 Teredo 用戶端與 IPv6 專用主機之間的初始與持續通訊的詳細資訊,請參閱本文中的<Teredo 處理程序>。
Windows XP SP2、Windows XP SP1 加裝 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 及 Windows Server "Longhorn" 並不包含 Teredo 轉送功能,而且 Microsoft 不打算在 IPv4 網際網路上部署任何 Teredo 轉送。個別的網際網路服務提供者 (ISP) 可以部署自己的 Teredo 轉送。傳送流量到 IPv6 網際網路的 IPv6 專用主機時,Windows 型 Teredo 用戶端將與 Teredo 轉送合作。與 Teredo 主機特定轉送通訊並不需要 Teredo 轉送。Microsoft 已在 Microsoft Beta 網站 (英文)上發行 Teredo 伺服器轉送技術預覽 (Teredo Server Relay Technology Preview),其中包含為執行 Windows Server 2003 的電腦提供的 Teredo 轉送功能。
Teredo 用戶端與使用全域位址設定的 IPv6 主機之間的通訊必須通過 Teredo 轉送。連線到 IPv6 網際網路的 IPv6 專用主機必須這麼做。但是,當 IPv6 主機具備 IPv6 與 IPv4 能力,並同時連線到 IPv4 網際網路和 IPv6 網際網路時,應該能透過 IPv4 網際網路在 Teredo 用戶端與 IPv6 主機之間進行通訊,而不用周遊 IPv6 網際網路並通過 Teredo 轉送。
Teredo 主機特定轉送是一個 IPv6/IPv4 節點,同時具有 IPv4 網際網路與 IPv6 網際網路的介面及連線功能,可以透過 IPv4 網際網路直接與 Teredo 用戶端通訊,而無須使用中繼 Teredo 轉送。與 IPv4 網際網路的連線可以通過公用 IPv4 位址或通過私人 IPv4 位址以及鄰近的 NAT。與 IPv6 網際網路的連線可以通過 IPv6 網際網路的直接連線或透過 IPv6 轉換技術,例如 6to4,其中 IPv6 封包會在 IPv4 網際網路上進行通道處理。Teredo 主機特定轉送會接聽 UDP 連接埠 3544 的 Teredo 流量。
Windows XP SP2、Windows XP SP1 加裝 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 及 Windows Server "Longhorn" 包含 Teredo 主機特定轉送功能,如果電腦已指定全域位址,這個功能便會自動啟用。從原始 IPv6 路由器、ISATAP 路由器或 6to4 路由器接收的路由器通告訊息可以指定全域位址。如果電腦沒有全域位址,便會啟用 Teredo 用戶端功能。
Teredo 主機特定轉送可讓 Teredo 用戶端有效地與 6to4 主機、包含非 6to4 全域首碼的 IPv6 主機,或是組織內部使用全域首碼做為位址的 ISATAP 或 6over4 主機進行通訊,前提是雙方主機都得使用支援 Teredo 的 Windows 版本。
Teredo 位址的格式如 [圖 3] 所示。
Teredo 位址包含下列項目:
| • | Teredo 首碼 (3FFE:831F) 前 32 個位元是用於 Teredo 首碼,這點所有 Teredo 位址都相同。Microsoft 實作的 Teredo 目前使用 3FFE:831F::/32 首碼。 |
| • | Teredo 伺服器 IPv4 位址 接下來的 32 個位元包含協助設定此 Teredo 位址之 Teredo 伺服器的 IPv4 公用位址。如需詳細資訊,請參閱本文中的<Teredo 用戶端的初始設定>。 |
| • | 旗標 接下來的 16 個位元是保留給 Teredo 旗標。唯一定義的旗標是高序位位元,即 Cone 旗標。如果連線到網際網路的 NAT 是圓錐式 NAT,便會設定 Cone 旗標。只有在 Teredo 用戶端的初始設定中才會定義連線到網際網路的 NAT 是否是圓錐式 NAT。如需詳細資訊,請參閱本文中的<Teredo 用戶端的初始設定>。 對 Windows Vista 和 Windows Server "Longhorn" 型 Teredo 用戶端而言,[旗標] 欄位中未使用的位元能提供一定程度的保護,防止惡意使用者的位址掃描。Windows Vista 和 Windows Server "Longhorn" 型 Teredo 用戶端的 [旗標] 欄位內的 16 個位元包含下列內容:CRAAAAUG AAAAAAAA。C 位元代表 Cone 旗標。R 位元是保留給未來使用。U 位元代表 Universal/Local 旗標 (設為 0)。G 位元是 Individual/Group 旗標 (設為 0)。A 位元會設為 12 位元的隨機產生數字。利用 A 位元的隨機數字,即使惡意使用者已經擷取到 Teredo 用戶端與 Teredo 伺服器之間的封包初始設定交換並得知其餘部分的 Teredo 位址,他仍然必須在位址掃描中嘗試高達 4,096 (212) 個不同的位址,才能確定 Teredo 用戶端的位址。 |
| • | 遮蔽外部連接埠 接下來的 16 個位元會儲存與此 Teredo 用戶端之所有 Teredo 流量對應的外部 UDP 連接埠的遮蔽版本。當 Teredo 用戶端傳送其初始封包到 Teredo 伺服器時,封包的來源 UDP 連接埠會被 NAT 對應到不同的外部 UDP 連接埠。Teredo 用戶端會維護此連接埠對應,讓這個連接埠對應保留在 NAT 的轉譯表中。因此,主機的所有 Teredo 流量都使用相同的外部對應 UDP 連接埠。Teredo 伺服器會根據 Teredo 用戶端傳送之傳入初始封包的來源 UDP 連接埠,決定外部 UDP 連接埠,然後傳回給 Teredo 用戶端。 外部連接埠是藉由使用 0xFFFF 對外部連接埠進行 XOR 處理加以遮蔽。例如,外部連接埠 5000 的遮蔽版本的十六進位格式為 EC77 (5000 = 0x1388,0x1388 XOR 0xFFFF = 0xEC77)。遮蔽外部連接埠可避免 NAT 在封包轉送的過程中,轉譯這些封包承載內的外部連接埠。 |
| • | 遮蔽外部位址 最後 32 個位元會儲存與這個 Teredo 用戶端的所有 Teredo 流量對應之外部 IPv4 位址的遮蔽版本。正如外部連接埠,當 Teredo 用戶端傳送其初始封包到 Teredo 伺服器時,封包的來源 IP 位址會被 NAT 對應至不同的外部 (公用) 位址。Teredo 用戶端會維護此位址對應,讓這個位址對應保留在 NAT 的轉譯表。因此,主機的所有 Teredo 流量都使用相同的外部對應共用 IPv4 位址。Teredo 伺服器會根據 Teredo 用戶端傳送之傳入初始封包的來源 IPv4 位址,決定外部 IPv4 位址,然後傳回給 Teredo 用戶端。 外部位址是藉由使用 0xFFFFFFFF 對外部位址進行 XOR 處理加以遮蔽。例如,公用 IPv4 位址 131.107.0.1 的遮蔽版本以冒號與十六進位格式表示為 7C94:FFFE (131.107.0.1 = 0x836B0001,0x836B0001 XOR 0xFFFFFFFF = 0x7C94FFFE)。遮蔽外部位址可避免 NAT 在封包轉送的過程中,轉譯這些封包承載內的外部位址。 |
[圖 4] 顯示包含兩個 Teredo 用戶端的 Teredo 設定範例,其中一個 Teredo 用戶端位於圓錐式 NAT 背後 (Teredo 用戶端 A),另一個位於受限式 NAT 背後 (Teredo 用戶端 B)。
Teredo 用戶端 A 會使用下列項目來建構其 Teredo 位址:
| • | 其 Teredo 伺服器位於公用 IPv4 位址 206.73.118.1。 |
| • | 它位於圓錐式 NAT (Cone NAT) 背後。 |
| • | 其 Teredo 流量的外部位址和連接埠分別是 157.60.0.1、UDP 連接埠 4096。 |
因此,利用 3FFE:831F:ServerAddr:Flags:ObscExtPort:ObscExtAddr 的 Teredo 位址格式,則 Teredo 用戶端 A 的 Teredo 位址為 3FFE:831F:CE49:7601:8000:EFFF:62C3:FFFE。這是基於以下幾點:
| • | Microsoft 實作的 Teredo 目前使用 3FFE:831F::/32 首碼。 |
| • | CE49:7601 是 206.73.118.1 的冒號與十六進位版本。 |
| • | 8000 是 [旗標] 欄位而 Cone 旗標設為 1,表示 Teredo 用戶端 A 位於圓錐式 NAT (Cone NAT) 背後。 |
| • | EFFF 是 UDP 連接埠 4096 的遮蔽版本。 |
| • | 62C3:FFFE 是公用 IPv4 位址 157.60.0.1 的遮蔽版本。 |
Teredo 用戶端 B 會使用下列項目來建構其 Teredo 位址:
| • | 其 Teredo 伺服器位於公用 IPv4 位址 206.73.118.1。 |
| • | 它位於受限式 NAT 背後。 |
| • | 其 Teredo 流量的外部位址和連接埠分別是 131.107.0.1、UDP 連接埠 8192。 |
因此,利用 3FFE:831F:ServerAddr:Flags:ObscExtPort:ObscExtAddr 的 Teredo 位址格式,則 Teredo 用戶端 B 的 Teredo 位址為 3FFE:831F:CE49:7601:0:DFFF:7C94:FFFE。這是基於以下幾點:
| • | Microsoft 實作的 Teredo 目前使用 3FFE:831F::/32 首碼。 |
| • | CE49:7601 是 206.73.118.1 的冒號與十六進位版本。 |
| • | 0 是 [旗標] 欄位而 Cone 旗標設為 0,表示 Teredo 用戶端 B 位於受限式 NAT (Restricted NAT) 背後。 |
| • | DFFF 是 UDP 連接埠 8192 的遮蔽版本。 |
| • | 7C94:FFFE 是公用 IPv4 位址 131.107.0.1 的遮蔽版本。 |
Teredo 位址只會指派給 Teredo 用戶端。Teredo 伺服器、Teredo 轉送及 Teredo 主機特定轉送將不指派 Teredo 位址。
本節將說明下列內容:
| • | Teredo 資料封包格式 |
| • | Teredo 泡泡封包 (Bubble Packet) |
| • | Teredo 指示器 |
[圖 5] 顯示 Teredo 資料封包的格式。
Teredo 封包包含下列項目:
| • | IPv4 標頭包含對應至自動通道端點的來源與目標 IPv4 位址,可由 NAT 轉譯。 |
| • | UDP 標頭包含 Teredo 流量的來源與目標 UDP 連接埠,可由 NAT 轉譯。 |
| • | IPv6 標頭包含來源與目標 IPv6 位址,其中至少一個是 Teredo 位址。 |
| • | IPv6 承載包含零個或更多 IPv6 延伸標頭和封裝 IPv6 封包的上層通訊協定資料單位 (Upper Layer Protocol Data Unit,PDU)。 |
Teredo 泡泡封包 (Bubble Packet) 通常是為了建立或維護 NAT 對應而建立,並且由 IPv6 標頭組成但不含 IPv6 承載。[圖 6] 顯示 Teredo 泡泡封包。
在 IPv6 標頭中,[下一個標頭] 欄位設為 59,表示沒有承載。
Teredo 使用兩種指示器,他們是用來包含驗證或位址及連接埠資訊的標頭。
驗證指示器
驗證指示器是用來確保在 Teredo 用戶端與 Teredo 伺服器之間交換路由器請求與路由器通告訊息的安全性。Teredo 用戶端與 Teredo 伺服器雙方都使用秘密金鑰設定,秘密金鑰可用來建構驗證指示器中的驗證資料。驗證指示器位於 UDP 標頭與 IPv6 封包之間。如果原始和驗證指示器都出現在路由器通告訊息中,則驗證指示器會放在原始指示器前面。
驗證指示器的結構如 [圖 7] 所示。
驗證指示器包含下列欄位:
| • | 指示器類型 此雙位元欄位會指定指示器類型。如果是驗證指示器,此欄位會設為 1。Teredo 用戶端與 Teredo 伺服器可以從 IPv6 封包的前兩個位元分辨出驗證指示器,因為 IPv6 封包的四個高序位位元是設為 0110 (6),這會對應到 IPv6 標頭的 [版本] 欄位。 |
| • | 用戶端識別碼長度 此單位元欄位會指定 [用戶端識別] 欄位的長度。 |
| • | 驗證資料長度 此單位元欄位會指定 [驗證值] 欄位的長度。 |
| • | 用戶端識別 此可變長度欄位包含 Teredo 用戶端的識別字串。 |
| • | 驗證值 此可變長度欄位包含此封包的驗證值 (使用共用秘密金鑰計算)。 |
| • | Nonce 此八位元欄位包含亂數,是用來提供封包即時交換的證明,同時防止封包重送攻擊。 |
| • | 確認 此單位元欄位包含的值可指定 Teredo 用戶端是否使用正確的秘密金鑰。在路由器請求訊息中,[確認] 欄位是設為 0。在路由器通告中,如果秘密金鑰正確則 [確認] 欄位設為 0,否則會設為非零的值。 |
在 Windows XP SP2、Windows XP SP1 加裝 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 和 Windows Server "Longhorn" 中,雖然路由器通告 (RA) 與路由器請求 (RS) 訊息中仍然包含驗證指示器 ,但 Teredo 不會使用用戶端識別項或驗證值。沒有用戶端識別項或驗證值的時候,驗證指示器的格式如 [圖 8] 所示。
原始指示器
原始指示器是用來指定 Teredo 用戶端、Teredo 轉送或 Teredo 主機特定轉送的 IPv4 位址和 UDP 連接埠號碼。其用途的範例之一就是當 Teredo 伺服器傳送 RA 訊息以回應 Teredo 用戶端的 RS 訊息。在這種情況下,原始指示器包含相對於 Teredo 用戶端之 Teredo 流量的對應 IPv4 位址與 UDP 連接埠號碼。如需詳細資訊,請參閱本文中的<Teredo 用戶端的初始設定>。
如同驗證指示器,原始指示器也是位於 UDP 標頭與 IPv6 封包之間。原始指示器的結構如 [圖 9] 所示。
![[圖 9]:原始指示器的結構](http://img.microsoft.com/taiwan/technet/images/prodtechnol/winxppro/maintain/tered09.gif)
[圖 9]:原始指示器的結構
原始指示器包含下列欄位:
| • | 指示器類型 此雙位元欄位會指定指示器類型。如果是原始指示器,此欄位會設為 0。Teredo 用戶端可以從 IPv6 封包的前兩個位元分辨出原始指示器,因為 IPv6 封包的四個高序位位元設為 0110 (6),這會對應到 IPv6 標頭的 [版本] 欄位。 |
| • | 遮蔽原始連接埠號碼 此雙位元欄位包含對應於 Teredo 用戶端的 Teredo 流量、Teredo 轉送或 Teredo 主機特定轉送的遮蔽 (使用 0xFFFF 進行 XOR 處理) 外部連接埠。為了取得原始連接埠號碼,[遮蔽原始連接埠號碼] 欄位值會使用 0xFFFF 進行 XOR 處理。 |
| • | 遮蔽原始位址 此四位元欄位包含對應於 Teredo 流量 Teredo 用戶端、Teredo 轉送或 Teredo 主機特定轉送的遮蔽 (使用 0xFFFFFFFF 進行 XOR 處理) 外部 IPv4 位址。為了取得原始位址,[遮蔽原始位址] 欄位值會使用 0xFFFFFFFF 進行 XOR 處理。 |
[圖 10] 顯示三種不同的封包類型,其中包含針對 Windows Teredo 用戶端實作的原始與驗證指示器。
[圖 11] 顯示為了在 Teredo 主機、Teredo 伺服器、Teredo 轉送、Teredo 主機特定轉送及 IPv6 專用主機之間啟用 Teredo 封包傳播的路由。
在 IPv6 網際網路上,會使用路由基礎結構中的 3FFE:831F::/32 路由來轉送使用已定義 Teredo 首碼的封包到最近的 Teredo 轉送。Teredo 伺服器、Teredo 轉送及 Teredo 主機特定轉送具有 3FFE:831F::/32 路由,這個路由會考慮所有使用首碼做為連結上 (On-link) 並使用 Teredo 通道介面的位址。Teredo 通道介面是對轉送封包執行自動 IPv4 與 UDP 封裝的邏輯介面。Teredo 伺服器、Teredo 轉送及 Teredo 主機特定轉送也有指向 IPv6 網際網路的預設路由 (::/0)。一般而言,這個預設路由包含在 IPv6 網際網路上鄰接路由器的 next-hop IPv6 位址,會使用連接到 IPv6 網際網路的實體介面。
Windows XP SP2、Windows XP SP1 加裝 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 及 Windows Server "Longhorn" 的 Teredo 用戶端皆具有預設路由 (::/0),這個路由會考慮所有使用首碼做為連結上並使用 Teredo 通道介面的位址。使用此預設路由時,Next-hop 位址會設為 IPv6 封包中的目標位址,而 Next-hop 介面會設為 Teredo 通道介面。
當 Teredo 通道介面轉送封包時,它會區分下列三種情況:
1. | 目的地是相同 IPv4 連結上的 Teredo 用戶端。 |
2. | 目的地是其他網站上的 Teredo 用戶端。 |
3. | 目的地是 IPv6 網際網路上的節點。 |
連結上 Teredo 目的地
對於發向相同網站中其他 Teredo 主機的封包,Teredo 通道介面會使用泡泡封包交換來代替鄰居搜索 (Neighbor Discovery) 的位址解析作業。泡泡封包交換可確保每個 Teredo 用戶端可以開始向彼此直接傳送封包。如需詳細資訊,請參閱本文中的 <相同連結上之 Teredo 主機間的初始通訊>。
為了確定目標 Teredo 位址是否對應到相同連結上的 Teredo 用戶端,會檢查其多點傳送泡泡快取 (Bubble Cache)。每個 Teredo 用戶端都會在其 IPv4 連結上送出多點傳送泡泡封包,用來與 Teredo 伺服器通訊以指示它在連結上的位置。每個 Teredo 用戶端都會接收其他 Teredo 用戶端的多點傳送泡泡封包,並將他們的 Teredo 位址與 IPv4 位址新增到多點傳送泡泡快取。因此,如果目標 Teredo 位址位於多點傳送泡泡快取中,則目的地就是連結上鄰居。
站台間 Teredo 目的地
對於發向不同站台上其他 Teredo 主機的封包,當雙方的 Teredo 主機都位於受限式 NAT 上時,Teredo 通道介面會使用泡泡封包來代替鄰居搜索的位址解析作業。泡泡封包交換會在受限式 NAT 雙方建立位址與連接埠特定對應,好讓這兩個 Teredo 用戶端能夠直接向彼此傳送封包。如需詳細資訊,請參閱本文中的<不同站台之 Teredo 用戶端間的初始通訊>。
IPv6 網際網路目的地
對於發向 IPv6 網際網路的封包,Teredo 通道介面會使用 ICMPv6 Echo 要求和 Echo 回應訊息來代替鄰居搜索的位址解析作業。ICMPv6 Echo 要求訊息將傳送到目的地。傳回的 ICMP Echo 回應訊息會包含最靠近 IPv6 網際網路上之 IPv6 主機的 Teredo 轉送的 IPv4 位址。如需詳細資訊,請參閱本文中的<從 Teredo 用戶端到 Teredo 主機特定轉送的初始通訊>及<從 Teredo 用戶端到 IPv6 專用主機的初始通訊>。
本節將提供交換 Teredo 封包集以執行下列作業的詳細資訊:
| • | Teredo 用戶端的初始設定 |
| • | 維護 NAT 對應 |
| • | 相同連結上之 Teredo 用戶端間的初始通訊 |
| • | 不同站台之 Teredo 用戶端間的初始通訊 |
| • | 從 Teredo 用戶端到 Teredo 主機特定轉送的初始通訊 |
| • | 從 Teredo 主機特定轉送到 Teredo 用戶端的初始通訊 |
| • | 從 Teredo 用戶端到 IPv6 專用主機的初始通訊 |
| • | 從 IPv6 專用主機到 Teredo 用戶端的初始通訊 |
Windows XP SP2、Windows XP SP1 加裝 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 及 Windows Server "Longhorn" 的 Teredo 用戶端支援上述所有處理程序,而且無須使用者設定或介入便會自動執行。唯一的例外是 Teredo 伺服器上的 IPv4 位址選用設定。
完成 Teredo 用戶端的初始設定步驟是:傳送一系列路由器請求訊息到 Teredo 伺服器,以便確定 Teredo 位址,以及用戶端是否位於圓錐式、受限式或對稱式 NAT 後面。[圖 12] 顯示初始設定處理程序。
Teredo 用戶端的初始設定包含下列處理程序:
1. | 從 Teredo 用戶端傳送路由器請求 (RS) 訊息到慣用 Teredo 伺服器 (Teredo 伺服器 1)。Teredo 用戶端從設定 Cone 旗標的連結-本機位址來傳送 RS。 |
2. | Teredo 伺服器 1 以路由器通告 (RA) 訊息回應。由於 RS 已經設定 Cone 旗標,因此 Teredo 伺服器 1 會從其他 IPv4 位址來傳送 RA。如果 Teredo 用戶端收到 RA,就表示它位於圓錐式 NAT 後面。 |
3. | 若未收到 RA,則 Teredo 用戶端會從未設定 Cone 旗標的連結-本機位址傳送另一個 RS。 |
4. | Teredo 伺服器 1 會以 RA 回應。因為 RS 未設定 Cone 旗標,因此 Teredo 伺服器 1 會從對應到 RS 的目標 IPv4 位址之來源 IPv4 位址傳送 RA。如果 Teredo 用戶端收到 RA,就表示它位於受限式 NAT 後面。 |
5. | 為了確定 Teredo 用戶端不是在對稱式 NAT 後面,它會傳送另一個 RA 到次要 Teredo 伺服器 (Teredo 伺服器 2)。 |
6. | Teredo 伺服器 2 會以 RA 回應。Teredo 用戶端根據兩方 Teredo 伺服器收到之 RA 的原始指示碼,比較其中的對應位址與 UDP 連接埠。如果不同,則 NAT 是將相同的內部位址與連接埠號碼對應到不同的外部位址與連接埠號碼。Teredo 用戶端判斷 NAT 為對稱式 NAT,且無法使用 Teredo 進行通訊。 |
根據接收到的 RA (上一個處理程序的步驟 2 或 4),Teredo 用戶端會從下列項目建構其 Teredo 位址:
| • | 前 64 個位元設為接收到之 RA 的首碼資訊選項中包含的值。Teredo 伺服器通告的 64 位元首碼是由 Teredo 首碼 (32 位元) 與 Teredo 伺服器的 IPv4 位址 (32 位元) 所組成。 |
| • | 接下來的16 位元會是 0x8000 (圓錐式 NAT) 或 0x0 (受限式 NAT) |
| • | 接下來的 16 位元會根據 RA 中的原始指示器設為其中的外部 UDP 連接埠號碼 |
| • | 最後 32 位元會根據 RA 中的原始指示器設為其中的外部 IP 位址 |
Windows XP SP2、Windows XP SP1 加裝 Advanced Networking Pack for Windows XP、Windows Server 2003 加裝 Service Pack 1、Windows Vista 及 Windows Server "Longhorn" 中的 Teredo 用戶端會自動嘗試決定 Teredo 伺服器的 IPv4 位址,方法是解析名稱 teredo.ipv6.microsoft.com。或者,您可以使用 netsh interface ipv6 set teredo servername= 命令來設定 Teredo 伺服器的 IPv4 位址。
[圖 13] 顯示 Teredo 用戶端如何針對 Teredo 流量維護 NAT 對應。
Teredo 用戶端會定期 (預設為每 30 秒) 傳送單一泡泡封包到 Teredo 伺服器。Teredo 伺服器會丟棄泡泡封包並傳送回應。定期的泡泡封包會重新整理 NAT 轉譯表中的 IP 位址/UDP 連接埠對應。否則,對應會變成過時並被移除。如果對應不存在,所有從 Teredo 伺服器 (受限式 NAT) 到 Teredo 主機的輸入 Teredo 流量 (圓錐式 NAT) 或輸入 Teredo 流量便會被 NAT 丟棄。Teredo 用戶端可以從回應確定其 Teredo 流量的外部位址與連接埠號碼是否變更。
[圖 14] 顯示相同連結上之 Teredo 用戶端間的初始通訊。
![[圖 14]:相同連結上之 Teredo 用戶端間的初始通訊](http://img.microsoft.com/taiwan/technet/images/prodtechnol/winxppro/maintain/tered14.gif)
[圖 14]:相同連結上之 Teredo 用戶端間的初始通訊
為了從 Teredo 用戶端 A 傳送初始通訊封包到相同連結上的 Teredo 用戶端 B,將使用下列處理程序:
1. | Teredo 用戶端 A 傳送泡泡封包到 Teredo IPv4 搜索位址 (Discovery Address),這是一個保留的 IPv4 多點傳送位址 (實際位址需由 NAT 決定)。在泡泡封包的 IPv6 標頭中,目標位址會設為 Teredo 用戶端 B 的 Teredo 位址。 |
2. | 從 Teredo 用戶端 A 接收到多點傳送泡泡封包時,Teredo 用戶端 B 會確定 Teredo 用戶端 A 的連結上 IPv4 位址與用於 Teredo 流量的 UDP 連接埠,並傳送多點傳送泡泡封包到 Teredo 用戶端 A 做為回應。從 Teredo 用戶端 B 接收到單點傳送泡泡封包時,Teredo 用戶端 A 會確定 Teredo 用戶端 A 的連結上 IPv4 位址與用於 Teredo 流量的 UDP 連接埠。 |
3. | Teredo 用戶端 A 傳送初始通訊封包到 Teredo 用戶端 B。 |
位於不同站台的 Teredo 用戶端之間的初始通訊需視這些站台使用的是圓錐式 NAT 或受限式 NAT 而定。
圓錐式 NAT
[圖 15] 顯示當兩邊的站台均使用圓錐式 NAT 時,不同站台上 Teredo 用戶端之間的初始通訊。
當 Teredo 用戶端雙方都位於圓錐式 NAT 背後時,各個 Teredo 用戶端的 Teredo 流量之 NAT 轉譯表項目會允許來自任何來源 IP 位址或來源 UDP 連接埠的流量。因此,Teredo 用戶端 A 可以直接傳送封包到 Teredo 用戶端 B,而無須使用泡泡封包來建立額外的 NAT 轉譯表項目。
受限式 NAT
[圖 16] 顯示當兩邊的站台均使用受限式 NAT 時,不同站台上 Teredo 用戶端之間的初始通訊。
為了從 Teredo 用戶端 A 傳送初始通訊封包到 Teredo 用戶端 B,將使用下列處理程序:
1. | Teredo 用戶端 A 直接傳送泡泡封包到 Teredo 用戶端 B。因為 Teredo 用戶端 B 位於受限式 NAT 背後,因此不允許來自任意來源 IPv4 位址與 UDP 連接埠號碼的 Teredo 流量,除非有來源相關 NAT 轉譯表項目。假設沒有此項目,受限式 NAT 便會丟棄泡泡封包。但是,當 Teredo 用戶端 A 的受限式 NAT 轉送泡泡封包時,會建立來源相關 NAT 轉譯表項目,這個項目允許未來從 Teredo 用戶端 B 傳送的封包轉送到 Teredo 用戶端 A。 |
2. | Teredo 用戶端 A 透過 Teredo 伺服器 2 (Teredo 用戶端 B 的 Teredo 伺服器) 傳送泡泡封包到 Teredo 用戶端 B。泡泡中的 IPv4 目標位址會設為 Teredo 伺服器 2 的 IPv4 位址,這是 Teredo 用戶端 A 根據 Teredo 用戶端 B 的 Teredo 位址的第三個及第四個區塊所決定的。 |
3. | Teredo 伺服器 2 會處理封包,確定 IPv6 目標位址適用於 Teredo 用戶端,然後將泡泡封包轉送到 Teredo 用戶端 B。因為有 Teredo 伺服器 2 的 Teredo 流量的現有來源相關對應,因此 Teredo 用戶端 B 的受限式 NAT 會轉送封包。 |
4. | Teredo 用戶端 B 會將自己的泡泡封包直接傳送到 Teredo 用戶端 A,藉此回應從 Teredo 用戶端 A 接收到的泡泡封包。因為 Teredo 用戶端 A 的受限式 NAT 具有來自 Teredo 用戶端 B 的 Teredo 流量的來源相關對應 (在步驟 1 中,由 Teredo 用戶端 A 傳送的初始泡泡封包 所建立),所以泡泡封包會轉送到 Teredo 用戶端 A。 |
5. | 從 Teredo 用戶端 B 接收到泡泡封包時,Teredo 用戶端 A 會確定雙方 NAT 都有來源相關 NAT 對應。Teredo 用戶端 A 直接傳送初始通訊封包到 Teredo 用戶端 B。 |
從 Teredo 用戶端到 Teredo 主機特定轉送的初始通訊需視 Teredo 用戶端是位於圓錐式 NAT 或是受限式 NAT 後面而定。
圓錐式 NAT
[圖 17] 顯示當 Teredo 用戶端位於圓錐式 NAT 後面時,從 Teredo 用戶端到 Teredo 主機特定轉送的初始通訊。
為了從 Teredo 用戶端傳送初始通訊封包到 Teredo 主機特定轉送,將使用下列處理程序:
1. | Teredo 用戶端 A 透過自己的 Teredo 伺服器傳送 ICMPv6 Echo 要求訊息到 Teredo 主機特定轉送。 |
2. | Teredo 伺服器接收 ICMPv6 Echo 要求訊息,並經由 IPv6 網際網路轉送到 Teredo 主機特定轉送,或經由 IPv4 網際網路進行通道處理。 |
3. | Teredo 主機特定轉送以 ICMPv6 Echo 回應進行回應並傳送到 Teredo 用戶端 A 的 Teredo 位址。由於 Teredo 主機特定轉送具有 Teredo 路由 (3FFE:831F::/32) 與 Teredo 通道見面,因此 Teredo 主機特定轉送會直接傳送封包給 Teredo 用戶端 A。 |
4. | 接收到來自 Teredo 主機特定轉送的 Echo 回應時,Teredo 用戶端會傳送初始通訊封包到 Teredo 主機特定主送的 IPv4 位址與 UDP 連接埠。 |
後續在 Teredo 用戶端與 Teredo 主機特定轉送之間的所有封包都將直接傳送。
受限式 NAT
[圖 18] 顯示當 Teredo 用戶端位於受限式 NAT 後面時,從 Teredo 用戶端到 Teredo 主機特定轉送的初始通訊。
為了從 Teredo 用戶端傳送初始通訊封包到 Teredo 主機特定轉送,將使用下列處理程序:
1. | Teredo 用戶端透過自己的 Teredo 伺服器傳送 ICMPv6 Echo 要求訊息到 Teredo 主機特定轉送。 |
2. | Teredo 伺服器接收 ICMPv6 Echo 要求訊息,並經由 IPv6 網際網路轉送到 Teredo 主機特定轉送,或經由 IPv4 網際網路進行通道處理。 |
3. | Teredo 主機特定轉送確定 Teredo 用戶端位於受限式 NAT 後面。如果 Teredo 轉送原本要傳送 ICMPv6 Echo 要求訊息到 Teredo 用戶端,NAT 將會丟棄此訊息,因為來自 Teredo 主機特定轉送的 Teredo 流量並無任何來源相關對應。因此,Teredo 主機特定轉送會經由 IPv4 網際網路上的 Teredo 伺服器,傳送泡泡封包到 Teredo 用戶端。 |
4. | Teredo 伺服器接收來自 Teredo 主機特定轉送的泡泡封包。Teredo 伺服器將泡泡封包轉送到 Teredo 用戶端,並加上包含 Teredo 主機特定轉送之 IPv4 位址與 UDP 連接埠號碼的原始指示器。因為 NAT 中有來自 Teredo 伺服器的 Teredo 流量的來源相關對應,因此這個泡泡封包將轉送到 Teredo 用戶端。 |
5. | Teredo 用戶端根據接收到的泡泡封包中的原始指示器,確定 Teredo 主機特定轉送的 IPv4 位址與 UDP 連接埠。為了建立來自 Teredo 主機特定轉送的 Teredo 流量的來源相關對應,Teredo 用戶端會傳送泡泡封包到 Teredo 主機特定轉送。 |
6. | 根據從 Teredo 用戶端接收的泡泡封包,與排入佇列等待轉送的封包 (ICMPv6 Echo 要求訊息) 相對應,Teredo 主機特定轉送確定 Teredo 用戶端的受限式 NAT 中目前有來源相關 NAT 對應。Teredo 主機特定轉送將 ICMPv6 Echo 回應訊息轉送到 Teredo 用戶端。 |
7. | 此時會從 Teredo 用戶端傳送初始通訊封包到 Teredo 主機特定轉送的 IPv4 位址與 UDP 連接埠。 |
後續在 Teredo 用戶端與 Teredo 主機特定轉送之間的所有封包都將直接傳送。
從 Teredo 主機特定轉送到 Teredo 用戶端的初始通訊需視 Teredo 用戶端是位於圓錐式 NAT 或是受限式 NAT 後面而定。
圓錐式 NAT
[圖 19] 顯示當 Teredo 用戶端位於圓錐式 NAT 後面時,從 Teredo 主機特定轉送到 Teredo 用戶端的初始通訊。
為了從 Teredo 主機特定轉送傳送初始通訊封包到 Teredo 用戶端,Teredo 主機特定轉送判斷 Teredo 用戶端位於圓錐式 NAT 後面。因此,它會直接傳送初始通訊封包給 Teredo 用戶端。
為了確認初始通訊封包的 IPv6 位址並非詐騙且與 Teredo 主機特定轉送一致,Teredo 用戶端會使用本文中<從 Teredo 用戶端到 Teredo 主機特定轉送的初始通訊>(針對圓錐式 NAT) 一節內的步驟 1-3,與 Teredo 主機特定轉送執行 ICMPv6 Echo 要求/Echo 回應訊息交換。完成此交換後,Teredo 用戶端會傳送初始通訊封包的回應至 Teredo 主機特定轉送。
受限式 NAT
[圖 20] 顯示當 Teredo 用戶端位於受限式 NAT 後面時,從 Teredo 主機特定轉送到 Teredo 用戶端的初始通訊。
為了從 Teredo 主機特定轉送傳送初始通訊封包到 Teredo 用戶端,將使用下列處理程序:
1. | Teredo 主機特定轉送會經由 IPv4 網際網路上的 Teredo 伺服器,傳送泡泡封包到 Teredo 用戶端。 |
2. | Teredo 伺服器接收來自 Teredo 主機特定轉送的泡泡封包。Teredo 伺服器會將泡泡轉送到 Teredo 用戶端,並加上包含 Teredo 主機特定轉送之 IPv4 位址與 UDP 連接埠號碼的原始指示器。因為 NAT 中有來自 Teredo 伺服器的 Teredo 流量的來源相關對應,因此這個泡泡封包將轉送到 Teredo 用戶端。 |
3. | Teredo 用戶端根據接收到的泡泡封包中的原始指示器,確定 Teredo 主機特定轉送的 IPv4 位址與 UDP 連接埠。為了建立來自 Teredo 轉送的 Teredo 流量的來源相關對應,Teredo 用戶端會傳送泡泡封包到 Teredo 主機特定轉送。 |
4. | 根據接收的泡泡封包,與排入佇列等待轉寄的封包 (來自 Teredo 主機特定轉送的封包) 相對應,Teredo 主機特定轉送確定 Teredo 用戶端的受限式 NAT 中目前有來源相關的 NAT 對應。Teredo 主機特定轉送傳送初始通訊封包給 Teredo 用戶端。 |
為了確認初始通訊封包的 IPv6 位址並非詐騙且與 Teredo 主機特定轉送一致,Teredo 用戶端會使用本文中的<從 Teredo 用戶端到 Teredo 主機特定轉送的初始通訊>(針對受限式 NAT) 一節內的步驟 1-6,與 Teredo 主機特定轉送執行 ICMPv6 Echo 要求/Echo 回應訊息交換。完成此交換後,Teredo 用戶端會傳送初始通訊封包的回應至 Teredo 主機特定轉送。
從 Teredo 用戶端到 IPv6 專用主機的初始通訊需視 Teredo 用戶端是位於圓錐式 NAT 或是受限式 NAT 後面而定。
圓錐式 NAT
[圖 21] 顯示當 Teredo 用戶端位於圓錐式 NAT 後面時,從 Teredo 用戶端到 IPv6 專用主機的初始通訊。
為了從 Teredo 用戶端傳送初始通訊封包到 IPv6 專用主機,將使用下列處理程序:
1. | 為了傳送初始通訊封包到 IPv6 專用主機,Teredo 用戶端必須先確定最靠近 IPv6 專用主機的 Teredo 轉送的 IPv4 位址與 UDP 連接埠。Teredo 用戶端 A 透過自己的 Teredo 伺服器傳送 ICMPv6 Echo 要求訊息到 IPv6 專用主機。 |
2. | Teredo 伺服器接收 ICMPv6 Echo 要求訊息並透過 IPv6 網際網路轉寄到 IPv6 專用主機。 |
3. | IPv6 專用主機以 ICMPv6 Echo 回應進行回應並傳送到 Teredo 用戶端 A 的 Teredo 位址。基於 IPv6 網際網路的路由基礎結構,Teredo 定址封包會轉送到最近的 Teredo 轉送。 |
4. | Teredo 轉送封裝 ICMPv6 Echo 回應訊息,然後直接傳送到 Teredo 用戶端。因為 NAT 是圓錐式 NAT,因此來自 Teredo 轉送的封包會轉送到 Teredo 用戶端。 |
5. | Teredo 用戶端根據 ICMPv6 Echo 回應訊息的來源 IPv4 位址與 UDP 連接埠,確定最靠近 IPv6 專用主機之 Teredo 轉送的 IPv4 位址。此時會從 Teredo 用戶端傳送初始通訊封包到 Teredo 轉送的 IPv4 位址與 UDP 連接埠。 |
6. | Teredo 轉送移除 IPv4 與 UDP 標頭,然後將封包轉送到 IPv6 專用主機。 |
後續在 Teredo 用戶端與 IPv6 專用主機之間傳送的所有封包,都會採取經由 Teredo 轉送這個路徑。
受限式 NAT
[圖 22] 顯示當 Teredo 用戶端位於受限式 NAT 後面時,從 Teredo 用戶端到 IPv6 專用主機的初始通訊。
為了從 Teredo 用戶端傳送初始通訊封包到 IPv6 專用主機,將使用下列處理程序:
1. | 為了傳送初始通訊封包到 IPv6 專用主機,Teredo 用戶端必須先確定最靠近 IPv6 專用主機的 Teredo 轉送的 IPv4 位址。Teredo 用戶端 A 透過自己的 Teredo 伺服器傳送 ICMPv6 Echo 要求訊息到 IPv6 專用主機。 |
2. | Teredo 伺服器接收 ICMPv6 Echo 要求訊息並透過 IPv6 網際網路轉送到 IPv6 專用主機。 |
3. | IPv6 專用主機以 ICMPv6 Echo 回應進行回應並傳送到 Teredo 用戶端 A 的 Teredo 位址。基於 IPv6 網際網路的路由基礎結構,Teredo 定址封包會轉送到最近的 Teredo 轉送。 |
4. | Teredo 轉送確定 Teredo 用戶端位於受限式 NAT 後面。如果 Teredo 轉送原本要傳送 ICMPv6 Echo 要求訊息到 Teredo 用戶端,NAT 將會丟棄此訊息,因為來自 Teredo 轉送的 Teredo 流量並無任何來源相關對應。因此,Teredo 轉送會經由 IPv4 網際網路上的 Teredo 伺服器,傳送泡泡封包到 Teredo 用戶端。 |
5. | Teredo 伺服器接收來自 Teredo 轉送的泡泡封包。Teredo 伺服器將泡泡封包轉送到 Teredo 用戶端,並加上包含 Teredo 轉送之 IPv4 位址與 UDP 連接埠號碼的原始指示器。因為 NAT 中有來自 Teredo 伺服器的 Teredo 流量的來源相關對應,因此這個泡泡封包將轉送到 Teredo 用戶端。 |
6. | Teredo 用戶端根據接收到的泡泡封包中的原始指示器,確定最靠近 IPv6 專用主機的 Teredo 轉送的 IPv4 位址。為了建立來自 Teredo 轉送的 Teredo 流量的來源相關對應,Teredo 用戶端會傳送泡泡封包到 Teredo 轉送。 |
7. | 根據接收到的泡泡封包,與排入佇列等待轉送的封包 (ICMPv6 Echo 回應訊息) 相對應,Teredo 轉送確定 Teredo 用戶端的受限式 NAT 中目前有來源相關 NAT 對應。Teredo 轉送會將 ICMPv6 Echo 回應訊息轉送到 Teredo 用戶端。 |
8. | 此時會從 Teredo 用戶端傳送初始通訊封包到 Teredo 轉送的 IPv4 位址與 UDP 連接埠。 |
9. | Teredo 轉送移除 IPv4 與 UDP 標頭,然後將封包轉送到 IPv6 專用主機。 |
後續在 Teredo 用戶端與 IPv6 專用主機之間傳送的所有封包,都會採取經由 Teredo 轉送這個路徑。
從 IPv6 專用主機到 Teredo 用戶端的初始通訊需視 Teredo 用戶端是位於圓錐式 NAT 或是受限式 NAT 後面而定。
圓錐式 NAT
[圖 23] 顯示當 Teredo 用戶端位於圓錐式 NAT 後面時,從 IPv6 專用主機到 Teredo 用戶端的初始通訊。
為了從 IPv6 專用主機傳送初始通訊封包到 Teredo 用戶端,將使用下列處理程序:
1. | IPv6 專用主機傳送初始通訊封包到 Teredo 用戶端。基於 IPv6 網際網路的路由基礎結構,Teredo 定址封包會轉送到最近的 Teredo 轉送。 |
2. | Teredo 轉送判斷 Teredo 用戶端位於圓錐式 NAT 後面。因此,它會從 IPv6 專用主機傳送使用 IPv 與 UDP 標頭封裝的封包到 Teredo 用戶端。 |
接收到這個封包時,Teredo 用戶端會儲存與 Teredo 轉送對應的 IPv4 位址與 UDP 連接埠,好讓回應封包能夠轉送到 Teredo 轉送,接收到此封包的 Teredo 轉送接著會移除 IPv4 與 UDP 標頭,並將 IPv6 封包轉送到 IPv6 專用主機。
為了確認初始通訊封包的 IPv6 位址並非詐騙且與 IPv6 專用主機一致,Teredo 用戶端會使用本文中的<從 Teredo 用戶端到 IPv6 專用主機的初始通訊>(針對圓錐式 NAT) 一節內的步驟 1-4,與 IPv6 專用主機執行 ICMPv6 Echo 要求/Echo 回應訊息交換。完成此交換後,Teredo 用戶端會傳送初始通訊封包的回應至 IPv6 專用主機。
受限式 NAT
[圖 24] 顯示當 Teredo 用戶端位於受限式 NAT 後面時,從 IPv6 專用主機到 Teredo 用戶端的初始通訊。
為了從 IPv6 專用主機傳送初始通訊封包到 Teredo 用戶端,將使用下列處理程序:
1. | IPv6 專用主機傳送封包到 Teredo 用戶端。基於 IPv6 網際網路的路由基礎結構,Teredo 定址封包會轉送到最近的 Teredo 轉送。 |
2. | Teredo 轉送確定 Teredo 用戶端位於受限式 NAT後面。如果 Teredo 轉送原本要傳送封包到 Teredo 用戶端,NAT 將會丟棄此訊息,因為來自 Teredo 轉送的 Teredo 流量並無任何來源相關對應。因此,Teredo 轉送會經由 IPv4 網際網路上的 Teredo 伺服器,傳送泡泡封包到 Teredo 用戶端。 |
3. | Teredo 伺服器接收來自 Teredo 轉送的泡泡封包。Teredo 伺服器將泡泡轉送到 Teredo 用戶端,並加上包含 Teredo 轉送之 IPv4 位址與 UDP 連接埠號碼的原始指示器。因為 NAT 中有來自 Teredo 伺服器的 Teredo 流量的來源相關對應,因此這個泡泡封包將轉送到 Teredo 用戶端。 |
4. | Teredo 用戶端根據接收到的泡泡封包中的原始指示器,確定最靠近 IPv6 專用主機的 Teredo 轉送的 IPv4 位址。為了建立來自 Teredo 轉送的 Teredo 流量的來源相關對應,Teredo 用戶端會傳送泡泡封包到 Teredo 轉送。 |
5. | 根據接收的泡泡封包,與排入佇列等待轉送的封包 (IPv6 專用主機的封包) 相對應,Teredo 轉送確定 Teredo 用戶端的受限式 NAT 中目前有來源相關 NAT 對應。Teredo 轉送會將封包轉送到 Teredo 用戶端。 |
為了確認初始通訊封包的 IPv6 位址並非詐騙且與 IPv6 專用主機一致,Teredo 用戶端會使用本文中的<從 Teredo 用戶端到 IPv6 專用主機的初始通訊>(針對受限式 NAT) 一節內的步驟 1-7,與 IPv6 專用主機執行 ICMPv6 Echo 要求/Echo 回應訊息交換。完成此交換後,Teredo 用戶端會傳送初始通訊封包的回應至 IPv6 專用主機。
若要在執行 Windows XP 加裝 Service Pack 2 或 Windows Server 2003 加裝 Service Pack 1 的電腦上使用 Teredo 用戶端或主機特定轉送,應用程式開發人員必須執行下列動作:
| • | 使用同時支援 IPv4 與 IPv6 的新 Windows Sockets 2 程式設計項目 (功能與結構) 以確保應用程式與 IPv6 相容。如需詳細資訊,請參閱《Windows Sockets 應用程式的 IPv6 指南》(英文)。 |
| • | 將 IPV6_PROTECTION_LEVEL Windows Sockets 通訊端選項設為 PROTECTION_LEVEL_UNRESTRICTED 層級,以便在應用程式中啟用 Teredo。如需詳細資訊,請參閱 <使用 IPV6_PROTECTION_LEVEL>(英文)。您也可以透過 System.Net.Sockets (英文) .NET Framework 類別來設定這個選項。 |
| • | 建立 Windows Firewall 的例外以允許來路不明的傳入 Teredo 流量。使用 Windows 防火牆 API (英文) 為指派給 Teredo 流量的 UDP 連接埠建立連接埠例外。 |
為了確保在應用程式執行時能夠使用 Teredo,應用程式開發人員應該在安裝應用程式的過程中,執行下列動作:
| • | 使用 netsh interface ipv6 install 命令來安裝 IPv6。Windows 防火牆會保護使用者電腦防止來路不明的傳入 IPv6 流量,就像 IPv4 流量的情況一樣。 |
| • | 使用 netsh interface ipv6 set teredo client 命令啟用 Teredo。 |
或者,您可以在每次執行應用程式時,測試是否已安裝 IPv6,然後視需要安裝 IPv6 並啟用 Teredo。
您也應該通知使用者正在安裝 IPv6 以及正在啟用 Teredo。
Teredo 是一項位址指派與主機對主機自動通道技術,當 IPv6/IPv4 主機位於一或多個 IPv4 NAT 後端時,Teredo 可提供單點傳送 IPv6 連線。Teredo 通道封包會以 IPv4 UDP 訊息的方式傳送。Teredo 伺服器與 Teredo 轉送可促進 Teredo 通訊。Teredo 主機特定轉送是一種不使用 Teredo 位址的 IPv6/IPv4,但是它無須在通訊路徑中使用 Teredo 轉送,即可與 Teredo 用戶端通訊。關於取得 Teredo 位址、維護 NAT 對應,以及在 Teredo 用戶端、Teredo 主機特定轉送與 IPv6 專用主機之間執行初始通訊,都有已定義的程序。在各個情況下執行的初始通訊處理程序需視 Teredo 用戶端是位於圓錐式 NAT 或是受限式 NAT 後面而定。
請參閱下列資源以取得進一步的資訊:
| • | |
| • | |
| • | |
| • | 如需有關 Windows XP 的最新資訊,請瀏覽 Windows XP 網站:http://www.microsoft.com/taiwan/windowsxp/default.mspx。 |