IPv6系列-徹底弄明白有狀態與無狀態配置IPv6地址

深入研究自動分配IPv6地址的Stateless(無狀態)與Stateful(有狀態)方式

小慢哥的原創文章,歡迎轉載


目錄

▪ 一. Link-Local Address的生成方式
▪ 二. Global Address的生成方式
▪ 三. RA報文中3個關鍵的Flag
▪ 四. 流程示意圖
▪ 五. 測試獲得IP效果
▪ 六. 應用場景(選擇無狀態還是有狀態)
▪ 七. 後續內容
▪ 附. 參考文檔


一. Link-Local Address的生成方式

生成“鏈路本地地址”,有2種方式

▷ 手動配置
▷ 自動配置

其中“自動配置”根據算法,又分爲

▷ eui64:根據mac地址換算而來
▷ stable_secret:跟隨網絡環境的變化而變化,處於固定網絡環境時其值將固定
▷ random:隨機生成


二. Global Address的生成方式

生成“全球單播地址”(或者“唯一本地地址”),有2種方式

▷ 手動配置
▷ 自動配置

其中“自動配置”根據獲取方式,又分爲

▷ 無狀態(Stateless):根據路由通告報文RA(Router Advertisement)包含的prefix前綴信息自動配置IPv6地址,組成方式是Prefix + (EUI64 or 隨機)。Stateless也可以稱爲SLAAC(Stateless address autoconfiguration)
▷ 有狀態(Stateful):通過DHCPv6方式獲得IPv6地址

其中“有狀態”又分爲2種

▷ 有狀態DHCPv6(Stateful DHCPv6):IPv6地址、其他參數(如DNS)均通過DHCPv6獲取
▷ 無狀態DHCPv6(Stateless DHCPv6):IPv6地址依然通過路由通告RA方式生成,其他參數(如DNS)通過DHCPv6獲取

爲了避免混淆,在此解釋下有狀態、無狀態到底是什麼意思:首先,請明確一點,有狀態、無狀態僅針對於IPv6地址分配方式,並不包含其他參數

▷ 有狀態:可控、可管理。在網絡中存在一個IP地址管理者,它能夠識別客戶端,根據不同的客戶端,分配對應的IPv6地址,客戶端與服務端之間需要維護IP地址的租期及續約。目前實現這種效果的,就是DHCPv6協議,IP地址管理者就是DHCPv6 Server
▷ 無狀態:不可控、難管理。在網絡中只有網關,沒有IP地址管理者。因此無人去識別客戶端,每個客戶端根據網關發送的相同的RA報文內容,自行配置IPv6地址


三. RA報文中3個關鍵的Flag

RA報文中存在3個關鍵的flag bit:

Autonomous flag(簡稱A flag):表示是否配置無狀態IP。在一個RA報文中,可存在多個prefix,比如2401::/64、2402::/64、2403::/64,每個prefix都可以獨立配置A flag

▪ 爲on時(對應bit位爲1):表示客戶端應當在該prefix範圍內自動生成IPv6地址(客戶端通過DAD自行保證地址可用),並配置子網路由條目、網關
▪ 爲off時(對應bit位爲0):表示客戶端不應當在該prefix範圍內自動生成IPv6地址,但是可以配置子網路由條目、網關

Managed flag(簡稱M flag):表示是否配置有狀態IP。M flag是RA報文的全局參數,一個RA報文只有一個M flag

▪ 爲on時(對應bit位爲1):表示在stateless流程結束後開始stateful流程,也就是告訴客戶端可以通過DHCPv6來獲得IPv6地址和其他參數(如DNS列表)
▪ 爲off時(對應bit位爲0):表示不通過DHCPv6來獲得IPv6地址。

Other flag(簡稱O flag):表示是否通過DHCPv6獲得除IP以外的其他參數(如DNS列表)。O flag也是RA報文中的全局參數,一個RA報文只有一個O flag。注意:僅當M flag爲off時,該參數纔會被讀取。

▪ 爲on時(對應bit位爲1):當M flag爲on,或者M flag爲off且至少有一個A flag爲on時,將通過DHCPv6獲得其他參數
▪ 爲off時(對應bit位爲0):當M flag爲on時,依然將通過DHCPv6獲得其他參數;當M flag也爲off時,將不通過DHCPv6獲得其他參數


四. 流程示意圖

無狀態和有狀態並不是相互對立的,他們可以同時存在,也就是一張網卡上可以同時出現通過RA生成的IP以及通過DHCPv6獲得的IP。通過下面這張筆者繪製的流程圖可知曉其中奧祕。

從圖中可以看到,順序爲:

1️⃣ Stateless自動配置“鏈路本地地址”
2️⃣ Stateless自動配置“全球地址”(或“唯一本地地址”)
3️⃣ Stateful自動配置“全球地址”(或“唯一本地地址”)和其他參數,其中Stateful階段中存在Stateful DHCPv6或Stateless DHCPv6

注意:部分客戶端操作系統或網絡管理器當Stateless階段沒有收到RA報文後,就到此結束,不會走Stateful階段,比如CentOS 7、Ubuntu 17的默認邏輯都是這樣,而windows server 2012就會繼續走Stateful階段。


五. 測試獲得IP效果

測試環境:客戶端基於CentOS 7+NetworkManager(即系統默認的網絡管理方式)進行測試

▪ 網關會發送RA報文,包含一個prefix
▪ DHCPv6 Server會分配IP、DNS

測試內容:測試M、O、A flag在所有排列組合的情況下

▪ 客戶端是否會通過RA報文配置無狀態IP
▪ 客戶端是否會通過RA報文配置prefix子網路由
▪ 客戶端是否會通過RA報文配置gateway
▪ 客戶端是否會通過DHCPv6獲得有狀態IP
▪ 客戶端是否會通過DHCPv6獲得DNS

測試結果


六. 應用場景(選擇無狀態還是有狀態)

何時採用無狀態、何時採用有狀態,關鍵看應用場景。核心在於是否需要控制IP地址,比如保持IP不變,如果需要控制,就採用有狀態;如果無需控制,就採用無狀態。

▷ 服務端領域:如對外提供服務,通常需要採用有狀態IP。因爲業務IP的突然變化容易導致業務中斷(除非做好服務發現)
▷ 客戶端領域:如移動設備、辦公室內PC機,只需要上IPv6互聯網,並不需要對外提供服務,可以採用無狀態IP


七. 後續內容

由於篇幅有限,本文尚未貼出實驗的詳細配置。將會在《IPv6系列》後續文章裏,貼出實驗的完整信息,包括RA、DHCPv6的配置,以及客戶端的配置,敬請關注。


附. 參考文檔

http://www.6deploy.eu/tutorials/080-6deploy_ipv6_autoconfiguration_mechs_v0_4.pdf
https://cshihong.github.io/2018/02/01/DHCPv6基礎/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章