運行方法
ISATAP包含一種基於IPv4地址生成IPv6本地鏈路地址的方法,和基於IPv4網路的鄰居發現機制。
地址產生
任何一個希望通過特定IPv4網路使用ISATAP的主機都可以創建虛擬的IPv6網路接口。將主機的IPv4地址比特串加上特定IPv6前綴作為接口的IPv6地址,對於全球單播地址使用fe80::0200:5efe:,對於專用網路地址則使用fe80::0000:5efe:。例如,一個主機IPv4地址為192.0.2.143,則其ISATAP接口的IPv6地址為fe80::0200:5efe:192.0.2.143,轉為完整最短IPv6為fe80::200:5efe:c000:28f(c000:28f為其IPv4地址192.0.2.143的十六進制值)。
鄰居發現
由於ISATAP將IPv4基礎網路視為一個非廣播或多播多路訪問網路的數據鏈路層,不同於乙太網,使其原有的ICMPv6鄰居發現不能如常操作,使ISATAP比6over4的運作有所困難。
對於IPv6數據包來說,IPv4網路是它的物理鏈路層,由於其IPv6地址已經包含了作為鏈路層的地址,即IPv4地址,所以其無需進行鄰居發現。但是缺少多播功能導致其無法進行路由自動發現,所以ISATAP主機必須配置一個潛在路由器列表(potential routers list,PRL),這列表中的路由器通常不需要使用ICMPv6的路由發現來尋獲和確定其是否已線上可運行,並且其只進行單播地址自動配置(通常可以藉此為ISATAP的接口自動配置到其他IPv6前綴)。
實際上,PRL是通過DNS查詢獲得,例如如果本地網路域名為example.com,可通過查詢isatap.example.com。本地網路域名通過IPv4網路上的DHCP或者本地靜態配置獲得。
技術原理
ISATAP過渡技術基本原理如圖1所示。
雙棧主機在與其他主機或路由器通信之前,首先要獲得一個ISATAP地址。雙棧主機先向ISATAP伺服器傳送路由請求,得到一個64位的IPv6地址前綴,然後再加上64位的接口標識符∷0:5EFE:X.X.X.X(這裡的X.X.X.X是雙棧主機的IPv4單播地址),這樣就構成一個ISATAP地址。雙棧主機配置了ISATAP地址後,就成了一個ISATAP客戶機,進而就可以在IPv4域內和其他的ISATAP客戶機進行通信了。一般來說,ISATAP地址的配置既支持無狀態地址自動配置方式,也支持手工配置方式。
1.同一個IPv4域內ISATAP主機間的通信過程
在同一個IPv4域內,兩台ISATAP客戶機的通信過程如下:
①雙棧主機1獲得雙棧主機2的ISATAP地址後,將需要傳送的數據包交給ISATAP接口進行傳送;
②ISATAP從該數據包的IPv6源地址和目的地址中提取出相應的IPv4源和目的地址,並對該數據包用IPv4頭部進行封裝;
③封裝後的數據包按照其IPv4目的地址被傳送到雙棧主機2;
④雙棧主機2接收到該數據包後對其解封裝,得到原始IPv6數據包;
⑤雙棧主機2通過與上述過程類似的過程將應答數據返回給雙棧主機1。
從上面的通信過程中我們可以看出,ISATAP實際上是將IPv4網路作為一個承載平台,通過在其上面建立一個IPv6-in-IPv4自動隧道來完成IPv6通信的。
2. ISATAP主機與其他網路之間的通信過程
ISATAP主機除了可以在ISATAP域內與其他ISATAP主機通信外,還可以通過ISATAP路由器實現與其他網路的通信。比如,ISATAP主機就可以通過ISATAP路由器與IPv6網路中的IPv6伺服器進行通信,其通信原理如圖2所示,通信過程如下:
①ISATAP主機獲得ISATAP地址(站點本地地址),並將下一跳躍點next hop 設為ISATAP路由器的ISATAP地址(站點本地地址);
②當ISATAP主機送出目的地為所在子網路以外的地址時,ISATAP先將IPv6數據包進行IPv4封裝,然後以隧道方式送到ISATAP 路由器的IPv4地址;
③ISATAP路由器除去IPv4包頭後,將IPv6 數據包轉送給IPv6網路中的目的IPv6伺服器;
④IPv6伺服器直接將應答的IPv6數據包發回給ISATAP網路;
⑤在應答IPv6數據包經過ISATAP路由器時,ISATAP路由器先將應答IPv6數據包進行IPv4封裝,然後再轉發給ISATAP主機;
⑥ISATAP主機收到應答數據包後,將數據包去掉IPv4包頭,恢復成原始IPv6數據包。
通過上述步驟,ISATAP主機與IPv6網路中的IPv6伺服器完成了一次完整的數據通信過程。
ISATAP過渡技術
ISATAP過渡技術通過IPv6的鄰居發現機制(參見IETF RFC 2461)來實現路由重定向、鄰居不可達檢測(NUD)和路由下一跳選擇。
ISATAP地址的獲得是由鏈路層IPv4地址通過靜態計算得到的。在獲得了ISATAP地址之後,主機通過傳送鄰居請求和接收鄰居宣告訊息來確認鄰居是否可達。另外,主機還需要執行鄰居不可達檢測。因為是在某一個ISATAP域內實現的,所以它假設IPv4地址是不重複的,這樣ISATAP地址也就不需要進行重複地址檢測。
ISATAP節點在執行路由器和前綴發現時,除了使用鄰居發現中的數據結構前綴列表和默認路由器列表外,ISATAP鏈路還增加了一個新的數據結構——潛在路由器列表(PRL),以及一個新的配置變數PrlRefreshInterval。潛在路由器列表列出潛在的、可供ISATAP節點使用的路由器;變數PrlRefreshInterval用來設定初始化之後連續兩次PRL重新刷新的間隔秒數。
ISATAP過渡技術具有如下優點:
①ISATAP過渡技術所使用的IPv6地址前綴可以是任何合法的IPv6 單點傳播的64 位前綴,包括全球性地址前綴(以2001:,2002:,3ffe:開頭)、鏈路本地前綴(以fe80:開頭)和站點本地前綴(以fec0: 開頭)等等,這使得該項技術很容易與其他過渡技術結合起來使用,尤其是在和6 to 4隧道技術相結合使用時,可以使內部網的雙棧主機非常容易地接入IPv6主幹網;
②ISATAP過渡技術不要求隧道端節點必須具有全球惟一的IPv4地址,只要雙棧主機具有IPv4單播地址即可,不管該地址公有的還是私有的都可以。這樣也就有效地避免了IPv4地址不足的問題;
③ISATAP過渡技術不需要站點提供特殊的IPv4服務(例如多播等),實現起來簡便易行;
④使用ISATAP過渡技術時,在邊界網關上不影響聚合範圍的情況下,能夠在IPv4站點內部署新的IPv6主機,因此可用於內部私有網中各雙棧主機之間進行IPv6通信。
應對策略
由於ISATAP使用隧道技術,所以隧道技術所面臨的網路安全問題也同樣是ISATAP所面臨的網路安全問題,它最容易受到的攻擊就是地址欺騙攻擊。如果不加防範,可以很容易地通過地址欺騙攻擊將大量的協定類型為41的數據包注入到ISATAP鏈路中。ISATAP 網路所受到的地址欺騙攻擊可能來自於ISATAP 網路外部。由於在整個IPv4 站點中都使用ISATAP鏈路,所以對於來自於站點外的攻擊可以通過嚴格限制對站點的訪問來限制對鏈路的訪問,也就是要考慮在網路入口處的數據過濾問題,通過在站點的邊界路由器入口處執行IPv4數據過濾、IPv6數據過濾和協定類型為41的數據包過濾來保證。
ISATAP 網路所受到的地址欺騙攻擊也可能來自於ISATAP 網路內部。站點內的地址欺騙攻擊可以通過一個偽裝成路由器的節點來進行,ISATAP網路內部所有的ISATAP主機都處於相同的鏈路上,這種來自於相同鏈路上的攻擊很難防止,尤其是在ISATAP網路內部存在大量主機的時候。考慮到在PRL中提供了路由器ISATAP 公布的IPv4接口地址,所以可以將這些地址用在安全防範的策略之中。可是,這種防範方法需要保證隨時更新PRL數據,這個操作通過手工實現幾乎是不可能的,而目前還沒有更好的自動實現的解決方案,這也就成了ISATAP技術的最大弱點。
再有,由於站點內的所有ISATAP主機都在同一個IPv6連結上,儘管可以像通常一樣在ISATAP路由器處監控流量,但是由於ISATAP路由器處於站點的邊緣,而且在站點內的主機之間通過ISATAP鏈路傳輸的包並不經過該路由器,因此根本沒有辦法監控和排除出現內部攻擊的可能性。為了有效地防止來自於ISATAP站點內源IPv6地址欺騙的攻擊,需要在路由器的ISATAP接口上啟用緩解地址欺騙攻擊的安全機制,至少ISATAP站點的邊界網關必須記錄地址欺騙源地址的來源。這樣,一旦出現了地址欺騙攻擊,還可以利用這些記錄進行分析,並能夠很快地找出產生地址欺騙攻擊的源頭。
由於ISATAP技術使用RFC 2461所述的鄰居發現協定,而鄰居發現協定最容易受到的攻擊是拒絕服務(DoS)攻擊。因此,這方面的安全問題也需要加以考慮。有關這方面的具體防範措施可參考IETF RFC 2461中的“安全考慮(Security Considerations)”一節。
實現
ISATAP已經在MicrosoftWindows XP、Windows Vista、Windows 7、Windows 8、Windows 10(但在1703更新中默認關閉,1803更新後會移除)、Windows Server 2008、Windows Server 2012、Windows Mobile、Linux和Cisco IOS(自IOS 12.2(14)S、 IOS XE Release 2.1)中實現。
由於專利權利要求,早期在KAME(*BSD)和USAGI(Linux)的核心實現被移除過,然而,IETF智慧財產權披露搜尋引擎報導,該侵權專利的持有者不需要實現者的許可。Linux核心自2.6.35版本實現了核心支持,並提供了一個用戶空間配置工具isatapd。對於之前的Linux核心,開源項目Miredo提供了一個不完整的用戶空間實現,之後版本1.1.6中被移除。
批評
ISATAP通過查詢DNS來構建PRL,因此,對應於OSI模型,其依賴於一個高層協定來構建低層協定。其依賴於IPv4的DNS來避免循環,而不是IPv6路由的構建。然而,有些網路專家認為這這違反了他們認為普遍接受的設計原則,並進一步聲稱這些違規行為會導致協定不健全。
ISATAP有著和6over4一樣的安全風險,也就是IPv4虛擬鏈路需要在網路邊緣被小心地分隔開,以便外部IPv4主機不能假裝成為ISATAP鏈路的一部分。通常是通過將IP協定號為41的IP包(也就是6in4等所使用的IP協定號)使用防火牆來攔截。