现在,我们在R1上创建两个VRF:VRF1及VRF2,创建完成后,我们可以理解为,拥有了两台虚拟路由器。当然,现在这两台虚拟路由器上啥也没有。
接下去我们将GE0/0/1口及GE0/0/2口绑定到VRF1;将GE0/0/3及GE0/0/4口绑定到VRF2。如此一来这两台虚拟路由器就各自拥有了两个物理接口。值得注意的是,这两台虚拟路由器是虽然都在同一台物理设备上,但是却是隔离的,他们将有自己的接口,自己的路由表,自己的ARP表等等相关的内容。我们的环境就变成有点像这样:
我们看到,VRF1及VRF2有了自己的接口,也有了自己的路由表。并且相互之间是隔离的。
现在PC1要发送一个数据包到2.2.2.2,R1从接口GE0/0/1收到了这个数据包,由于此时GE0/0/1已经绑定到了VRF1,因此在执行目的IP的路由查找的时候,查的是VRF1的路由表,查找到匹配的路由条目后,间个数据包从其指示的GE0/0/1口转发给下一跳192.168.100.2。
那么如果PC1要访问3.3.3.3呢?数据包发到了R1,R1从接口GE0/0/1收到了这个数据包,于是它在做路由查找的时候,查的仍然是VRF1的路由表。经过查表后,它发现并无匹配的条目,因此将数据包丢弃。
3. 不同环境的VRF创建
- Linux Kernel中VRF的使用(iproute的namespace)
- #创建命令空间
- ip netns add vrf1
- #命名空间中执行ifconfig
- ip netns exec vrf1 ifconfig</font>
复制代码- Linux Kernel中轻量级VRF的使用(高版本iproute的vrf)
- #创建vrf red
- ip link add red type vrf table 1</font>
复制代码- vpp # ip table add 100 //创建ip4 vrf 100
- vpp # show ip fib //查看
- vpp # ip6 table add 200 //创建IP6 vrf 200
- vpp # show ip6 fib //查看</font>
复制代码