DMVPN詳解

來源:本站原創 VPN 超過3,263 views圍觀 0條評論

totle

2007-12-24, 16:29

作者:ZHL 泰克實驗室

文章出自:http://bbs.tech-lab.cn/viewthread.php?tid=31261( 轉載請注明出處或net130本版面)

利用IPSec隧道在Internet上進行安全的數據傳輸,是目前公司總部與分支通訊的主要解決方案。它的商業價值,這里就不提了,隨便找個文檔也會侃半天的。

IPSec網絡的拓撲可以是星形結構(hub?and?spoke)也可以是網狀結構(full mesh)。實際應用中,數據流量主要分布在分支與中心之間,分支與分支之間的流量分布較少,所以星形結構(hub?and?spoke)通常是最常用的,并且它更經濟。因為星形結構(hub?and?spoke)比網狀結構(full mesh)使用更少的點到點鏈路,可以減少線路費用。

在星形拓撲中,分支機構到分支機構(spoke ?to?spoke)的連通不需要額外的通訊費用。但在星形結構中,分支到分支的通信必須跨越中心,這會耗費中心的資源并引入延時。尤其在用IPSec加密時,中心需要在發送數據分支的隧道上解密,而在接收數據的分支隧道上重新加密。還有一種情況是:通訊的兩個分支在同一個城市,而中心在另一個城市,這便引入了不必要的延時。

當星形IPSec網絡(hub?and?spoke)規模不斷擴展時,傳統VPN的配置則愈加繁瑣,且不便于維護和排錯。因此IP數據包的動態路由將非常有意義。

但IPSec隧道和動態路由協議之間存在一個基礎問題,動態路由協議依賴于多播或廣播包進行路由更新,而IPSec隧道不支持多播或廣播包的加密。

這里便引入了動態多點VPN (DMVPN)的概念。

這里將引入兩個協議:GRE 和 NHRP

GRE:通用路由封裝。由IETF在RFC 2784中定義。它是一個可在任意一種網絡層協議上封裝任意一個其它網絡層協議的協議。GRE將有效載荷封裝在一個GRE包中,然后再將此GRE包封裝基于實際應用的傳輸協議上進行轉發。(我覺得:GRE類似木馬的殼。^_^)

IPSec不支持廣播和組播傳輸,可是GRE能很好的支持運載廣播和組播包到對端,并且GRE隧道的數據包是單播的。這就意味著GRE隧道的數據包是可被IPSec加密的,也即GRE Over IPSec。

通過GRE隧道與IPSec加密相結合,利用動態路由協議在加密隧道兩端的路由器上更新路由表。從隧道對端學到的子網在路由表條目里將會包含隧道對端的IP地址作為到達對端子網的下一跳地址。這樣,隧道任何一端的網絡發生變化,另外一端都會動態地學習到這個變化,并保持網絡的連通性而無需改變路由器的配置。

IPSec利用訪問控制列表(ACL)來匹配感興趣數據流。當有數據包匹配所定義的ACL時,IPSec加密隧道便會建立。當利用GRE Over IPSec時,GRE隧道的配置已經包括了GRE隧道對端的地址,這個地址同時也是IPSec隧道的對端地址。所以,沒有必要再單獨為IPSec定義匹配ACL。通過將GRE隧道與IPSec綁定,GRE隧道一旦建立,將立刻觸發IPSec加密。在用IPSec對GRE包進行加密時,可以將IPSec配置為傳輸模式,因為GRE已經將原始數據包封裝為單播的IP包,沒必要讓IPSec再封裝一個包頭。

GRE的特點使得IPSec也能時髦的運行動態協議了。至此,IPSec不支持動態路由的歷史改變了,DMVPN中的“多點” 被擺平。

接下來,讓我們看看“動態”的特性是怎樣被引入的?

GRE建立了隧道,IPSec完成了VPN網絡的加密部分。想要建立GRE隧道,隧道的一端必須知道另一端的IP地址,并且必須能夠在Internet上路由。這就要求中心和所有分支路由器必須具有靜態的公共IP地址。

可是向ISP申請靜態IP地址的費用是非常昂貴的。通常,為節約地址資源并提高有效利用率,無論是ADSL還是直接線纜接入,ISP會通過DHCP服務來提供動態IP地址。(注:IPv4的瓶頸引發的地址匱乏。IPv6不會存在該問題,號稱可以給地球上的每一粒沙子都分個IP,口氣很大的說)

顯然,GRE+IPSec需要明確知道隧道兩端的IP地址,而分支路由器外網接口的IP地址由其本地ISP動態分配,每次撥入網絡的IP地址是不同的。GRE隧道沒辦法建立,那么VPN還是無法工作。

這樣,NHRP在釣足大家胃口之時,應市場需求,在萬眾期盼的目光中閃亮登場了,給它些掌聲樂樂。噼里啪啦。。。。。。。

NHRP:下一跳解析協議。由IETF在RFC 2332中定義。用于解決非廣播多路訪問(NBMA)網絡上的源節點(主機或路由器)如何獲取到達目標節點的“下一跳”的互聯網絡層地址和NBMA子網地址。

下面咱們一起看看 NHRP 是如何解決靜態IP地址問題,而讓 VPN “動”起來的:

1、分支到中心(Spoke?to?Hub)的動態隧道建立

DMVPN網絡中,中心路由器上沒有關于分支的GRE或IPSec配置信息,而在分支路由器上則必須依據中心路由器的公網IP地址和NHRP協議來配置GRE隧道。

當分支路由器加電啟動時,由ISP處通過DHCP獲取IP地址,并自動建立IPSec加密的GRE隧道,通過NHRP向中心路由器注冊自己的外網端口IP地址(貌似反彈連接)。

這樣做有三方面的原因:1、由于分支路由器外網端口的IP地址是自動獲取的,每次上線時的IP地址可能不同,所以中心路由器無法根據該地址信息進行配置。2、中心路由器不必針對所有分支分別配置GRE或IPSec信息,將大大簡化中心路由器的配置。所有相關信息可通過NHRP自動獲取。(即:分支向中心匯報各自特征)3、當DMVPN網絡擴展時,不必改動中心路由器和其它分支路由器的配置。通過動態路由協議,新加入的分支路由器將自動注冊到中心路由器。這樣,所有其它分支路由器可以學到這條新的路由,新加入的分支路由器也可以學到到達其它所有路由器的路由信息,直至收斂。(中心路由器猶如OSPF的DR)

2、分支到分支(Spoke?to?Spoke)的動態隧道建立

在DMVPN網絡中,分支到中心(Spoke?to?Hub)的隧道一旦建立便持續存在,但是各分支之間并不需要直接配置持續的隧道。當一個分支需要向另一個分支傳遞數據包時,它利用NHRP來動態獲取目的分支的IP地址。該過程中,中心路由器充當NHRP服務器的角色,響應NHRP請求,向源分支提供目標分支的公網地址。于是,兩個分支之間通過mGRE端口動態建立IPSec隧道,進行數據傳輸。該隧道在預定義的周期之后將自動拆除。

DMVPN網絡中,分支到中心(Spoke?to?Hub)的隧道一旦建立便持續存在,而各分支之間并沒有持續存在的隧道。這樣,在路由器初始化后,中心路由器會通過持續存在的隧道向分支路由器宣告其它分支子網的可達路由。到這里,似乎”多點””動態”的問題都解決了,DMVPN可以正常工作了是吧?!

非也!目前,分支路由器的路由表中到達其它分支子網的“下一跳”地址仍是中心路由器的隧道端口地址,而不是其它分支路由器的隧道端口地址。如此一來,分支與分支之間的數據傳輸還是會通過中心路由器。

要解決這一問題,必須在中心路由器上設置為在mGRE隧道端口上宣告某一分支子網的可達路由時“下一跳”地址是該分支路由器的隧道端口地址,而非中心路由器的地址。

在RIP或EIGRP等距離向量型路由協議中,通常都實現了水平分割(split horizon)功能,阻止將路由信息發回到其來源端口,以避免相鄰路由器上路由環路的產生。如果在DMVPN網絡上運行RIP或EIGRP協議,則必須關閉水平分割(split horizon)功能。否則,分支路由器將無法學習到通往其它分支子網的路由。

對RIP而言,no split horizon 就大功告成了,因為RIP向路由信息來源端口發送該路由時,其“下一跳”地址不被改變,仍然是原來的地址(即:目標地址)。

但EIGRP在向路由信息來源端口發送該路由時,其“下一跳”地址將改變為該端口的地址。所以,必須關閉這一特性。(EIGRP是CISCO公司的私有協議,關閉這一特性的IOS命令為no ip next?hop?self eigrp )。

OSPF是鏈路狀態型路由協議,其本身就不存在水平分割(split horizon)問題。但在配置OSPF網絡類型時,應配置為廣播型而不要使用點到多點型,否則,仍然會導致上述的問題。另外需要注意的是,必須把DMVPN的中心路由器(Hub)配置為OSPF的指定路由器(DR),可以通過指定中心路由器(Hub)有更高的OSPF優先權來實現。

最后,總結下DMVPN的整體解決方案

DMVPN是通過多點GRE(mGRE)和下一跳解析協議(NHRP)與IPSec相結合實現的。在DMVPN解決方案中,利用IPSec實現加密功能,利用GRE或多點GRE(mGRE)建立隧道,利用NHRP解決分支節點的動態地址問題。DMVPN只要求中心節點必須申請靜態的公共IP地址。(如果用 DNS 的話,中心節點不是也可以動態了嗎?)

GRE隧道支持多播或廣播(multicast/broadcast)IP包在隧道內傳輸。因此,DMVPN網絡支持在IPSec和mGRE隧道之上運行動態路由協議。需要指出的是,NHRP必須被配置為動態多播映射,這樣,當分支路由器在NHRP服務器(中心路由器)上注冊單播映射地址時,NHRP會同時為這個分支路由器建立一個多播/廣播(multicast/broadcast)映射


cxs-kk

2007-12-25, 09:40

簡單的說dmvpn 的核心是nhrp,

nhrp類似arp,arp協議的作用是ip地址到mac地址的解析。nhrp在dmvpn中是把內部vpn的地址到nbma地址(外部地址)的解析。

具體解析過程是:

1.在nhrp協議中存在nhrp server和nhrp client

2.server必須是靜態地址,client可以是動態地址。

3.client加電后從isp獲得一個公網地址

4.client向server進行地址注冊。

5.當client和client需要通信的時候,client向server方向發送解析請求。

6.server收到解析請求后轉發到對應的client上。

7.client向client發送解析應答。

注意:1.在整個過程中數據包是經過vpn處理的,因為client必須先和server進行vpn連接。

2.dmvpn在第一階段,第二階段、第三階段的處理流程和功能不同。

以上為個人理解,歡迎大家討論


xiaoyonng

2007-12-25, 12:50

可以


totle

2007-12-25, 18:44

當client向server注冊的時候,主要是注冊自己的tunnel的地址和獲得server 的tunnel的地址的NHRP的解析。這是第一階段的注冊,第二階段的注冊就是client訪問指向tunnel的路由的網段時,要繼續去server上request NHRP的解析地址。


cxs-kk

2007-12-27, 09:59

動態VPN配置(DMVPN)

配置步驟:

1. 通過mGRE的封裝代替p-t-p GRE封裝來減少手動tunnel 數量及有效結合NHRP。

2. mGRE的下一跳動態解析功能通過NHRP來實現,以便動態建立保護網絡間的臨時tunnel.(保護網絡要路由通告出去或分布)

3. 通過ipsec profile 實現 ipsec automatic proxy 功能;保護GRE封裝流量,加密根據NHRP和動態路由協議建立起來的保護網絡間的臨時tunnel。(由于是動態方式,IKE 的遠程對端IP為0.0.0.0)

實例:

總部cisco路由器

需要配置(其它不相關的配置在此省略)

crypto isakmp policy 1

authentication pre-share

crypto isakmp key ikeadmin address 0.0.0.0

!

crypto ipsec transform-set jiang esp-des esp-md5-hmac

mode transport

!

crypto ipsec profile vpnconfig

set transform-set jiang

!

interface Tunnel0

bandwidth 2000

ip address 10.0.0.1 255.255.255.0

ip mtu 1436(注意設置MTU)

ip nhrp authentication dmvpnkey(nhrp認證,在匹配后,調用mGRE屬性)

ip nhrp map multicast dynamic(啟用NHRP自動加入分支路由器到多播NHRP映射組中)

ip nhrp network-id 99(啟用NHRP,在匹配后,調用mGRE屬性)

ip nhrp holdtime 300

no ip split-horizon eigrp 1(當使用EIGRP協議時,屏蔽水平分割)

no ip next-hop-self eigrp 1 (當使用EIGRP時,直接建立動態SPOKE-TO-SPOKE隧道)

delay 1000

tunnel source Ethernet1

tunnel mode gre multipoint(設置隧道接口的封裝模式為mGRE)

tunnel key daoyou (tunnel 認證)

tunnel protection ipsec profile vpnconfig(為隧道接口指定IPSEC模板)

!

interface Ethernet1

ip address 218.4.x.2 255.255.255.224

!

interface Ethernet0

ip address 192.168.2.253 255.255.255.0

!

router eigrp 1

network 10.0.0.0 0.0.0.255 area 0

network 192.168.0.0 0.0.0.255 area 0

辦事處路由器配置

crypto isakmp policy 1

authentication pre-share

crypto isakmp key ikeadmin address 0.0.0.0

!

crypto ipsec transform-set jiang esp-des esp-md5-hmac

mode transport

!

crypto ipsec profile vpnconfig

set transform-set jiang

interface Tunnel0

ip address 10.0.0.2 255.255.255.0

ip nhrp authentication dmvpnkey

ip nhrp map 10.0.0.1 218.4.x.2

ip nhrp map multicast 218.4.x.2

ip nhrp network-id 99

ip nhrp holdtime 60

ip nhrp nhs 10.0.0.1

ip tcp adjust-mss 1436

tunnel source Dialer0

tunnel destination 218.4.x.2

tunnel key daoyou

tunnel protection ipsec profile vpnprof

!

interface Ethernet0

ip address 192.168.0.1 255.255.255.0

ip nat inside

half-duplex

!

interface FastEthernet0

no ip address

speed auto

half-duplex

pppoe enable

pppoe-client dial-pool-number 1

!

interface Dialer0

mtu 1436

bandwidth 2048

ip address negotiated

ip nat outside

encapsulation ppp

dialer pool 1

dialer-group 1

ppp authentication pap callin

ppp pap sent-username [email protected] password 7

!

dialer-list 1 protocol ip permit

ip nat inside source list 100 interface Dialer0 overload

文章出自:CCIE那點事 http://www.qdxgqk.live/ 版權所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。 禁止全文轉載。
本文標題:DMVPN詳解
本文鏈接:http://www.qdxgqk.live/?p=203轉載請注明轉自CCIE那點事
如果喜歡:點此訂閱本站
  • 相關文章
  • 為您推薦
  • 各種觀點
?
暫時還木有人評論,坐等沙發!
發表評論

您必須 [ 登錄 ] 才能發表留言!

?
?
萌宠夺宝游戏