问题描述

临时遇到一个需求,一个交换机接入两个不同VN,然后要求在一定条件下,两个VN中特定的网段能够互通,大致拓扑如下图。 不同 V*N 实例的网段互通 - 图1相关信息如下:

  • PC1:1.1.1.1/24,网关1.1.1.254,所属V*N1;
  • PC2:2.2.2.2/24,网关2.2.2.254,所属V*N2;
  • PC1和PC2网关都在交换机SW上;
  • IPv4公网:3.3.3.1/30,其中交换机SW接口3.3.3.1,路由器R接口3.3.3.2;

要求PC1和PC2互通,并且均能访问IPv4公网。

关键配置

由于这里都是静态,所以V*N配置里面RT不需要。并且所有配置都在网关设备SW上。

  1. ip vpn-instance V*N1
  2. ipv4-family
  3. route-distinguisher 1:1
  4. ip vpn-instance V*N2
  5. ipv4-family
  6. route-distinguisher 2:2

关键是静态路由,按照参考的说法:

注意写静态路由时vpn实例是放前还是放后:

  • 如果交换机入接口没有绑定vpn实例,则报文进来会查找全局路由表,需要将报文引入哪个实例,就在静态路由目的地址后加相应的vpn实例;
  • 如果交换机入接口绑定了VN实例,则报文进来查找相应的VN实例路由表,此时要将vpn实例放在前面。

按照这个原则,静态路由配置如下:

  1. # PC1和PC2访问IPv4公网
  2. ## 向两个V*N添加默认路由
  3. ip route-static vpn-instance V*N1 0.0.0.0 0 3.3.3.2 public
  4. ip route-static vpn-instance V*N2 0.0.0.0 0 3.3.3.2 public
  5. ## 添加回程路由
  6. ip route-static 1.1.1.0 24 vpn-instance V*N1 1.1.1.1
  7. ip route-static 2.2.2.0 24 vpn-instance V*N2 2.2.2.1
  8. # PC1和PC2互访
  9. ## 添加PC1访问PC2的静态路由,如果需要点对点控制,写32位即可
  10. ip route-static vpn-instance V*N1 2.2.2.0 24 vpn-instance V*N2 2.2.2.1
  11. ## 添加回程路由
  12. ip route-static vpn-instance V*N2 1.1.1.0 24 vpn-instance V*N1 1.1.1.1

扩展

按照上面的配置,1.1.1.1、2.2.2.1、3.3.3.2之间可以互相ping同,但是类似1.1.1.1与3.3.3.1、1.1.1.254均不能ping通。如果要扩大范围,想要1.1.1.0/24、2.2.2.0/24、3.3.3.0/30之间均能ping通,可以考虑使用route-replicate来进行路由泄露。(但是自己没有验证过,也还没有确认是否有更好的办法。)

参考