IPv6系列-徹底弄明白有狀態(tài)與無狀態(tài)配置IPv6地址
一、Link-Local Address的生成方式
生成“鏈路本地地址”,有2種方式:
- 手動配置
- 自動配置
其中“自動配置”根據(jù)算法,又分為:
- eui64:根據(jù)mac地址換算而來
- stable_secret:跟隨網(wǎng)絡環(huán)境的變化而變化,處于固定網(wǎng)絡環(huán)境時其值將固定
- random:隨機生成
二、Global Address的生成方式
生成“全球單播地址”(或者“唯一本地地址”),有2種方式:
- 手動配置
- 自動配置
其中“自動配置”根據(jù)獲取方式,又分為
- 無狀態(tài)(Stateless):根據(jù)路由通告報文RA(Router Advertisement)包含的prefix前綴信息自動配置IPv6地址,組成方式是Prefix + (EUI64 or 隨機)。Stateless也可以稱為SLAAC(Stateless address autoconfiguration)
- 有狀態(tài)(Stateful):通過DHCPv6方式獲得IPv6地址
其中“有狀態(tài)”又分為2種:
- 有狀態(tài)DHCPv6(Stateful DHCPv6):IPv6地址、其他參數(shù)(如DNS)均通過DHCPv6獲取
- 無狀態(tài)DHCPv6(Stateless DHCPv6):IPv6地址依然通過路由通告RA方式生成,其他參數(shù)(如DNS)通過DHCPv6獲取
為了避免混淆,在此解釋下有狀態(tài)、無狀態(tài)到底是什么意思:首先,請明確一點,有狀態(tài)、無狀態(tài)僅針對于IPv6地址分配方式,并不包含其他參數(shù)
- 有狀態(tài):可控、可管理。在網(wǎng)絡中存在一個IP地址管理者,它能夠識別客戶端,根據(jù)不同的客戶端,分配對應的IPv6地址,客戶端與服務端之間需要維護IP地址的租期及續(xù)約。目前實現(xiàn)這種效果的,就是DHCPv6協(xié)議,IP地址管理者就是DHCPv6 Server
- 無狀態(tài):不可控、難管理。在網(wǎng)絡中只有網(wǎng)關,沒有IP地址管理者。因此無人去識別客戶端,每個客戶端根據(jù)網(wǎng)關發(fā)送的相同的RA報文內(nèi)容,自行配置IPv6地址
三、RA報文中3個關鍵的Flag
RA報文中存在3個關鍵的flag bit:
(1) Autonomous flag(簡稱A flag):表示是否配置無狀態(tài)IP。在一個RA報文中,可存在多個prefix,比如2401::/64、2402::/64、2403::/64,每個prefix都可以獨立配置A flag
- 為on時(對應bit位為1):表示客戶端應當在該prefix范圍內(nèi)自動生成IPv6地址(客戶端通過DAD自行保證地址可用),并配置子網(wǎng)路由條目、網(wǎng)關
- 為off時(對應bit位為0):表示客戶端不應當在該prefix范圍內(nèi)自動生成IPv6地址,但是可以配置子網(wǎng)路由條目、網(wǎng)關
(2) Managed flag(簡稱M flag):表示是否配置有狀態(tài)IP。M flag是RA報文的全局參數(shù),一個RA報文只有一個M flag
- 為on時(對應bit位為1):表示在stateless流程結束后開始stateful流程,也就是告訴客戶端可以通過DHCPv6來獲得IPv6地址和其他參數(shù)(如DNS列表)
- 為off時(對應bit位為0):表示不通過DHCPv6來獲得IPv6地址。
(3) Other flag(簡稱O flag):表示是否通過DHCPv6獲得除IP以外的其他參數(shù)(如DNS列表)。O flag也是RA報文中的全局參數(shù),一個RA報文只有一個O flag。注意:僅當M flag為off時,該參數(shù)才會被讀取。
- 為on時(對應bit位為1):當M flag為on,或者M flag為off且至少有一個A flag為on時,將通過DHCPv6獲得其他參數(shù)
- 為off時(對應bit位為0):當M flag為on時,依然將通過DHCPv6獲得其他參數(shù);當M flag也為off時,將不通過DHCPv6獲得其他參數(shù)
四、流程示意圖
無狀態(tài)和有狀態(tài)并不是相互對立的,他們可以同時存在,也就是一張網(wǎng)卡上可以同時出現(xiàn)通過RA生成的IP以及通過DHCPv6獲得的IP。通過下面這張筆者繪制的流程圖可知曉其中奧秘。
從圖中可以看到,順序為:
- Stateless自動配置“鏈路本地地址”
- Stateless自動配置“全球地址”(或“唯一本地地址”)
- Stateful自動配置“全球地址”(或“唯一本地地址”)和其他參數(shù),其中Stateful階段中存在Stateful DHCPv6或Stateless DHCPv6
注意:部分客戶端操作系統(tǒng)或網(wǎng)絡管理器當Stateless階段沒有收到RA報文后,就到此結束,不會走Stateful階段,比如CentOS 7、Ubuntu 17的默認邏輯都是這樣,而windows server 2012就會繼續(xù)走Stateful階段。
五、測試獲得IP效果
測試環(huán)境:客戶端基于CentOS 7+NetworkManager(即系統(tǒng)默認的網(wǎng)絡管理方式)進行測試:
- 網(wǎng)關會發(fā)送RA報文,包含一個prefix
- DHCPv6 Server會分配IP、DNS
測試內(nèi)容:測試M、O、A flag在所有排列組合的情況下:
- 客戶端是否會通過RA報文配置無狀態(tài)IP
- 客戶端是否會通過RA報文配置prefix子網(wǎng)路由
- 客戶端是否會通過RA報文配置gateway
- 客戶端是否會通過DHCPv6獲得有狀態(tài)IP
- 客戶端是否會通過DHCPv6獲得DNS
測試結果:
六、應用場景(選擇無狀態(tài)還是有狀態(tài))
何時采用無狀態(tài)、何時采用有狀態(tài),關鍵看應用場景。核心在于是否需要控制IP地址,比如保持IP不變,如果需要控制,就采用有狀態(tài);如果無需控制,就采用無狀態(tài)。
- 服務端領域:如對外提供服務,通常需要采用有狀態(tài)IP。因為業(yè)務IP的突然變化容易導致業(yè)務中斷(除非做好服務發(fā)現(xiàn))
- 客戶端領域:如移動設備、辦公室內(nèi)PC機,只需要上IPv6互聯(lián)網(wǎng),并不需要對外提供服務,可以采用無狀態(tài)IP