Mininet实现简单SRv6

本文所实现的实验基于本篇文章Linux SRv6实战:VPN、流量工程和服务链(第一篇) | SDNLAB | 专注网络创新技术

尽管文章已经描述得已经很详细了,但是从配置到实验本身,实现的过程仍然是充满艰辛的,配置环境就不再赘述了(不愿再回首)。

本文主要讲述实验本身,参考文章中的代码是稍微有点问题的,从其评论区许多人的评论可以看出。接下来的描述都是基于个人的理解,作为一个初学者,言辞可能比较业余,希望谅解,此外接下来的讲解基于你已经配置好实验环境,并且下载好了提供的拓扑文件包SRv6_sandbox(topo.py,topo_new.py...)。

首先来看网络拓扑,有三台主机和四台路由器,其中其实没有用到主机c,要实现的是一个简单的vpn操作:主机a通过ipv4地址ping主机b,过程如下,a到达r1后,r1将a的ipv4地址转化成ipv6地址,然后按照我们设置的segment list路径来转发数据包,到达r4后,将ipv6地址再转化成ipv4地址,发给主机b。

了解了大致过程后来看文章中给出的代码:

首先运行拓扑:

python topo_new.py

到这里,先别急着开始下一步,先links一下看一下链路的连接情况:

mininet> links

这么看不直观,自己结合着上面的图,把端口标好:

然后开始看命令,接下来的几条命令都是在对应主机中输入的,先打开各主机的终端:

xterm r1 r2 r3 r4 a

1. 在R1路由器上配置T.Encaps操作(SRv6流量工程),将去往10.0.2.0/24的数据包,封装入SRv6,并配置SRH包含的Segment列表为(逆序排列)

ip route add 10.0.2.0/24 encap seg6 mode encap  segs fc00:3::bb,fc00:4::bb dev r1-eth1

解释一下该命令,为r1路由器添加一条路由,目的地址是10.0.2.0,segment list:[fc00:3::bb, fc00:4::bb],途径两个节点,两个节点是什么之后马上说。dev的意思是device,指定的是该路由器在发出request之后,其对应的reply到达r1的端口,这里是重点!!!现在不懂没关系,先往后看

这两个节点是什么呢(地址好奇怪),ifconfig一下r3和r4看一下

从中可以看到r3的环回口地址是fc00:3::3,对应的就是fc00:3::bb,但是最后面的不一样,bb指的应该是操作码Function,相应的fc00:4::bb对应的节点就是r4

2.在R1上配置针对回程数据包的End.DX4操作,让去往主机a的数据包在R1做IPv6的解封装,解出IPv4数据包后发送给主机a

ip -6 route add fc00:1::bb/128 encap seg6local action End.DX4 nh4 10.0.0.1 dev r1-eth1

这条命令的意思是,只要收到SID是fc00:1::bb的数据包,那么就在本地处理,进行解封装成ipv4并转发给主机的操作。

这里面的dev端口就可以随便指定,换成r1-eth几都可以(必须是r1存在的端口),最后都可以ping通,可以之后试一下。

3.在R3路由器上配置End操作,以让R3在收到R1发来的数据包时,Segment Left减1,并更新IPv6 目的地址为当前Segment Left指定的Segment。

ip -6 route add fc00:3::bb/128 encap seg6local action End dev r3-eth2

这里的dev也可以随便指定

4.最后在R4路由器上配置End.DX4操作,以让R4收到数据包之后能够做IPv6解封装,并转发给指定地址。

ip -6 route add fc00:4::bb/128 encap seg6local action End.DX4 nh4 10.0.2.1 dev r4-eth1

这里是到达的,dev也可以任意指定

5.相应地在R4上配置T.Encaps操作,对Ping回程IPv4数据包进行封装。

ip route add 10.0.0.0/24 encap seg6 mode encap  segs fc00:1::bb dev r4-eth2

注意!这里dev需要改为r4-eth2,先看这条语句的意思,添加一条去往10.0.0.0/24的路由(即去往a的路由),需要经过的节点是fc00:1::bb,根据上面的解释可知,需要经过的是r1,再看一下图,如果从r4去r1,那么走的应该是从r4-eth1到r1-eth1,r1从刚才的描述走的是1-3-4,应该到的是r4-eth2,不知看官看到这里是否已经有想法了。

r1发出request,路径为1-3-4,到达r4-eth2,作为该request的reply,r4在向r1发送返程报文时,走的路径是r4-eth1-->r1-eth1,对于r1而言,其所收到的r4的返程报文到达的是r1-eth1,所以其在ip route add时所指定的dev为r1-eth1,对于r4而言,其所收到的r1的报文到达的是r4-eth2,所以其在ip route add时所指定的dev为r4-eth2。

口说无凭,上结果:

 

由于刚才的结论是一个猜想,所以稍微改变一下验证一下, 现在我们指定让r4在发送返程报文的时候“重走来时路”,即4-3-1,与r1发送报文的1-3-4正好相反,那么按照设想,此时r1发送完request后,其所收到的reply到达的应该是r1-eth0,其设置dev时应该设置为r1-eth0,而r4接收r1的报文到达的端口是r4-eth2,所以dev应该设置为r4-eth2

仍然成立,差不多可以说明问题了,其实还可以借助之前没有用到的主机c来试一下,我们的猜想仍然是成立的(已经验证过了),就不在这里再做了。 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值