Cisco-DMVPN技術(shù)原理



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