FHRP - 閘道器冗餘協議
阿新 • • 發佈:2021-03-15
通常情況下,在終端裝置進入網路前,都會有一個 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 的原因,不能適用於充當二層閘道器的