天天看點

虛拟路由器備援協定(VRRP)簡介及其原理

1. 前言

VRRP(Virtual Router Redundancy Protocol)協定是用于實作路由器備援的協定,最新協定在RFC3768中定義,原來的定義RFC2338被廢除,新協定相對還簡化了一些功能。

2. 協定說明

2.1 協定

VRRP協定是為消除在靜态預設路由環境下的預設路由器單點故障引起的網絡失效而設計的主備模式的協定,使得在發生故障而進行裝置功能切換時可以不影響内外資料通信,不需要再修改内部網絡的網絡參數。VRRP協定需要具有IP位址備份,優先路由選擇,減少不必要的路由器間通信等功能。

VRRP協定将兩台或多台路由器裝置虛拟成一個裝置,對外提供虛拟路由器IP(一個或多個),而在路由器組内部,如果實際擁有這個對外IP的路由器如果工作正常的話就是MASTER,或者是通過算法選舉産生,MASTER實作針對虛拟路由器IP的各種網絡功能,如ARP請求,ICMP,以及資料的轉發等;其他裝置不擁有該IP,狀态是BACKUP,除了接收MASTER的VRRP狀态通告資訊外,不執行對外的網絡功能。當主機失效時,BACKUP将接管原先MASTER的網絡功能。

配置VRRP協定時需要配置每個路由器的虛拟路由器ID(VRID)和優先權值,使用VRID将路由器進行分組,具有相同VRID值的路由器為同一個組,VRID是一個0~255的正整數;同一組中的路由器通過使用優先權值來選舉MASTER,優先權大者為MASTER,優先權也是一個0~255的正整數。

VRRP協定使用多點傳播資料來傳輸VRRP資料,VRRP資料使用特殊的虛拟源MAC位址發送資料而不是自身網卡的MAC位址,VRRP運作時隻有MASTER路由器定時發送VRRP通告資訊,表示MASTER工作正常以及虛拟路由器IP(組),BACKUP隻接收VRRP資料,不發送資料,如果一定時間内沒有接收到MASTER的通告資訊,各BACKUP将宣告自己成為MASTER,發送通告資訊,重新進行MASTER選舉狀态。

2.2 MASTER選舉

如果對外的虛拟路由器IP就是路由器本身配置的IP位址的話,該路由器始終都是MASTER;否則如果不具備虛拟IP的話,将進行MASTER選舉,各路由器都宣告自己是MASTER,發送VRRP通告資訊,如果收到其他機器的發來的通告資訊的優先級比自己高,将轉回BACKUP狀态,如果相等的話,将比較路由器的實際IP,IP值較大的優先權高。不過如果對外的虛拟路由器IP就是路由器本身的IP的話,該路由器始終将是MASTER,這時的優先級值為255。

2.3 協定狀态機

VRRP協定狀态比較簡單,就三種狀态,初始化,主機,備份機。

                      +---------------+

           +--------->|               |<-------------+

           |          |  Initialize   |              |

           |   +------|               |----------+   |

           |   |      +---------------+          |   |

           |   |                                 |   |

           |   V                                 V   |

   +---------------+                       +---------------+

   |               |---------------------->|               |

   |    Master     |                       |    Backup     |

   |               |<----------------------|               |

初始化:

    路由器啟動時,如果路由器的優先級是255(最高優先級,路由器擁有路由器位址),要發送VRRP通告資訊,并發送廣播ARP資訊通告路由器IP位址對應的MAC位址為路由虛拟MAC,設定通告資訊定時器準備定時發送VRRP通告資訊,轉為MASTER狀态;否則進入BACKUP狀态,設定定時器檢查定時檢查是否收到MASTER的通告資訊。

主機:

    主機狀态下的路由器要完成如下功能:

 設定定時通告定時器;

 用VRRP虛拟MAC位址響應路由器IP位址的ARP請求;

 轉發目的MAC是VRRP虛拟MAC的資料包;

 如果是虛拟路由器IP的擁有者,将接受目的位址是虛拟路由器IP的資料包,否則丢棄;

 當收到shutdown的事件時删除定時通告定時器,發送優先權級為0的通告包,轉初始化狀态;

 如果定時通告定時器逾時時,發送VRRP通告資訊;

 收到VRRP通告資訊時,如果優先權為0,發送VRRP通告資訊;否則判斷資料的優先級是否高于本機,或相等而且實際IP位址大于本地實際IP,設定定時通告定時器,複位主機逾時定時器,轉BACKUP狀态;否則的話,丢棄該通告包;

備機:

   備機狀态下的路由器要實作以下功能:

 設定主機逾時定時器;

 不能響應針對虛拟路由器IP的ARP請求資訊;

 丢棄所有目的MAC位址是虛拟路由器MAC位址的資料包;

 不接受目的是虛拟路由器IP的所有資料包;

 當收到shutdown的事件時删除主機逾時定時器,轉初始化狀态;

 主機逾時定時器逾時的時候,發送VRRP通告資訊,廣播ARP位址資訊,轉MASTER狀态;

 收到VRRP通告資訊時,如果優先權為0,表示進入MASTER選舉;否則判斷資料的優先級是否高于本機,如果高的話承認MASTER有效,複位主機逾時定時器;否則的話,丢棄該通告包;

2.4 ARP查詢處理

當内部主機通過ARP查詢虛拟路由器IP位址對應的MAC位址時,MASTER路由器回複的MAC位址為虛拟的VRRP的MAC位址,而不是實際網卡的MAC位址,這樣在路由器切換時讓内網機器覺察不到;而在路由器重新啟動時,不能主動發送本機網卡的實際MAC位址。如果虛拟路由器開啟的ARP代理(proxy_arp)功能,代理的ARP回應也回應VRRP虛拟MAC位址;

2.5 VRRP應用舉例

            +-----------+      +-----------+

            |   Rtr1    |      |   Rtr2    |

            |(MR VRID=1)|      |(BR VRID=1)|

            |(BR VRID=2)|      |(MR VRID=2)|

    VRID=1  +-----------+      +-----------+  VRID=2

    IP A ---------->*            *<---------- IP B

                    |            |

  ------------------+------------+-----+--------+--------+--------+--

                                       ^        ^        ^        ^

                                       |        |        |        |

                                     (IP A)   (IP A)   (IP B)   (IP B)

                                    +--+--+  +--+--+  +--+--+  +--+--+

                                    |  H1 |  |  H2 |  |  H3 |  |  H4 |

                                    +-----+  +-----+  +--+--+  +--+--+

     Legend:

              ---+---+---+--  =  Ethernet, Token Ring, or FDDI

                           H  =  Host computer

                          MR  =  Master Router

                          BR  =  Backup Router

                           *  =  IP Address

                        (IP)  =  default router for hosts

這是通常VRRP使用拓撲,兩台路由器運作VRRP互為備份,路由器1作為VRID組1的MASTER,IP位址A,VRID組2的BACKUP,路由器2作為VRID組2的MASTER,IP位址B,VRID組1的BACKUP,内部網絡中一部分機器的預設網關位址是IP位址A,一部分是IP位址B,正常情況下以A為網關的資料将走路由器1,以B為網關的資料将走路由器2,如果一台路由器發生故障,所有資料将走另一台路由器。

3. 協定定義

3.1 以太頭

源MAC位址必須為虛拟MAC位址:00-00-5E-00-01-{VRID},VRID為虛拟路由器ID值,16進制格式,是以同一網段中最多有255個VRRP路由器;目的MAC為多點傳播類型的MAC。

3.2 IP頭參數

VRRP包的源位址是本機位址,目的位址必須為224.0.0.18,為一多點傳播位址;IP協定号為112;IP包的TTL值必須為255。

3.3 VRRP協定資料格式

    0                   1                   2                   3

    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|

   |   Auth Type   |   Adver Int   |          Checksum             |

   |                         IP Address (1)                        |

   |                            .                                  |

   |                         IP Address (n)                        |

   |                     Authentication Data (1)                   |

   |                     Authentication Data (2)                   |

其中:

version:版本,4位,在RFC3768中定義為2;

Type:類型,4位,目前隻定義一種類類型:通告資料,取值為1;

Virtual Rtr ID:虛拟路由器ID,8位

Priority:優先級,8位,具備備援IP位址的裝置的優先級為255;

Count IP Addrs:VRRP包中的IP位址數量,8位;

Auth Type:認證類型,8位,RFC3768中認證功能已經取消,此字段值定義0(不認證),為1,2隻作為對老版本的相容;

Adver Int:通告包的發送間隔時間,8位,機關是秒,預設是1秒;

Checksum:校驗和,16位,校驗資料範圍隻是VRRP資料,即從VRRP的版本字段開始的資料,不包括IP頭;

IP Address(es):和虛拟路由器相關的IP位址,數量由Count IP Addrs決定

Authentication Data:RFC3768中定義該字段隻是為了和老版本相容,必須置0。

3.4 接收資料時的必須檢查

收到VRRP資料包時要進行以下驗證,不滿足的資料包将被丢棄:

   -  TTL必須為255;

   -  VRRP版本号必須為2;

   -  一個包中資料字段必須完整;

   -  校驗和必須正确;

   -  必須驗證在接收的網卡上配置了VRID值,而且本地路由器不是路由IP位址的擁有者

   -  必須驗證VVRP認證類型和配置的一緻;

4. 結論

VRRP實作了對路由器IP位址的備援功能,防止了單點故障造成的網絡失效,VRRP本身是熱備形式的,但可以通過互相熱備實作路由器的均衡處理,新版的VRRP較老版簡化了認證處理,實際不再進行資料的認證,這是因為在實際應用中經常出現認證成為造成多個MASTER同時使用的異常情況。

本文轉自 linuxtro 51CTO部落格,原文連結:http://blog.51cto.com/linuxtro/525239,如需轉載請自行聯系原作者

繼續閱讀