问题描述
临时遇到一个需求,一个交换机接入两个不同VN,然后要求在一定条件下,两个VN中特定的网段能够互通,大致拓扑如下图。 相关信息如下:
- 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;
关键配置
由于这里都是静态,所以V*N配置里面RT不需要。并且所有配置都在网关设备SW上。
ip vpn-instance V*N1
ipv4-family
route-distinguisher 1:1
ip vpn-instance V*N2
ipv4-family
route-distinguisher 2:2
关键是静态路由,按照参考的说法:
注意写静态路由时vpn实例是放前还是放后:
- 如果交换机入接口没有绑定vpn实例,则报文进来会查找全局路由表,需要将报文引入哪个实例,就在静态路由目的地址后加相应的vpn实例;
- 如果交换机入接口绑定了VN实例,则报文进来查找相应的VN实例路由表,此时要将vpn实例放在前面。
按照这个原则,静态路由配置如下:
# PC1和PC2访问IPv4公网
## 向两个V*N添加默认路由
ip route-static vpn-instance V*N1 0.0.0.0 0 3.3.3.2 public
ip route-static vpn-instance V*N2 0.0.0.0 0 3.3.3.2 public
## 添加回程路由
ip route-static 1.1.1.0 24 vpn-instance V*N1 1.1.1.1
ip route-static 2.2.2.0 24 vpn-instance V*N2 2.2.2.1
# PC1和PC2互访
## 添加PC1访问PC2的静态路由,如果需要点对点控制,写32位即可
ip route-static vpn-instance V*N1 2.2.2.0 24 vpn-instance V*N2 2.2.2.1
## 添加回程路由
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来进行路由泄露。(但是自己没有验证过,也还没有确认是否有更好的办法。)