深入研究自動(dòng)分配IPv6地址的Stateless(無(wú)狀態(tài))與Stateful(有狀態(tài))方式
小慢哥的原創(chuàng)文章,歡迎轉(zhuǎn)載
目錄
? 一. Link-Local Address的生成方式
? 二. Global Address的生成方式
? 三. RA報(bào)文中3個(gè)關(guān)鍵的Flag
? 四. 流程示意圖
? 五. 測(cè)試獲得IP效果
? 六. 應(yīng)用場(chǎng)景(選擇無(wú)狀態(tài)還是有狀態(tài))
? 七. 后續(xù)內(nèi)容
? 附. 參考文檔
一. Link-Local Address的生成方式
生成“鏈路本地地址”,有2種方式
? 手動(dòng)配置
? 自動(dòng)配置
其中“自動(dòng)配置”根據(jù)算法,又分為
? eui64:根據(jù)mac地址換算而來(lái)
? stable_secret:跟隨網(wǎng)絡(luò)環(huán)境的變化而變化,處于固定網(wǎng)絡(luò)環(huán)境時(shí)其值將固定
? random:隨機(jī)生成
二. Global Address的生成方式
生成“全球單播地址”(或者“唯一本地地址”),有2種方式
? 手動(dòng)配置
? 自動(dòng)配置
其中“自動(dòng)配置”根據(jù)獲取方式,又分為
? 無(wú)狀態(tài)(Stateless):根據(jù)路由通告報(bào)文RA(Router Advertisement)包含的prefix前綴信息自動(dòng)配置IPv6地址,組成方式是Prefix + (EUI64 or 隨機(jī))。Stateless也可以稱為SLAAC(Stateless address autoconfiguration)
? 有狀態(tài)(Stateful):通過(guò)DHCPv6方式獲得IPv6地址
其中“有狀態(tài)”又分為2種
? 有狀態(tài)DHCPv6(Stateful DHCPv6):IPv6地址、其他參數(shù)(如DNS)均通過(guò)DHCPv6獲取
? 無(wú)狀態(tài)DHCPv6(Stateless DHCPv6):IPv6地址依然通過(guò)路由通告RA方式生成,其他參數(shù)(如DNS)通過(guò)DHCPv6獲取
為了避免混淆,在此解釋下有狀態(tài)、無(wú)狀態(tài)到底是什么意思:首先,請(qǐng)明確一點(diǎn),有狀態(tài)、無(wú)狀態(tài)僅針對(duì)于IPv6地址分配方式,并不包含其他參數(shù)
? 有狀態(tài):可控、可管理。在網(wǎng)絡(luò)中存在一個(gè)IP地址管理者,它能夠識(shí)別客戶端,根據(jù)不同的客戶端,分配對(duì)應(yīng)的IPv6地址,客戶端與服務(wù)端之間需要維護(hù)IP地址的租期及續(xù)約。目前實(shí)現(xiàn)這種效果的,就是DHCPv6協(xié)議,IP地址管理者就是DHCPv6 Server
? 無(wú)狀態(tài):不可控、難管理。在網(wǎng)絡(luò)中只有網(wǎng)關(guān),沒(méi)有IP地址管理者。因此無(wú)人去識(shí)別客戶端,每個(gè)客戶端根據(jù)網(wǎng)關(guān)發(fā)送的相同的RA報(bào)文內(nèi)容,自行配置IPv6地址
三. RA報(bào)文中3個(gè)關(guān)鍵的Flag
RA報(bào)文中存在3個(gè)關(guān)鍵的flag bit:

? Autonomous flag(簡(jiǎn)稱A flag):表示是否配置無(wú)狀態(tài)IP。在一個(gè)RA報(bào)文中,可存在多個(gè)prefix,比如2401::/64、2402::/64、2403::/64,每個(gè)prefix都可以獨(dú)立配置A flag
? 為on時(shí)(對(duì)應(yīng)bit位為1):表示客戶端應(yīng)當(dāng)在該prefix范圍內(nèi)自動(dòng)生成IPv6地址(客戶端通過(guò)DAD自行保證地址可用),并配置子網(wǎng)路由條目、網(wǎng)關(guān)
? 為off時(shí)(對(duì)應(yīng)bit位為0):表示客戶端不應(yīng)當(dāng)在該prefix范圍內(nèi)自動(dòng)生成IPv6地址,但是可以配置子網(wǎng)路由條目、網(wǎng)關(guān)
? Managed flag(簡(jiǎn)稱M flag):表示是否配置有狀態(tài)IP。M flag是RA報(bào)文的全局參數(shù),一個(gè)RA報(bào)文只有一個(gè)M flag
? 為on時(shí)(對(duì)應(yīng)bit位為1):表示在stateless流程結(jié)束后開(kāi)始stateful流程,也就是告訴客戶端可以通過(guò)DHCPv6來(lái)獲得IPv6地址和其他參數(shù)(如DNS列表)
? 為off時(shí)(對(duì)應(yīng)bit位為0):表示不通過(guò)DHCPv6來(lái)獲得IPv6地址。
? Other flag(簡(jiǎn)稱O flag):表示是否通過(guò)DHCPv6獲得除IP以外的其他參數(shù)(如DNS列表)。O flag也是RA報(bào)文中的全局參數(shù),一個(gè)RA報(bào)文只有一個(gè)O flag。注意:僅當(dāng)M flag為off時(shí),該參數(shù)才會(huì)被讀取。
? 為on時(shí)(對(duì)應(yīng)bit位為1):當(dāng)M flag為on,或者M(jìn) flag為off且至少有一個(gè)A flag為on時(shí),將通過(guò)DHCPv6獲得其他參數(shù)
? 為off時(shí)(對(duì)應(yīng)bit位為0):當(dāng)M flag為on時(shí),依然將通過(guò)DHCPv6獲得其他參數(shù);當(dāng)M flag也為off時(shí),將不通過(guò)DHCPv6獲得其他參數(shù)
四. 流程示意圖
無(wú)狀態(tài)和有狀態(tài)并不是相互對(duì)立的,他們可以同時(shí)存在,也就是一張網(wǎng)卡上可以同時(shí)出現(xiàn)通過(guò)RA生成的IP以及通過(guò)DHCPv6獲得的IP。通過(guò)下面這張筆者繪制的流程圖可知曉其中奧秘。

從圖中可以看到,順序?yàn)椋?/p>
1?? Stateless自動(dòng)配置“鏈路本地地址”
2?? Stateless自動(dòng)配置“全球地址”(或“唯一本地地址”)
3?? Stateful自動(dòng)配置“全球地址”(或“唯一本地地址”)和其他參數(shù),其中Stateful階段中存在Stateful DHCPv6或Stateless DHCPv6
注意:部分客戶端操作系統(tǒng)或網(wǎng)絡(luò)管理器當(dāng)Stateless階段沒(méi)有收到RA報(bào)文后,就到此結(jié)束,不會(huì)走Stateful階段,比如centos 7、Ubuntu 17的默認(rèn)邏輯都是這樣,而windows server 2012就會(huì)繼續(xù)走Stateful階段。
五. 測(cè)試獲得IP效果
測(cè)試環(huán)境:客戶端基于CentOS 7+NetworkManager(即系統(tǒng)默認(rèn)的網(wǎng)絡(luò)管理方式)進(jìn)行測(cè)試
? 網(wǎng)關(guān)會(huì)發(fā)送RA報(bào)文,包含一個(gè)prefix
? DHCPv6 Server會(huì)分配IP、DNS
測(cè)試內(nèi)容:測(cè)試M、O、A flag在所有排列組合的情況下
? 客戶端是否會(huì)通過(guò)RA報(bào)文配置無(wú)狀態(tài)IP
? 客戶端是否會(huì)通過(guò)RA報(bào)文配置prefix子網(wǎng)路由
? 客戶端是否會(huì)通過(guò)RA報(bào)文配置gateway
? 客戶端是否會(huì)通過(guò)DHCPv6獲得有狀態(tài)IP
? 客戶端是否會(huì)通過(guò)DHCPv6獲得DNS
測(cè)試結(jié)果:

六. 應(yīng)用場(chǎng)景(選擇無(wú)狀態(tài)還是有狀態(tài))
何時(shí)采用無(wú)狀態(tài)、何時(shí)采用有狀態(tài),關(guān)鍵看應(yīng)用場(chǎng)景。核心在于是否需要控制IP地址,比如保持IP不變,如果需要控制,就采用有狀態(tài);如果無(wú)需控制,就采用無(wú)狀態(tài)。
? 服務(wù)端領(lǐng)域:如對(duì)外提供服務(wù),通常需要采用有狀態(tài)IP。因?yàn)闃I(yè)務(wù)IP的突然變化容易導(dǎo)致業(yè)務(wù)中斷(除非做好服務(wù)發(fā)現(xiàn))
? 客戶端領(lǐng)域:如移動(dòng)設(shè)備、辦公室內(nèi)PC機(jī),只需要上IPv6互聯(lián)網(wǎng),并不需要對(duì)外提供服務(wù),可以采用無(wú)狀態(tài)IP
七. 后續(xù)內(nèi)容
由于篇幅有限,本文尚未貼出實(shí)驗(yàn)的詳細(xì)配置。將會(huì)在《IPv6系列》后續(xù)文章里,貼出實(shí)驗(yàn)的完整信息,包括RA、DHCPv6的配置,以及客戶端的配置,敬請(qǐng)關(guān)注。
附. 參考文檔
http://www.6deploy.eu/tutorials/080-6deploy_ipv6_autoconfiguration_mechs_v0_4.pdf https://cshihong.github.io/2018/02/01/DHCPv6基礎(chǔ)/