# Cisco-HSRP協議 ![image](https://hackmd.io/_uploads/SJ037W2FWx.png) ## HSRP原理 HSRP 是由 Cisco Systems 提出的 第一跳備援協定(FHRP, First Hop Redundancy Protocol),主要目的就是: `確保 LAN 的 Default Gateway 不會因為單一 Router 故障而中斷。` ## HSRP 核心概念 在一個 LAN 中會有 兩台或以上的 Router,但 Client 只會看到一個 Gateway IP。 HSRP 一個 group 裡面會有 3 種角色: |角色 |功能| | -------- | -------- | |Active Router |真正轉送封包的 Router| |Standby Router |備援 Router| |Virtual Router |虛擬 Gateway| HSRP 會建立三個 IP: | 類型 | 說明 | | -------- | -------- | | Real IP | Router 自己的 IP | | Virtual IP | Client 的 Default Gateway | | Virtual MAC | 對應 Virtual IP 的 MAC | ![image](https://hackmd.io/_uploads/rJtE2W3K-l.png) ## Virtual Router MAC HSRP 會創造一個 虛擬 MAC Address ``` EX:0000.0C07.ACXX ``` | 部分 | 意義 | | ------- | ---------- | | 0000.0C | Cisco OUI | | 07AC | HSRP 固定碼 | | XX | HSRP Group | HSRP Group會將十進制改為十六進制 ## HSRP Message HSRP Router 之間會互相發送 Hello packet | 項目 | 值 | | --------- | --------- | | Protocol | UDP | | Port | 1985 | | Multicast | 224.0.0.2 | | TTL | 1 | ## HSRP Hello 機制 Active Router每3秒發 Hello給Standby Router若10秒沒收到則Standby接管 | Timer | 預設 | | ----- | ---- | | Hello | 3 秒 | | Hold | 10 秒 | ## HSRP 狀態 HSRP 有 6 個狀態(State Machine),Router 會依序在這些狀態之間轉換。 | State | 說明 | 備註 | | ------- | --------------- | --------------------------------------------------------- | | Initial | 啟動 | | | Learn | 學習 Virtual IP | 如果設定裡沒有指定 Virtual IP就會從 Hello packet 裡學習。 | | Listen | 監聽 | 只監聽,不參與選舉 | | Speak | 參與選舉 | 發送 Hello,參與選舉 | | Standby | 備援 | | | Active | 主 Router | | 當一台 Router 啟用 HSRP 時,它會依序經過幾個狀態,這些狀態代表它在 HSRP 選舉與運作中的角色變化。 `Router 啟動 → 學習虛擬閘道 → 監聽網路 → 參與選舉 → 成為 Active 或 Standby` ### 1. Initial(初始化) 當 Router 剛啟動 HSRP 時,它會進入 Initial 狀態。 在這個狀態下: * HSRP process 剛開始 * Router 尚未參與任何 HSRP group * 不會傳送 Hello 封包 * 也不會接收或處理 HSRP 封包 簡單說就是:HSRP 還沒真正開始運作。 ### 2. Learn(學習) 接下來 Router 會進入 Learn 狀態。在這個狀態中,Router 會確認 Virtual IP(虛擬閘道)。 有兩種情況: 情況一:有設定 Virtual IP ```例如: standby 50 ip 192.168.1.1 ``` 那 Router 就會直接知道 Gateway。 情況二:沒有設定 Virtual IP Router 會從其他 Router 發送的 HSRP Hello 封包 中學習 Virtual IP。 也就是:從網路上其他 HSRP Router 得知 Gateway 是誰。 ### 3. Listen(監聽) Router 進入 Listen 狀態 時: * 已經知道 Virtual IP * 會開始接收 HSRP Hello * 但 不參與 Active 選舉 這種 Router 通常稱為:Other Router 也就是說,如果一個 HSRP group 有三台 Router: * Router A * Router B * Router C 可能會變成: * Router A → Active * Router B → Standby * Router C → Listen Listen Router 不會轉送 HSRP gateway 流量。 ### 4. Speak(參與選舉) 當 Router 進入 Speak 狀態時,代表: * Router 開始 發送 Hello packet * Router 參與 Active Router 選舉 Hello 封包會送到: ``` 224.0.0.2 UDP port 1985 ``` Router 會比較幾個條件: 1. Priority(優先權) 1. IP Address(若 priority 相同) Priority 預設是: ```100``` Priority 高的 Router 會比較有機會變成 Active。 ### 5. Standby(備援) 當 Router 沒有贏得選舉,但排名第二時,就會進入 Standby 狀態。 Standby Router 的角色是: 持續監聽 Active Router 的 Hello 準備在 Active Router 故障時接管 不會轉送 gateway traffic Hello timer 預設: ``` Hello = 3 秒 Hold = 10 秒 ``` 意思是: 如果 Standby Router 10 秒沒有收到 Active Hello,就會認為 Active 掛掉。 ### 6. Active(主 Router) Active Router 是整個 HSRP group 的 實際 Gateway(Virtual Gatway)。 Active Router 的工作: 1. 回應 Virtual IP 的 ARP 1. 使用 Virtual MAC address 1. 轉送 Client 流量 1. 定期發送 Hello packet Client 實際上是把流量送到**Virtual MAC**,而這個 MAC 目前是 Active Router 在使用。 #### Failover 發生時 假設目前狀態: ``` Router A → Active Router B → Standby ``` 如果 Router A 掛掉 ``` → Router B 偵測不到 Hello → Hold timer 到期 → Router B 變成 Active → Router B 接管 Virtual IP → Router B 使用 Virtual MAC ``` 因為 Virtual MAC 不變,所以: Client 不需要重新 ARP,整個過程通常只需要幾秒。 ## Cisco HSRP 設定範例 Router A ```interface vlan10 interface vlan10 ip address 192.168.1.2 255.255.255.0 standby 1 ip 192.168.1.1 standby 1 priority 120 standby 1 preempt ``` Router B ```interface vlan10 interface vlan10 ip address 192.168.1.3 255.255.255.0 standby 1 ip 192.168.1.1 standby 1 priority 100 standby 1 preempt ```