華為防火牆VRRP雙機熱備的原理及配置
- 2019 年 11 月 1 日
- 筆記
一、何為雙機熱備? 所謂的雙機熱備無非就是以7X24小時不中斷的為企業提供服務為目的,各種雙機熱備的技術很多,那麼華為使用了這個共有協議的熱備協議——VRRP。
華為的雙機熱備是通過部署兩台或多台防火牆實現熱備及負載均衡,兩台防火牆相互協同工作,猶如一個更大的防火牆。
華為防火牆的雙機熱備包含以下兩種模式:
- 熱備模式:同一時間只有一台防火牆轉發數據,其他防火牆不轉發,但是會同步會話表及server-map表,當目前工作的防火牆宕機以後,備份防火牆接替轉發數據的工作。
- 負載均衡模式:同一時間內,多台防火牆同時轉發數據,並且互為備份,每個防火牆既是主設備,也是備用設備。防火牆之間同步會話表及server-map表。
二、VRRP的概念 VRRP(virtual router redundancy protocol,虛擬路由冗餘協議),用來解決網關單點故障的路由協議。VRRP可以應用在路由器中提供網關冗餘,也可以用在防火牆中做雙機熱備。
VRRP的相關專業術語介紹:
- VRRP路由器:運行VRRP協議的路由器。
- 虛擬路由器:由一個主用路由器和若干個備用路由器組成一個備份組,一個備份組對客戶端提供一個虛擬網關。
- VRID:虛擬路由器標識,用來唯一的標識一個備份組。
- 虛擬IP地址:提供給客戶端的網關地址,也是分配給虛擬路由器的IP地址,在所有的VRRP中配置,只有主用設備提供該IP地址的ARP響應。
- 虛擬MAC地址:基於VRID生成的用於VRRP的MAC地址,在客戶端通過ARP協議解析網關的MAC地址時,主用路由器將提供該MAC地址。
- IP地址擁有者:若將虛擬路由器的IP地址配置為某個成員物理介面的真實IP地址,那麼該成員被稱為IP地址擁有者。
- 優先順序:用於標識VRRP路由器的優先順序,並通過每個VRRP路由器的優先順序選舉主用設備及備用設備。
- 搶佔模式:在搶佔模式下,如果備用路由器的優先順序高於備份組中其他路由器(包括當前的主用路由器),則將立即成為新的主用路由器。
- 非搶佔模式:在非搶佔模式下,如果備用路由器的優先順序高於備份組中其他路由器(包括當前的主用路由器),也不會立即成為主用路由器,直到下一次公平選舉(如重啟設備等)。
三、VRRP的兩種角色
工作在VRRP模式下的路由器有兩種角色,分別是Master路由器和Backup路由器。
- Master路由器:正常情況下由Master路由器負責ARP響應及提供數據包的轉發,並且默認每隔1s向其他路由器通告Master路由器當前狀態資訊。
- Backup路由器:是Master路由器的備用路由器,正常情況下不提供數據包的轉發,當master路由器故障時,在所有的Backup路由器中優先順序最高的路由器將成為新的master路由器,接替轉發數據包的工作,從而保證業務不中斷。
四、VRRP的選舉流程 VRRP選舉master路由器和backup路由器的流程如下: 首先選舉優先順序高的設備成為master路由器,如果優先順序相同,再比較介面的IP地址大小,IP地址大(數值大)的設備將成為master路由器,而備份組中其他的路由器將成為backup路由器。 . 除非手工將路由器配置為IP地址擁有者(優先順序=255),否則VRRP的狀態切換總是先經歷Backup狀態,即使路由器的優先順序最高,也需要從backup狀態過渡到master狀態。此時,backup狀態只是一個瞬間的過渡狀態。 . VRRP中的默認介面優先順序為100,取值範圍為0~255,其中優先順序0是系統保留,優先順序255保留給IP地址擁有者,IP地址擁有者不需要配置優先順序,默認優先順序就是255。 . 五、VRRP的三個狀態
VRRP定義了三種狀態,分別如下:
- Initalize狀態:剛配置了VRRP時的狀態下,在該狀態下,不對VRRP報文做任何處理,當介面shutdown或介面故障時也將進入該狀態。
- Master狀態:當前設備選舉成為master路由器時的一種狀態,該狀態下會轉發數據報文,並周期性地發送VRRP通告報文,當介面關閉或設備宕機後將立即切換至Initialize狀態。
- Backup狀態:當前設備選舉成為備用路由器時的一種狀態,該狀態不轉發任何數據報文,只會接收master路由器發送VRRP通告報文,以便檢測master路由器是否在正常工作,並且還同步主用設備上的狀態資訊。
六、通過VGMP統一管理VRRP的狀態 在網路設備上使用VRRP和在其他情景下(Linux中的KeepAlived也使用了VRRP協議)使用並不一樣,存在的原因如下圖:

從上圖中可以看出,正常情況下PC去往外部網路的數據包通過備份組1的master設備(FW1)轉發,外部網路返回的數據包由備份組2的master設備(FW1)轉發,但是當FW1的G1/0/0介面出現故障時,備份組1可以檢測到這一故障,並將FW2作為備份組1的master設備。PC發起的數據包由備份組1的master設備(FW2)進行轉發,而備份組2的狀態沒有發生任何改變(FW1的G1/0/1介面正常工作),所以由外部網路返回的流量仍然由備份組2的master設備(FW1轉發),顯然,因為FW1的介面G1/0/0故障,數據包無法繼續轉發。 . 造成這種現象的原因就是兩個VRRP備份組獨立工作,所以需要使用VGMP(VRRP組管理協議)來實現對VRRP備份組的統一管理,以保證設備在各個備份組中的狀態一致。VGMP通過在設備(FW1和FW2)上將所有的備份組(備份組1和備份組2)加入一個VGMP組中進行統一管理,一旦檢測到某個備份組(備份組1)中的介面發生變化(如介面進入Initialize狀態),VGMP組將自身優先順序減2,並重新協商VGMP的Active組和standby組。選舉出的Active組將所有的其他備份組(備份組1和備份組2)統一進行狀態切換(備份組1和備份組2中的FW2將成為master設備)。
可以簡單理解為,VGMP就是用來統一設備在不同備份組中的狀態的即可。
VGMP的工作原理如下:
- VGMP組的狀態決定了VRRP備份組的狀態,即設備的角色(如master和backup)不再通過VRRP報文選舉,而是直接通過VGMP統一管理。
- VGMP組的狀態通過比較優先順序決定,優先順序高的VGMP組將成為Active,優先順序低的VGMP組將成為standby。
- 默認情況下,VGMP組的優先順序為45000。
- VGMP根據組內VRRP備份組的狀態自動調整優先順序,一旦檢測到備份組的狀態變成Initialize狀態,VGMP組的優先順序會自動減2。
- VGMP通過心跳線協商VGMP狀態資訊。
在加入VGMP組之後,VRRP中的狀態標識從master和backup變成了active和standby。 1、VGMP的報文封裝 VGMP通過心跳線協商VGMP的狀態資訊,通過發送VGMP報文實現。VGMP報文有以下兩種形式:

如上圖中左邊的網路圖中,心跳線(G1/0/0)和對端的心跳線直連,或者通過二層交換機相連時,發送的報文屬於組播報文,報文封裝中不攜帶UDP頭部資訊,而當心跳線通過三層設備(當然這種情況並不多見)連接時,因為組播報文無法通過三層設備,所以在報文封裝中會額外增加一個UDP頭部消息,此時發送的報文屬於單播。
通過以下命令指定通過介面發送的報文屬於哪種類型的封裝。
[USG6000V1]hrp interface GigabitEthernet 1/0/0 <!--eNSP模擬器中不支援該配置--> [USG6000V1]hrp interface GigabitEthernet 1/0/0 remote 1.1.1.1 <!--hrp命令用來指定用於心跳鏈路的介面編號, 1.1.1.1是心跳線對端介面的IP地址,該地址要求路由可達, 帶remote參數的命令將封裝UDP,並發送單播報文不帶remote參數將發送組播報文-->
關於配置VGMP的其他注意事項:
- 加入了VGMP後,心跳線的作用包含狀態資訊備份(會話表和server-map表)及VGMP狀態協商。
- 華為防火牆在默認情況下放行組播流量(如不帶remote參數的VGMP報文)禁止單播流量(如帶remote參數的VGMP報文),所以如果配置了remote參數,還需要配置local區域和心跳線介面所在的區域之間配置安全策略。
- 配置了VRRP virtual-mac enable的介面不能作為心跳口。
- 如果使用二層介面作為心跳介面,不能直接在二層介面上配置,而是將二層介面加入vlan,在vlan中配置心跳介面。
- eNSPoint模擬器中,即使心跳介面之間相連,也必須配置remote參數,否則無法配置。
2、雙機熱備的備份方式
雙機熱備的備份方式包括以下三種:
- 自動備份:該模式下,和雙機熱備有關的配置只能在主用設備上配置,並自動同步到備用設備中,主用設備自動將狀態資訊同步到備用設備中。
- 手工批量備份:該模式下,主用設備上所有的配置命令和狀態資訊,只有在手工執行批量備份命令時才會自動同步到備用設備。該模式主要應用於主設備和備用設備配置不同步,需要立即進行同步的場景。
- 快速備份:該模式下,不同步配置命令,只同步狀態資訊,在負載均衡方式的雙機熱備環境中,該默認必須啟用,以快速更新狀態資訊。
各個模式的配置命令如下:
(1)開啟雙機熱備功能:
[USG6000V1]hrp enable HRP_S[USG6000V1] <!--開啟雙機熱備功能後,命令提示符發生變化-->
(2)配置自動備份模式:
HRP_M[USG6000V1]hrp auto-sync HRP_M[USG6000V1]security-policy (+B) <!--開啟雙機熱備後,執行可以同步的命令會有(+B)的提示-->
(3)配置手工批量備份模式:
HRP_M<USG6000V1>hrp sync [ config | connection-status ] <!-- 在用戶模式下執行該命令,其中config參數表示手工同步命令配置, connection-status參數表示手工同步狀態資訊。 -->
(4)配置快速備份模式:
HRP_S[USG6000V1]hrp mirror session enable HRP_M[USG6000V1] <!--配置快速備份模式後,開頭會變成HRP_M.....-->
3、關於上游或下游設備的選路問題 當雙機熱備的設備上游或下游是交換機時,是通過VRRP檢測介面或設備的狀態,但當上游或下游設備是路由器時,VRRP無法正常運行(VRRP依靠組播實現故障切換)。華為防火牆的做法是監控其介面狀態,並配置OSPF實現流量切換,通過直接將介面加入VGMP組中,當介面故障時(即使是對端設備故障,本端介面的物理特性也將關閉)VGMP會感知介面狀態變化,從而降低VGMP組的優先順序,從Active狀態切換至standby狀態。而之前的standby組將提升為active狀態,而處於standby的VGMP組在發布OSPF路由時,會自動將cost值增加65500,通過OSPF的自動收斂,最終將流量引導至active組設備中。 七、配置實例 環境如下(別看上面啰嗦了那麼一堆概念,但真正配置起來,簡單的很,但是若要排錯,還是要理解透徹它的工作原理):

聲明:該環境不以實際環境為目的,目的是為了介紹防火牆的雙機熱備,所以這是一個簡化環境。
需求如下:
LSW1和LSW2是二層交換機,FW1、FW2、LSW1、LSW2組成雙機熱備網路,正常情況下,PC1發起的訪問R1的流量通過FW1轉發,當FW1出現故障時,在PC1不做任何調整的前提下,可以自動通過FW2轉發。 開始配置: FW1配置如下:
<USG6000V1>sys <!--進入系統視圖--> <!--以下是在配置相應介面IP--> [USG6000V1]in g1/0/0 [USG6000V1-GigabitEthernet1/0/0]ip add 10.1.1.101 24 [USG6000V1-GigabitEthernet1/0/0]in g1/0/1 [USG6000V1-GigabitEthernet1/0/1]ip add 172.16.1.1 24 [USG6000V1-GigabitEthernet1/0/1]in g1/0/2 [USG6000V1-GigabitEthernet1/0/2]ip add 192.168.1.101 24 [USG6000V1-GigabitEthernet1/0/2]quit <!--以下是在將介面添加至相應區域--> [USG6000V1]firewall zone trust [USG6000V1-zone-trust]add in g1/0/2 [USG6000V1-zone-trust]firewall zone dmz [USG6000V1-zone-dmz]add in g1/0/1 [USG6000V1-zone-dmz]firewall zone untrust [USG6000V1-zone-untrust]add in g1/0/0 [USG6000V1-zone-untrust]quit <!--以下是設置一個策略,放行本地到dmz區域的流量,以便使VGMP報文通過--> [USG6000V1]security-policy [USG6000V1-policy-security]rule name permit_heat [USG6000V1-policy-security-rule-permit_heat]source-zone local [USG6000V1-policy-security-rule-permit_heat]destination-zone dmz [USG6000V1-policy-security-rule-permit_heat]action permit [USG6000V1-policy-security-rule-permit_heat]quit [USG6000V1-policy-security]quit <!--其實在配置完雙機熱備再配置該策略也可以,但是為了保險起見,就先配置上這個策略--> <!--以下是在配置VRRP備份組--> [USG6000V1]in g1/0/0 [USG6000V1-GigabitEthernet1/0/0]vrrp vrid 2 virtual-ip 10.1.1.100 active [USG6000V1-GigabitEthernet1/0/0]in g1/0/2 [USG6000V1-GigabitEthernet1/0/2]vrrp vrid 1 virtual-ip 192.168.1.100 active [USG6000V1-GigabitEthernet1/0/2]quit [USG6000V1]hrp in g1/0/1 remote 172.16.1.2 <!--配置心跳介面,指定對端設備--> [USG6000V1]hrp enable <!--啟用雙機熱備--> HRP_S[USG6000V1]hrp auto-sync <!--配置備份方式為自動備份-->
至此,FW1的配置暫時就完成了。開始配置FW2,FW2的配置與FW1的配置類似,就不寫注釋了 FW2配置如下:
<USG6000V1>sys [USG6000V1]in g1/0/0 [USG6000V1-GigabitEthernet1/0/0]ip add 10.1.1.102 24 [USG6000V1-GigabitEthernet1/0/0]in g1/0/1 [USG6000V1-GigabitEthernet1/0/1]ip add 172.16.1.2 24 [USG6000V1-GigabitEthernet1/0/1]in g1/0/2 [USG6000V1-GigabitEthernet1/0/2]ip add 192.168.1.102 24 [USG6000V1-GigabitEthernet1/0/2]quit [USG6000V1]firewall zone trust [USG6000V1-zone-trust]add in g1/0/2 [USG6000V1-zone-trust]firewall zone untrust [USG6000V1-zone-untrust]add in g1/0/0 [USG6000V1-zone-untrust]firewall zone dmz [USG6000V1-zone-dmz]add in g1/0/1 [USG6000V1-zone-dmz]quit [USG6000V1]security-policy [USG6000V1-policy-security]rule name permit_heat [USG6000V1-policy-security-rule-permit_heat]source-zone local [USG6000V1-policy-security-rule-permit_heat]destination-zone dmz [USG6000V1-policy-security-rule-permit_heat]action permit [USG6000V1-policy-security-rule-permit_heat]quit [USG6000V1-policy-security]quit [USG6000V1]in g1/0/0 [USG6000V1-GigabitEthernet1/0/0]vrrp vrid 2 virtual-ip 10.1.1.100 standby [USG6000V1-GigabitEthernet1/0/0]in g1/0/2 [USG6000V1-GigabitEthernet1/0/2]vrrp vrid 1 virtual-ip 192.168.1.100 standby [USG6000V1-GigabitEthernet1/0/2]quit [USG6000V1]hrp in g1/0/1 remote 172.16.1.1 [USG6000V1]hrp enable HRP_S[USG6000V1]hrp auto-sync
配置至此,雙機熱備狀態已經同步了,現在FW2為備份狀態,多數配置已經無法在FW2上進行,只能在FW1上配置後,自動同步到FW2,那麼現在在FW1配置一條策略,以便允許trust區域訪問untrust區域,並且在FW2防火牆設備上查看是否同步到這條策略。 FW1配置如下:
<!--可以看到每條命令後面自動跟一個「(+B),表示該命令可以同步。」--> HRP_M[USG6000V1]security-policy (+B) HRP_M[USG6000V1-policy-security]rule name test1 (+B) HRP_M[USG6000V1-policy-security-rule-test1]source-zone trust (+B) HRP_M[USG6000V1-policy-security-rule-test1]destination-zone untrust (+B) HRP_M[USG6000V1-policy-security-rule-test1]action permit (+B) HRP_M[USG6000V1-policy-security-rule-test1]quit HRP_M[USG6000V1-policy-security]quit
FW2設備上查看是否有FW1創建的策略:
HRP_S[USG6000V1]security-policy <!--抱歉,備份設備已經進不去安全策略模式了--> Error: The device is in HRP standby state, so this command can not be executed. HRP_S[USG6000V1]dis current-configuration <!--別擔心,還可以查看當前所有策略嘛--> ...................... <!--省略部分內容--> security-policy rule name permit_heat source-zone local destination-zone dmz action permit rule name test1 <!--可以看到剛才創建的名為test1策略已經同步過來了--> source-zone trust destination-zone untrust action permit
配置R1路由器及PC及的IP地址,並ping通。
R1路由器配置如下(R1路由器相當於運營商的公網上的路由器了,這裡只是為了模擬一個這樣的環境):
<Huawei>sys [Huawei]in g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 10.1.1.1 24 [Huawei-GigabitEthernet0/0/0]quit [Huawei]ip route-static 192.168.1.0 24 10.1.1.100 <!-- 添加一條去往內網的路由,在實際環境中,可是不會有這條路由的哦, 實際中一般會將內網的地址映射為和該路由器同一網段的公網IP。 -->
PC1的IP地址配置網關為虛擬IP,PC1的IP地址配置網關為虛擬IP,PC1的IP地址配置網關為虛擬IP PC1和R1路由器進行ping測試(最好在命令最後加「-t」選項,進行持續ping,以便查看會話表,否則會話表會老化,查不到相應數據):

在FW1查看會話表:
HRP_M[USG6000V1]dis firewall session table Current Total Sessions : 24 icmp ×××: public --> public 192.168.1.1:17547 --> 10.1.1.1:2048 icmp ×××: public --> public 192.168.1.1:18059 --> 10.1.1.1:2048 icmp ×××: public --> public 192.168.1.1:14987 --> 10.1.1.1:2048
在FW2查看會話表:
HRP_S[USG6000V1]dis firew se ta Current Total Sessions : 26 icmp ×××: public --> public Remote 192.168.1.1:9099 --> 10.1.1.1:2048 icmp ×××: public --> public Remote 192.168.1.1:9611 --> 10.1.1.1:2048 icmp ×××: public --> public Remote 192.168.1.1:10891 --> 10.1.1.1:2048 icmp ×××: public --> public Remote 192.168.1.1:12171 --> 10.1.1.1:2048
可以看出兩個防火牆上的會話表內容都是不一樣的(但不會影響故障切換)。 那麼現在就可以進行故障切換的驗證咯!
模擬FW1設備故障(關閉FW1的任意一個介面即可,註:此時PC1還在持續pingR1,才可以看到故障切換的效果):
HRP_M[USG6000V1]in g1/0/0 (+B) HRP_M[USG6000V1-GigabitEthernet1/0/0]shutdown <!--「shutdown」命令系統是不會同步到對端防火牆的,要不然就沒得玩了, 你看它後面都沒有 (+B)-->
在關閉介面的後的一兩秒鐘,可以看到PC1丟了一個包,便又恢復正常了,說明故障切換成功。如下:

配置到此結束,下面是關於雙機熱備的一些查詢命令:
<!--查看雙機熱備的狀態資訊,主要看是Role和peer的資訊, Role表示本端,peer表示對端。 Running priority表示本端的優先順序,peer表示對端的優先順序。 --> HRP_S[USG6000V1]display hrp state Role: standby, peer: active (should be "active-standby") Running priority: 44998, peer: 45000 ...................... <!--省略部分內容--> HRP_S[USG6000V1]dis hrp interface <!--查看心跳介面狀態--> GigabitEthernet1/0/1 : running
八、總結
1、兩台防火牆用於心跳線的介面需要加入相同的安全區域。 2、兩台防火牆用於心跳線的介面的編號必須一致,如都是G1/0/1。 3、建議用於雙機熱備的兩台防火牆採用相同的型號,相同的VRP版本。連接同一個設備(路由器或交換機)都使用同一個介面編號。 4、當熱備組中的設備壞掉後,買來新的設備進行加入熱備組時,在配置時,原來壞掉的那台設備在VGMP中配置的是active,哪怕現在備份組中有設備處於active狀態,新買來的設備必須也配置active狀態,否則無法協商。如在上面環境中,FW1配置時配置為active狀態,然後FW1設備down掉了,此時FW2由standby狀態變為active狀態,那麼,此時再買來一台FW3想要重新加入備份組,在配置時,須配置為active。如該條命令:vrrp vrid 1 virtual-ip 192.168.1.100 active。不過還有個弊端,就是配置後,新買的FW3變成了active狀態,但是FW2上有很會話表就同步不了了,因為只有備份設備去同步活躍設備,活躍設備是不會去同步備份設備的狀態的,所以,還是先將FW2重新使用vrrp vrid 1 virtual-ip 192.168.1.100 active這條命令,將原始的狀態變為active狀態,然後在配置FW3時,直接將FW3配置為standby狀態,會話表便可同步成功(關於FW3如何將FW2的安全策略同步過來,我沒有搞明白,如果哪位知道怎麼同步安全策略的,還希望寫在評論中),在FW3加入備份前,我手動配置了相關的安全策略。