1. 程式人生 > >FHRP - 閘道器冗餘協議

FHRP - 閘道器冗餘協議

通常情況下,在終端裝置進入網路前,都會有一個 Router 充當網路,作為第一跳的網路地址。但假設路由器發生故障,此時終端裝置就無法再接入網際網路。 為了防止這樣的問題,一般會再加入一臺路由器充當備份。但此時就出現一個問題,閘道器地址配這兩個路由器中的那個? 於是 FHRP 協議出現,可以將多個路由器虛擬成一個路由器提供服務,當提供服務的路由器發生故障時,會自動切換到另一臺上。 FHRP 是這類路由協議的統稱,常見路由協議如下: * HSRP 協議,Cisco 私有協議。 * VRRP 協議,公有協議。 ## HSRP HRSP 熱備份冗餘協議,是 CISCO 私有協議,用於解決閘道器的備份問題。 能夠在不改變組網的情況下,將多臺路由器虛擬成一個虛擬路由器。 ![First Hop Redundancy Protocols (FHRP) – A Primer – AnandSoft Blog](http://www.anandsoft.com/blog/wp-content/uploads/2017/12/HSRP.png) ### HRSP 角色 HRSP 組:由多個 HRSP 路由器組成,屬於同一個 HSRP 組,組內的路由器會交換資訊,每個組由唯一 ID 指定。經過選舉會推選出 Active 路由器和 Standby 路由器。 HSRP 虛擬路由:對每個 HSRP 組,抽象出的虛擬路由器。作為我拿過來。具有虛擬 IP 和 MAC。虛擬出來的 IP 作為閘道器地址。 Active 路由器:HSRP 中實際轉發資料包的路由器,每個 HRSP 組中,僅有一個 active 路由器,並繫結虛擬 IP,用於響應請求。 Stand by 路由器:在 HSRP 組中,處於監聽狀態的路由器,當 Active 路由器出現問題時,接替工作。 ### HSRP 選舉過程 1. 處於同一 HRSP 組的路由器會向組播地址 224.0.0.2 傳送 Hello 報文,使用 UDP 1985 埠。 2. 然後⽐較 Hello 報⽂中的優先順序,擁有最⾼優先順序(預設為100,範圍為1~255)的裝置將成為活動路由器。 3. 最後優先順序⼀樣則⽐較接⼝ IP 地址,選⼤的。 ### HSRP狀態 * Initial:初始化狀態,當接⼝UP的時候或某些配置變更時 * Listen:路由器已獲知虛擬IP,開始偵聽其他同組HSRP路由器的Hello訊息 * Speak:傳送週期的Hello同時參與Active/Standby路由器的選舉 * Standby:成為Standby路由器,同時週期性的傳送Hello,持續偵聽Active路由器的Hello訊息以便在其失效後接替其位置 * Active:成為Active路由器,響應PC對於虛擬IP的ARP請求,同時週期性傳送Hello訊息以宣告⾃⼰的存活狀態 ### HSRP 版本 | HSRPV1 | HSRPV2 | | --------------------------------------------- | ---------------------------------------------- | | IPv4 | HSRPv4/v6 | | Group numbers 0 - 255 | Group numbers 0 -4095 | | Virtual MAC: 0000:0C07:ACxx (xx 來源 HSRP 組) | Virtual MAC: 0000:0C9F:Fxxx (xxx 來源 HSRP 組) | | 廣播地址:224.0.0.2 | 廣播地址:224.0.0.102 | ### HSRP 特性 * 在 Active 路由器中負責分發虛擬 IP 和 MAC * Active 路由器會每三秒給 Standby 路由器傳送 Hello 報文,如果 10s 未傳送,Standby 會成為 Master 宣告 Active 路由器死亡。 * 支援開啟搶佔功能,預設未開啟,開啟後,可配置立即搶佔和延時搶佔。 * 支援追蹤功能,用於檢測當某個介面或路由條目丟失時,降低其 HSRP 優先順序。 * 每個介面最多支援 255 個 HSRP 組,可在一定意義上實現負載。 * HSRP 支援明文和 MD5 認證。 ### HSRP 實驗1 ![](https://img2020.cnblogs.com/blog/1861307/202103/1861307-20210315154024202-975307510.png) 將 R1 和 R2 配置 HRSP 協議,down 掉 R1,網路依然正常。 ``` # R1 inter Eth0/0 standby 1 ip 192.168.1.254 standby 1 priority 120 show standby # R2 inter Eth0/0 standby 1 192.168.1.254 standby 1 priority 100 ``` ### HSRP 實驗2 ![](https://img2020.cnblogs.com/blog/1861307/202103/1861307-20210315154100780-676407011.png) 準備工作 1 - 4: ``` # PC 5: IP 閘道器 VPC5> ip 10.1.1.1/24 10.1.1.251 # PC 6: VPC6> ip 20.1.1.1/24 20.1.1.252 # SW3: vlan 10,20 ! hostname SW3 ! interface Ethernet0/0 switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/1 switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/2 switchport access vlan 10 switchport mode access ! interface Ethernet0/3 switchport access vlan 20 switchport mode access ! # SW1 vlan 10,20 ip routing ! hostname SW1 ! interface Ethernet0/0 switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/1 switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/2 no switchport ip address 100.1.1.1 255.255.255.0 ! interface Vlan10 ip address 10.1.1.251 255.255.255.0 ! interface Vlan20 ip address 20.1.1.251 255.255.255.0 ! router eigrp 1 network 100.1.1.0 0.0.0.255 network 10.1.1.251 0.0.0.255 network 20.1.1.251 0.0.0.255 ! # SW2 vlan 10,20 ip routing ! hostname SW2 ! interface Ethernet0/0 switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/1 switchport trunk encapsulation dot1q switchport mode trunk ! interface Ethernet0/2 no switchport ip address 200.1.1.1 255.255.255.0 ! interface Vlan10 ip address 10.1.1.252 255.255.255.0 ! interface Vlan20 ip address 20.1.1.252 255.255.255.0 ! ! router eigrp 1 network 200.1.1.0 0.0.0.255 network 10.1.1.252 0.0.0.255 network 20.1.1.252 0.0.0.255 ! # Router ! hostname R1 ! interface Loopback0 ip address 1.1.1.1 255.255.255.0 ! interface Ethernet0/0 ip address 100.1.1.2 255.255.255.0 duplex auto ! interface Ethernet0/1 ip address 200.1.1.2 255.255.255.0 duplex auto ! router eigrp 1 network 1.1.1.1 0.0.0.0 network 100.1.1.0 0.0.0.255 network 200.1.1.0 ! ``` 配置成功後,PC 5 可以 ping 通 PC6. 並且可以在 SW1 或 2 看到如下的路由資訊: ``` SW2#show ip route Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2 i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, * - candidate default, U - per-user static route o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP a - application route + - replicated route, % - next hop override, p - overrides from PfR Gateway of last resort is not set 1.0.0.0/24 is subnetted, 1 subnets D 1.1.1.0 [90/409600] via 200.1.1.2, 00:31:52, Ethernet0/2 10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks C 10.1.1.0/24 is directly connected, Vlan10 L 10.1.1.252/32 is directly connected, Vlan10 20.0.0.0/8 is variably subnetted, 2 subnets, 2 masks C 20.1.1.0/24 is directly connected, Vlan20 L 20.1.1.252/32 is directly connected, Vlan20 100.0.0.0/24 is subnetted, 1 subnets D 100.1.1.0 [90/307200] via 200.1.1.2, 00:31:52, Ethernet0/2 200.1.1.0/24 is variably subnetted, 2 subnets, 2 masks C 200.1.1.0/24 is directly connected, Ethernet0/2 L 200.1.1.1/32 is directly connected, Ethernet0/2 ``` 配置 SW1 為 VLAN 10 的根橋 ID. 配置 SW2 為 VLAN 20 的根橋 ID. ``` # SW1 SW1(config)#spanning-tree vlan 10 priority 0 SW1(config)#spanning-tree vlan 20 priority 4096 # SW2 SW2(config)#spanning-tree vlan 10 priority 4096 SW2(config)#spanning-tree vlan 20 priority 0 ``` 現在用 PC5 Ping 1.1.1.1: ``` trace to 1.1.1.1, 8 hops max, press Ctrl+C to stop 1 10.1.1.251 0.893 ms 0.852 ms 2.083 ms 2 *100.1.1.2 0.654 ms (ICMP type:3, code:3, Destination port unreachable) * ``` 用 PC6 Ping 1.1.1.1: ``` VPC6> trace 1.1.1.1 trace to 1.1.1.1, 8 hops max, press Ctrl+C to stop 1 20.1.1.252 0.402 ms 0.327 ms 0.378 ms 2 *200.1.1.2 0.754 ms (ICMP type:3, code:3, Destination port unreachable) * ``` 可以發現 VLAN 10 走 SW1 ,VLAN 20 走 SW2. 配置 HSRP : ``` # 配置 Vlan 10 HSRP: SW1(config)#int vlan 10 SW1(config)#standby 1 ip 10.1.1.254 SW1(config)#standby 1 priority 120 SW2(config)#int vlan 10 SW2(config)#standby 1 ip 10.1.1.254 SW2(config)#standby 1 priority 100 # 配置 Vlan 20 HSRP: SW1(config)#int vlan 20 SW1(config)#standby 2 ip 20.1.1.254 SW1(config)#standby 2 priority 100 SW2(config)#int vlan 20 SW2(config)#standby 2 ip 20.1.1.254 SW2(config)#standby 2 priority 120 ``` 此時將 PC5 和 PC 6 的閘道器改為:10.1.1.254 和 20.1.1.254. 然後 shutdown SW1 vlan 10,可以發現依然可以訪問 1.1.1.1 只不過現在走 SW2. 這條備份鏈路。 接著將 Vlan1 10 介面開啟, 但發現無法將 VLAN 10 的 Active 恢復 SW1,這時需要開啟搶佔功能: ``` SW1(config)#interface Vlan 10 SW1(config-if)#standby 1 preempt ``` 開啟認證功能: ``` SW2(config)#int vlan 10 SW2(config-if)#standby 1 authentication md5 key-string cisco SW1(config)#int vlan 10 SW1(config-if)#standby 1 authentication md5 key-string cisco ``` 開啟鏈路跟蹤功能, 當 SW1 或 SW2 上行鏈路出現問題,立即進行切換: ``` SW1(config)# track 1 inerface e0/2 line-protocol SW1(config)#int vlan 10 # 呼叫跟蹤鏈路 track1 SW1(config-if)#standby 2 track 1 decrement 30 # 搶佔等待時間 10 SW2(config-if)#standby 2 preempt delay minimum 10 SW2(config)# track 1 inerface e0/2 line-protocol SW2(config)#int vlan 20 SW2(config-if)#standby 2 track 1 decrement 30 SW2(config-if)#standby 2 preempt delay minimum 10 ``` ## VRRP VRRP 本身是公有協議,和 HSRP 非常類似,用於解決閘道器備份的問題。 ### VRRP 角色 VRRP 組:由多個 VRRP 路由器組成,屬於同一個 VRRP 組,組內的路由器會交換資訊,每個組由唯一 ID 指定。經過選舉會推選出 Active 路由器和 Standby 路由器。 VRRP 虛擬路由:對每個 HSRP 組,抽象出的虛擬路由器。作為我拿過來。具有虛擬 IP 和 MAC。虛擬出來的 IP 作為閘道器地址。 Master 路由器:HSRP 中實際轉發資料包的路由器,每個 HRSP 組中,僅有一個 Master 路由器,並繫結虛擬 IP,用於響應請求。 backup 路由器:在 HSRP 組中,處於監聽狀態的路由器,當 Master 路由器出現問題時,接替工作。 ### VRRP 特性 * 在 VRRP 組中的路由器,通過 Advertise 報文互動。 * 報文間隔時間為 1 s,失效時間為 3s + (256 - 優先順序) / 256 * VRRP 使用 224.0.0.18 為組播地址,協議號為 112 * 每個介面最多支援 256 個組,可以實現像 HRSP 一樣的負載分攤。 * VRRP 和 HSRP 不同的是,VRRP 虛擬出的來 IP 可以和同一網路下的實際物理 IP 相同。稱為 IP 擁有者,優先順序為最大 255. * 優先順序範圍:0 - 255,可配置範圍為 1 - 254, 255 是 IP 擁有者,0 是在關閉 VRRP 程序觸發 * 虛擬 MAC 地址為:000.5e00.01xx (xx 為 VRRP 組ID) * VRRP 預設開啟搶佔功能 ### VRRP 狀態 * Init 狀態:初始化狀態 * 如果虛擬 IP 和物理 IP 一樣,表示為 IP 擁有者,立即變成 Master 狀態。 * 其他情況,都會轉化為 Backup 狀態。 * Backup 狀態:備份狀態 * 等待時滯時間後,先發送 Hello 報文的成為 master. * Master 狀態:實際轉發狀態 ## GLBP GLBP 思科私有協議,和 VRRP 不同,組內可有多臺 Active,能實現真正意義的上的負載分擔。能提供一個虛擬 IP 和多個 MAC 地址並分配給 PC。 當 PC 在解析閘道器時,由於一個 IP 對應多個 MAC 地址,可將流量分配到不同的 MAC 地址所對應的裝置上,實現負載分攤。 ![img](https://www.cisco.com/en/US/i/000001-100000/70001-75000/72001-73000/72264.jpg) ### GLBP 角色 * AVG(Active Virtual Gateway):在每個組中,分配 MAC 地址給成員 * Active AVG 預設不能自動強佔,只能手動強佔。 * AVF(Active Virtual Forwarder):組內實際轉發的成員 * 每組最多 4 個,每個 AVF 都有一個虛擬的 MAC 地址(0007-b400-XXYY,XX 表示組號,YY代表轉發者編號) * 如果組內成員超過 4 個,最先成為 AVF 成為 Primary 成員,其餘為 Secondary 成員(不參與轉發,處於等待狀態)。 * 如果 Primary AVF 中的權重值小於,Secondary AVF 成員中的權重值,會被替換。 * BVG(Backup Virtual Gateway):充當分配 MAC 地址的備份,防止單點故障 ### 選舉過程 通過 Hello 報文互動,數值越大,優先順序越高。如果優先順序一樣,選 IP 地址大的。 ### GLBP 特性 負載分攤模式: * 加權負載均衡:取決於 AVF 閘道器的權重值 * 主機負載均衡:確保主機一直使用同一個虛擬 MAC 地址,根據主機實現負載均衡 * 迴圈負載均衡:預設模式,按照順序分配 ### GLBP 配置 ```` # R1 inter Eth0/0 glbp 1 ip 192.168.1.254 show glbp ```` ### GLBP 的問題 需要注意的是 GLBP 不能用在二層鏈路上,因為二層鏈路上存在生成樹協議,存在阻塞埠,進一步導致次優路徑。 ## 總結 本篇共提到了三個協議,用於解決閘道器單點故障的問題。 從目前使用的情況看,VRRP 由於是公有協議使用的更多些。HSRP 和 GLBP 由於是思科的私有協議,僅能跑在思科裝置上。 從配置的角度看,VRRP 和 HSRP 非常類似,其中概念也較為相似。僅在命名和選舉的計算方式稍有不同。 從流量的負載角度看,GLBP 更加優秀一些,相比 VRRP 和 HSRP,實現的是真正意義上的負載分攤。但由於其存在多個 MAC 的原因,不能適用於充當二層閘道器的