实验场景: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的功能,后续根据该实验进行详细的讲解分析以及抓包扩展。