MPLS VPN簡單介紹
這裡的MPLS VPN,應該是指MPLS L3 VPN
- VPN:虛擬專用網路。使用者不需要專用的物理線路,而是在公共基礎設施上進行私有網路服務的傳播,從而達到專用網路的功能。
- L3 VPN:一種VPN實現方式,它構建在L3網路之上,傳輸的是L3packet。
- MPLS L3 VPN:L3VPN構建在MPLS網路之上。
- peer-to-peer模式的實現,
- 控制簡單,成本低,支援IP地址重疊
PE1,PE2,P,一起構成的MPLS 網路,與PE直接相連的是CE
CE:(Customer EdgeRouter,使用者網路邊緣路由器)裝置直接與服務提供商網路相連
- 感知不到
- 主要功能就是將VPN客戶的路由通告給PE,以及從PE學習同一個VPN下其他站點的路由
PE:(Provider EdgeRouter,網路邊緣路由器)裝置與使用者的CE直接相連,還連線P路由器,
- 負責VPN業務接入,處理VPN-IPV4路由
- 使用VRF對VPN客戶進行隔離,
- 通過與客戶裝置CE進行路由協議,以便獲取客戶路由,並將路由生成VPNv4字首放入MPLS VPN骨幹網傳遞到對端PE
P:(Provider Router骨幹網核心路由器):與PE或其他的P相連
- 負責快速轉發資料。
- 不知道VPN客戶網路,以及客戶的路由。只負責在骨幹網內運載標籤資料
PE之間,是通過
CE-PE之間,是兩個路由器之間普通的交流,可以是IGP,如:OSPF,EIGRP,可以是BGP,也可以配置靜態路由。
以下對概念的講解是在此模型的基礎上的
2 基本概念:
a,VRF(Virtual Router Forwarding):
MPLS VPN不同於其他VPN,有一個很大的特點是,支援不同VPN中IP地址的重疊,
PE1 是連著VPNA和VPNB ,且CE1 ,CE3 的IP地址相同都是10.0.0.1,那麼目的地是10.0.0.1的網路流量到達PE1,PE1怎麼區分該網路流量轉發CE 1還是CE3呢?
VRF
PE路由器上每一個VPN都有一個VRF,每一個VRF,可看作是虛擬的路由器,包括:
- 一張獨立的路由表,包括獨立的地址空間
- 一組歸屬於這個VRF的介面的集合,
- 一組只用於本VRF的路由協議
因此PE1對於VPNA和VPNB都分別對應一個VRF,到達PE1的網路流量只需要先決定到了那個VRF裡,到了每個VRF裡後,IP地址為10.0.0.1就只有一個了,就能知道是轉發到CE1還是CE3了
b MP-BGP(MultiProtocol-BGP)
- BGP-4的多協議擴充套件,原本的BGP協議只能管理IPV4的資訊,這個能支援如ipv6這樣的其他協議,本質還是一個BGP。
- 在MPLSL3 VPN的場景下,本質上就是一個iBGP
- MP-BGP session建立在PE1和PE2之間。
- PE2通過這個MP-BGPsession將CE4的路由傳遞給PE1。
這裡有兩個問題?
1.PE1和PE2之間就一個MP-BGP session,VPNA和VPNB都需要通過這個session來傳遞各自的路由。如果VPNA和VPNB中的路由的目的地址是一樣的(像上面提到過的那樣),那session的對端怎麼區分相同的地址? 2.就一個BGPsession,對端的PE怎麼知道傳遞過來的路由是來自哪個VPN,又要寫入到自己的哪個VRF table中? c RD(Route-Distinguisher)為解決第一問題:MP-BGP協議專門為MPLS L3 VPN指定了VPNv4字首。那麼VPNv4是什麼?
VPNv4字首有12位元組(96bits)就是在4位元組的IPv4地址之前,增加了8個位元組的識別符號,增加的8個位元組叫做RD(RouteDistinguisher)。格式就是上面那樣。
RD(Route-Distinguisher)
格式:Type=0,AdministratorSubfield=iBGP AS number,Assigned Number Subfield=每個VPN唯一的編號。這是比價常用的
Type=0,AdministratorSubfield=IP-Address,Assigned Number Subfield=每個VPN唯一的編號。
功能:與32bits的IPv4字首一起構成96bits的VPNv4字首
若不同的VPN使用者,存在相同的IPv4地址空間,可通過設定不同的RD值,來保證字首的唯一性
本質:就是一個數字,不包含了實際的資訊,區分相同IPv4字首的路由,保證BGP的程序不會認為這些路由相同
對於第一個問題,10.0.0.1這個路由資訊,若想傳到VPNA,就IP前加VPNA對應的RD,若想傳到VPNB,就IP前加VPNB對應的RD,這樣地址就可以在MP-BGP session中區別出來了
VPNA: RD1:1IPv410.0.0.1/24 VPNv4 1:1:10.0.0.1/24
VPNB: RD2:2 IPv410.0.0.1/24 VPNv4 2:2:10.0.0.1/24
d RT(Route Target)
本質:每個VRF表達自己的路由輸出和輸出方式,主要用於控制VPN路由的釋出和安裝策略。
屬性:import和export
前者import屬性表示了我需要的路由屬性,後者export屬性表示我發出的路由的屬性。
當PE釋出路由時,將使用路由所屬VRF的RT export規則,直接傳送給其他的PE裝置。
對端PE接收路由時,首先接收所有的路由,並根據每個VRF配置的RTimport規則進行檢查,如果與路由中的RT屬性match,則將該路由加入到相應的VRF中。
CE1: 我發的路由 RT是101:101,我也只接收 RT是100:100
CE2:我發的路由RT是100:100,我也只接收RT是101:101
CE3:我發的路由 RT是201:201,我也只接收 RT是200:200
CE4:我發的路由 RT是200:200,我也只接收 RT是201:201
CE1發出的路由只能由CE2接收,CE2發出的路由只能由CE1接收,這樣CE1和CE2都在一個VPN裡,實現互訪同理CE3和CE4也在一個VPN裡,實現互訪
RT和RD有著同樣的結構,為什麼不用RD來區分VPN(即用RD實現RT功能)?
- 分開定義有分開定義的靈活性。
- 當一條路由需要傳遞到多個VPN時,如果沒有RT,就需要建立多條BGP資料,每條有著不同的RD。而有RT的話,只需要建立一條BGP資料,帶上多個RT即可。從資料的長短來看,後者更有優勢。
要想實現CE3pingCE4,那麼控制平面的過程:
CE4--PE2
PE內部對每一個VPN,都會有一個獨立的路由交換程序與對應的CE相連。這裡有2個VPN連線PE,那就會有2個獨立的路由交換程序,分別與CE交換各自的路由。CE4和PE2兩個路由器之間普通的交流,可以是IGP例如:OSPF,EIGRP,也可以是BGP,可以配置靜態路由。這樣CE4的路由就可以成功傳遞到了PE2中的VPNB的VRF tableVRFB當中。
PE2--PE1
PE2 是通過MP-BGP session將CE4的路由轉發給PE1,
PE2中對應VPNB的VRFB Virtual router包含了與VPN相關的路由器變數,就是指RT和RD。
MP-BGP程序會自動的取出RD與RT,在IP地址前加上RD生成VPNv4,在後面加上RT(export 屬性),進而生成相應的MP-BGP資料。
同時,PE2還會生成為PE1,生成一個MPLSLabel,用於指定是哪個VPN
當PE2把這MP-BGP資料送到PE1之後,PE1首先會取出RT,對比本地的VRFs的Import Targets,記錄Import Targets與BGP中RT有交集的VRFs。
如果沒有匹配的VRFs,丟棄MP-BGP資料。
這裡VRFB的Import Targets匹配,再計算得出IPv4格式的next-hop和IPv4格式的prefix,這樣就得到了IPv4格式的路由。再分別寫入相應的VRF中,這裡是寫入PE1的VRFB對應的虛擬轉發表中。
至於MPLSLabel,隨著上面的IPv4格式路由繫結,一起寫入到這個VRF當中。
PE2終於有了CE1的路由資訊,並且多個VPN可以共用這個路由傳輸通道且相互不影響。
PE1--CE3
通過PE1中的Virtual router和對應的路由交換程序,CE3的路由最終到達了CE4。
整個控制平面的過程就結束了
CE3 ping CE4,資料轉發的過程:
1 CE3因為從PE1學習到了CE4網路的路由,因此,對應的路由下一跳是PE1。CE1直接將目的地址是CE2的資料包發往PE1。這就是一個普通的路由轉發。
2 資料包到達PE1,準確的說是到達了PE1中對應的VPNB的VRFB的路由表中。因為之前是從PE2學習的CE2網路的路由,因此,對應的路由下一跳是PE2,此時會將資料包發往PE2地址。PE2通過MP-BGP不是給PE1分配了一個標籤,也就是一個內部標籤,標識不同的VPN,這樣在VRF內部,IP 資料包就變成了MPLS資料包。
在MPLS網路內部,PE1到PE2並未直接相連,所以,將資料包傳遞到PE2 就和之前的資料包傳遞過程時一樣的
PE2 再將VPN標籤去掉,找到對應的VRF轉發表,將IP包轉發給對應CE2
由於PE1並未與PE2直接相連,雖然VRF 會將資料包發往PE1,但是資料包不能直接到達目的地。雖然PE1未與PE2直接相連,但是在建立MPLSTunnel的時候,PE1已經把自己的路由