實驗場景:IPv4位址通過SRv6進行資料傳輸
SRv6隧道既可以傳輸IPv6位址又可以傳輸IPv4位址,相容性非常強,使IPv4向IPv6轉換不在困難,下面以一個小實驗切實感受一下SRv6技術的作用,後續再根據實驗慢慢學習挖掘。
實驗描述及拓撲
兩個資料中心A和B,想通過骨幹網進行傳輸,骨幹網部署了SRv6,資料中心内部使用的IPv4位址,想實作A和B之間的私網IPv4之間互通。
拓撲中CE1為資料中心A的内部裝置,私網位址1.1.1.1,想要通路資料中心B的私網裝置CE2的位址2.2.2.2,但是骨幹網PE1,P1、P2、PE2,之間都運作的IPv6位址,這時就需要通過SRv6隧道技術透傳IPv4位址。
做這個實驗,首先需要PE1、P1、P2、PE2之間underlay層需要運作ISIS協定,為什麼需要運作ISIS協定呢,由于ISIS協定對IPv6支援的更好,OSPF協定需要重新引進OSPFv3協定,比較麻煩,更推薦ISIS協定,ISIS鄰居建立好之後就可以收到PE1和PE2的lookback位址,然後通過lookback位址建立IBGP協定,通過IBGP協定的MP-BGP協定建立VPNv4鄰居,這樣就可以通過MP-BGP進行收發IPv4的私網路由,但是再IPv6網絡中還是無法傳輸IPv4位址,這是就需要SRv6技術将IPv4私網位址打上SID屬性,最後通過SID資料進行路由疊代。實作私網間的互通。畫一個圖來了解一下吧。
畫的比較難看,哈哈哈,簡單來說,A想要找B來玩,A和B需要做大巴通過大橋到達B,此時ISIS就是橋的鋼鐵架,MP-BGP就是橋上鋪裝的路,SRv6就是你買的票。需要通過檢票口才能通過。
配置講解:
ISIS配置:
首先需要再PE1、P1、P2、PE2之間配置ISIS協定:以PE1為例:
#
isis 1
is-level level-1
cost-style wide
network-entity 10.0000.0000.0001.00
#
ipv6 enable topology ipv6
segment-routing ipv6 locator pe1
#
#
isis 1 #這裡是開啟isis程序。
isis-level level1 #isis有兩個區域,一個是level2為骨幹區域,一個是level1為邊緣區域。這裡我們選用level1區域。
cost-style wide #設定開銷類型,一般分為narrow 和wide兩種模式,narrow隻能發送和接收路由開銷在1~63範圍内的路由,wide開銷類型相容性更強,支援srv6,這裡面我們使用wide類型。
network-entity 10.0000.0000.0001.00 # 配置網絡實體,網絡實體分為三部分,第一部分是區域ID,區域ID的長度可以是變化的(1~13個位元組)。第二部分是系統ID,長度為固定值6個位元組。第三部分是最後一個位元組SEL,其值必須為00。
注意。如果是level1區域,所有區域ID必須相同。level2可以不同。
ipv6 enable topology ipv6 #isis程序下開啟ipv6功能。
segment-routing ipv6 locator pe1 # isis使能srv6的功能。
其餘P1、P2、PE2裝置配置類似,其中P1、P2可以不開啟SRv6功能。
BGP配置:
在PE1、P1、P2、PE2之間配置BGP協定:以PE1為例:
bgp 100
router-id 11.11.11.11
peer 2001:DB2:4::4 as-number 100
peer 2001:DB2:4::4 connect-interface LoopBack0
#
ipv4-family unicast
undo synchronization
#
ipv4-family vpnv4
policy vpn-target
peer 2001:DB2:4::4 enable
peer 2001:DB2:4::4 prefix-sid
#
ipv4-family vpn-instance VPN1
peer 10.1.1.2 as-number 65400
segment-routing ipv6 locator pe1
segment-routing ipv6 best-effort
bgp 100 #開啟bgp程序。
router-id 11.11.11.11 #配置router-id這裡面每台裝置router-id要保障唯一性。
peer 2001:DB2:4::4 as-number 100 #建立IBGP鄰居。
peer 2001:DB2:4::4 connect-interface LoopBack0 #使用loopback位址建立BGP鄰居,增強鄰居的健壯性。
ipv4-family vpnv4 #進入BGP-VPNv4位址族視圖。
policy vpn-target #預設生成。
peer 2001:DB2:4::4 enable #使能對等體交換VPN-IPv4路由資訊的能力。
peer 2001:DB2:4::4 prefix-sid#使能與指定IPv6對等體之間交換IPv4 Prefix SID資訊。
ipv4-family vpn-instance VPN1 #進入BGP-VPN執行個體IPv4位址族視圖。
peer 10.1.1.2 as-number 65400 #與CE建立BGP鄰居
segment-routing ipv6 locator pe1 #使能VPN私網路由攜帶SID屬性。如果沒有配置auto-sid-disable參數,表示支援動态SID配置設定。此時如果locator-name下存在靜态SID,則使用靜态SID,沒有靜态SID時則使用動态配置設定的SID。
segment-routing ipv6 best-effort #使能根據路由攜帶的SID屬性進行私網路由疊代。
SRv6配置:
在PE1、PE2上配置SRv6協定:以PE1為例:
#
segment-routing ipv6
encapsulation source-address 2001:DB2:1::1
locator pe1 ipv6-prefix 2001:DB8:100:: 64 static 32
#
segment-routing ipv6 #使能IPv6轉發平面的Segment Routing功能,并且進入SRv6視圖。
encapsulation source-address 2001:DB2:1::1 #配置SRv6 VPN封裝的源位址。
locator pe1 ipv6-prefix 2001:DB8:100:: 64 static 32 #配置SRv6 Locator。
結果驗證:
實作了CE1與CE2之間的互通。
<CE1>ping -a 1.1.1.1 2.2.2.2
PING 2.2.2.2: 56 data bytes, press CTRL_C to break
Reply from 2.2.2.2: bytes=56 Sequence=1 ttl=253 time=50 ms
Reply from 2.2.2.2: bytes=56 Sequence=2 ttl=253 time=40 ms
Reply from 2.2.2.2: bytes=56 Sequence=3 ttl=253 time=40 ms
Reply from 2.2.2.2: bytes=56 Sequence=4 ttl=253 time=50 ms
Reply from 2.2.2.2: bytes=56 Sequence=5 ttl=253 time=40 ms
在PE1上抓包看一下資料封裝的過程。
通過抓包可以看到進行了兩層封裝,顯示ipv4位址的封裝,然後是SRv6的位址封裝,其中ipv6封裝的源位址就是我們上文配置的SRv6封裝的源位址: encapsulation source-address 2001:DB2:1::1,目的位址就是PE2上自動生成Local-SID End.DT4的IP位址(這裡剛開始不太好了解,以後會講解),這樣P1,P2裝置查詢路由表會将該資料包傳送至PE2,PE2查詢該位址對應VPN執行個體VPN2,進行解封裝調ipv6層,将ipv4層資料包傳送至VPN2執行個體中,然後查詢ipv4路由表最總到達目的位址。反之也一樣。
以上實驗讓大家簡單感受一下SRv6的功能,後續根據該實驗進行詳細的講解分析以及抓包擴充。