Cisco-DMVPN技術(shù)原理



Cisco DMVPN技術(shù)原理Cisco DMVPN技術(shù)原理一、背景信息很多公司希望通過公共網(wǎng)絡(luò)安全地將他們各地的辦事處、分公司與公司總部聯(lián)系起來,并且辦事處、分公司之間也可以互聯(lián)過去,唯一的辦法是通過二層的網(wǎng)絡(luò)(Layer-2 network)如ISDN或幀中繼,將所有節(jié)點互聯(lián)起來,實現(xiàn)內(nèi)部的IP互通,并且需要支付昂貴的線路費用現(xiàn)在,這些辦事處、分公司與公司總部之間的互聯(lián)可以通過廉價的Internet接入實現(xiàn),通過IPSec隧道來保證內(nèi)部通訊的安全IPSec通過共享密鑰在通訊的兩端實現(xiàn)數(shù)據(jù)加密,即任意兩端之間都要共享不同的密鑰,所以IPSec隧道其實是點到點的加密隧道,IPSec網(wǎng)絡(luò)就是點到點加密隧道的集合IPSec網(wǎng)絡(luò)的組織形式可以是星形結(jié)構(gòu)(hub?and?spoke)或網(wǎng)狀結(jié)構(gòu)(full mesh)在大多數(shù)網(wǎng)絡(luò)中,數(shù)據(jù)流量主要分布在分支與中心之間,分支與分支之間的流量分布較少,所以星形結(jié)構(gòu)(hub?and?spoke)通常是較好的選擇這也符合傳統(tǒng)的幀中繼互聯(lián)方式,因為星形結(jié)構(gòu)(hub?and?spoke)比網(wǎng)狀結(jié)構(gòu)(full mesh)使用更少的點到點鏈路,可以減少線路費用當通過Internet實現(xiàn)內(nèi)部互聯(lián)時,分支機構(gòu)到分支機構(gòu)(spoke ?to?spoke)的連通不需要額外的通訊費用,并且能夠給企業(yè)內(nèi)部網(wǎng)絡(luò)帶來更好的性能,但是網(wǎng)狀結(jié)構(gòu)(full mesh)的實現(xiàn)和管理有一定困難。
在星形結(jié)構(gòu)中,分支到分支的通信必須跨越中心,這會耗費中心的資源并引入更長的延時尤其是使用IPSec加密時,中心需要在發(fā)送數(shù)據(jù)分支的隧道上解密,并且在接收數(shù)據(jù)分支的隧道上重新加密另一種情況是通訊的兩個分支在同一個城市,而中心在另一個城市,這也會引入不必要的延時當星形IPSec網(wǎng)絡(luò)(hub?and?spoke)規(guī)模不斷增長時,IP數(shù)據(jù)包的動態(tài)路由將非常有意義在過去的幀中繼星形網(wǎng)絡(luò)中,通過在幀中繼鏈路上運行OSPF或EIGRP等動態(tài)路由協(xié)議來通告分支網(wǎng)絡(luò)的可達性,并支持路由的冗余當中心路由器失效后,還可以利用一個備份的路由器接替中心路由器管理分支間的路由在IPSec隧道和動態(tài)路由協(xié)議之間存在一個基礎(chǔ)問題,即動態(tài)路由協(xié)議依賴于多播或廣播包進行路由可達性通告,而IPSec隧道不支持對多播或廣播包進行加密目前解決這一問題的辦法是利用通用路由封裝(GRE)隧道與IPSec加密相結(jié)合的方法通用路由封裝(GRE)由IETF在RFC 2784中定義是一個在任意一種網(wǎng)絡(luò)層協(xié)議上封裝任意一個其它網(wǎng)絡(luò)層協(xié)議的協(xié)議通常將有效載荷封裝在一個GRE包中,然后將此GRE包封裝在其它某協(xié)議中并進行轉(zhuǎn)發(fā)GRE隧道支持運載多播或廣播包到對端,而GRE隧道的數(shù)據(jù)包是單播的,所以GRE隧道的數(shù)據(jù)包可被IPSec加密,也即GRE Over IPSec。
在這一過程中,GRE用于建立隧道,IPSec完成VPN網(wǎng)絡(luò)的加密部分建立GRE隧道時,隧道的一端必須知道另一端的IP地址,并且必須能夠在Internet上路由這就意味著中心和所有分支路由器必須具有靜態(tài)的公共IP地址但是對于規(guī)模較小的分支結(jié)構(gòu)而言,向ISP申請靜態(tài)IP地址的費用是非常昂貴的無論是ADSL還是直接線纜接入,ISP通常使用DHCP提供動態(tài)IP地址,以節(jié)省其地址資源在IPSec VPN上實現(xiàn)動態(tài)路由協(xié)議需要GRE隧道的支持;實現(xiàn)GRE隧道,所有節(jié)點需要靜態(tài)的公網(wǎng)地址,而所有節(jié)點都申請靜態(tài)IP地址是非常困難的所有上述的限制可以總結(jié)為以下四點:1. IPSec利用訪問控制列表(ACL)來決定哪些數(shù)據(jù)是需要加密的所以,每增加一個網(wǎng)絡(luò)連接,都必須在中心和分支的路由器上更新ACL的配置如果路由器是由服務(wù)商管理的,用戶就必須通知服務(wù)商更新IPSec ACL配置,以便新的通訊能夠被加密 2. 在大型的星形網(wǎng)絡(luò)(hub?and?spoke)中,中心路由器的IPSec ACL配置將非常大而且復(fù)雜,甚至是不可用的例如為了管理300個分支路由器,在中心路由器上可能需要3900行的配置,這已經(jīng)大到很難排查錯誤的程度了。
而且如此大的配置可能無法全部裝載到路由器的內(nèi)存中,而不得不放在閃存里面 3. GRE+IPSec需要明確知道隧道兩端的IP地址,而分支路由器外網(wǎng)接口的IP地址通常由其本地ISP動態(tài)提供,每次上線時的IP地址是不同的 4. 如果分支機構(gòu)之間需要通過IPSec VPN直接通信的話,星形的網(wǎng)絡(luò)(hub?and?spoke)就必須改變?yōu)槿W(wǎng)狀結(jié)構(gòu)(full mesh)由于無法確定哪些分支機構(gòu)之間需要通過IPSec VPN直接通信,就必須維護一個全網(wǎng)狀結(jié)構(gòu)的網(wǎng)絡(luò),盡管某些分支機構(gòu)之間是不需要通過IPSec VPN直接通信的由于每臺路由器都與所有其它路由器保持隧道連通,所以在小型路由器上根本無法實現(xiàn),即在較小的分支機構(gòu)也不得不使用更強大的路由器 二、DMVPN解決方案DMVPN是通過多點GRE(mGRE)和下一跳解析協(xié)議(NHRP)與IPSec相結(jié)合實現(xiàn)的在DMVPN解決方案中,利用IPSec實現(xiàn)加密功能,利用GRE或多點GRE(mGRE)建立隧道,利用NHRP解決分支節(jié)點的動態(tài)地址問題DMVPN只要求中心節(jié)點必須申請靜態(tài)的公共IP地址下一跳解析協(xié)議(NHRP)由IETF在RFC 2332中定義用于非廣播多路訪問(NBMA)網(wǎng)絡(luò)上的源節(jié)點(主機或路由器)如何獲取到達目標節(jié)點的“下一跳”的互聯(lián)網(wǎng)絡(luò)層地址和NBMA子網(wǎng)地址。
2.1、IPSec加密的自動起始IPSec利用訪問控制列表(ACL)來決定哪些數(shù)據(jù)是需要加密的也就是說,當有數(shù)據(jù)包匹配所定義的ACL時,IPSec加密隧道便會建立當利用GRE Over IPSec時,GRE隧道的配置已經(jīng)包括了GRE隧道對端的地址,這個地址同時也是IPSec隧道的對端地址所以,沒有必要再單獨為IPSec定義匹配ACL通過將GRE隧道與IPSec綁定,GRE隧道一旦建立,將立刻觸發(fā)IPSec加密2.2、分支到中心(Spoke?to?Hub)的動態(tài)隧道建立DMVPN網(wǎng)絡(luò)中,在中心路由器上沒有關(guān)于分支的GRE或IPSec配置信息,而在分支路由器上則必須依據(jù)中心路由器的外網(wǎng)公共IP地址和NHRP協(xié)議來配置GRE隧道當分支路由器加電啟動時,由ISP處通過DHCP獲取IP地址,并自動建立IPSec加密的GRE隧道,通過NHRP向中心路由器注冊自己的外網(wǎng)端口IP地址這樣做有三方面的原因:1)由于分支路由器外網(wǎng)端口的IP地址是自動獲取的,每次上線時的IP地址可能不同,所以中心路由器無法根據(jù)該地址信息進行配置2)中心路由器不必針對所有分支分別配置GRE或IPSec信息,將大大簡化中心路由器的配置。
所有相關(guān)信息可通過NHRP自動獲取3)當DMVPN網(wǎng)絡(luò)擴展時,無須改動中心路由器和其它分支路由器的配置新加入的分支路由器將自動注冊到中心路由器,通過動態(tài)路由協(xié)議,所有其它分支路由器可以學到這條新的路由,新加入的分支路由器也可以學到到達其它所有路由器的路由信息2.3、分支到分支(Spoke?to?Spoke)的動態(tài)隧道建立在DMVPN網(wǎng)絡(luò)中,分支到中心(Spoke?to?Hub)的隧道一旦建立便持續(xù)存在,但是各分支之間并不需要直接配置持續(xù)的隧道當一個分支需要向另一個分支傳遞數(shù)據(jù)包時,它利用NHRP來動態(tài)獲取目的分支的IP地址在這一過程中,中心路由器充當NHRP服務(wù)器的角色,響應(yīng)NHRP請求,向源分支提供目標分支的公網(wǎng)地址于是,兩個分支之間可以通過mGRE端口動態(tài)建立IPSec隧道,進行數(shù)據(jù)傳輸該隧道在預(yù)定義的周期之后將自動拆除2.4、對動態(tài)路由協(xié)議的支持DMVPN以GRE隧道為基礎(chǔ),而GRE隧道支持多播或廣播(multicast/broadcast)IP包在隧道內(nèi)傳輸所以,DMVPN網(wǎng)絡(luò)支持在IPSec和mGRE隧道之上運行動態(tài)路由協(xié)議需要指出的是,NHRP必須被配置為動態(tài)多播映射,這樣,當分支路由器在NHRP服務(wù)器(中心路由器)上注冊單播映射地址時,NHRP會同時為這個分支路由器建立一個多播/廣播(multicast/broadcast)映射。
我們在前面提到IPSec隧道不支持多播/廣播(multicast/broadcast)包的封裝,而GRE隧道可以將多播/廣播(multicast/broadcast)包封裝到GRE包中,并且GRE包是單播包,可以被IPSec加密在用IPSec對GRE包進行加密時,可以將IPSec配置為傳輸模式,因為GRE已經(jīng)將原始數(shù)據(jù)包封裝為單播的IP包,沒有必要讓IPSec再封裝一個包頭IPSec的傳輸模式要求被加密數(shù)據(jù)包的源和目的地址必須與IPSec隧道兩端的地址相匹配,也就是說GRE隧道兩端的地址與IPSec隧道兩端的地址必須相同由于GRE隧道兩端的路由器與IPSec隧道兩端的路由器是相同的兩臺路由器,所以這一點是可以保證的通過GRE隧道與IPSec加密相結(jié)合,我們可以利用動態(tài)路由協(xié)議在加密隧道兩端的路由器上更新路由表從隧道對端學到的子網(wǎng)在路由表條目里將會包含隧道對端的IP地址作為到達對端子網(wǎng)的下一跳地址這樣,隧道任何一端的網(wǎng)絡(luò)發(fā)生變化,另外一端都會動態(tài)地學習到這個變化,并保持網(wǎng)絡(luò)的連通性而無需改變路由器的配置三、DMVPN網(wǎng)絡(luò)中動態(tài)路由協(xié)議的實現(xiàn)我們在前面提到,在DMVPN網(wǎng)絡(luò)中,分支到中心(Spoke?to?Hub)的隧道一旦建立便持續(xù)存在,而各分支之間并沒有持續(xù)存在的隧道。
這樣,在路由器初始化后,中心路由器會通過持續(xù)存在的隧道向分支路由器宣告其它分支子網(wǎng)的可達路由于是,分支路由器的路由表中到達其它分支子網(wǎng)的“下一跳”地址就是中心路由器的隧道端口地址,而不是其它分支路由器的隧道端口地址如此一來,分支與分支之間的數(shù)據(jù)傳輸還是會通過中心路由器要解決這一問題,必須在中心路由器上設(shè)置為在mGRE隧道端口上宣告某一分支子網(wǎng)的可達路由時“下一跳”地址是該分支路由器的隧道端口地址,而非中心路由器的地址在RIP或EIGRP等距離向量型路由協(xié)議中,通常都實現(xiàn)了水平分割(split horizon)功能,阻止將路由信息發(fā)回到其來源端口,以避免相鄰路由器上路由環(huán)路的產(chǎn)生如果在DMVPN網(wǎng)絡(luò)上運行RIP或EIGRP協(xié)議,則必須關(guān)閉水平分割(split horizon)功能否則,分支路由器將無法學習到通往其它分支子網(wǎng)的路由對RIP而言,這已經(jīng)足夠了,因為RIP向路由信息來源端口發(fā)送該路由時,其“下一跳”地址不被改變,仍然是原來的地址而EIGRP在向路由信息來源端口發(fā)送該路由時,其“下一跳”地址將改變?yōu)樵摱丝诘牡刂匪?,必須關(guān)閉這一特性(EIGRP是CISCO公司的私有協(xié)議,關(guān)閉這一特性的IOS命令為no ip next?hop?self eigrp )。
OSPF是鏈路狀態(tài)型路由協(xié)議,其本身就不存在水平分割(split horizon)問題但在配置OSPF網(wǎng)絡(luò)類型時,應(yīng)配置為廣播型而不要使用點到多點型,否則,仍然會導(dǎo)致上述的問題另外需要注意的是,必須把DMVPN的中心路由器(Hub)配置為OSPF的指定路由器(DR),可以通過指定中心路由器(Hub)有更高的OSPF優(yōu)先權(quán)來實現(xiàn)。
