你的位置:首页 > 解决方案 > 上云迁移

阿里云线上ROS静态路由转发,有大坑。

2020-11-2 22:23:55      点击:

原因见上去,阿里云不支持VPC中转流量,VPC1和VPC2都在国内,VPC3在香港,如果按阿里云的做法,必须付费2次国际隧道的钱,才可以实现三个VPC互通。明显很浪费钱。

所以我们只能在三个VPC,各创建一个ROS,分别建立隧道,并起OSPF,这三个ROS的设置有几个要点:

以下所有的设置,前提三个VPC已经在阿里云上创建好VPC高速通道,同时在各自的路由表已经把对端的IP,发送到到VPC路由器的端口上去(这句话大家好好体会下,在阿里云实施高速通道的时候)

1、R1:到R2的局域网IP,默认路由器必须强制指到自己的默认网关,一般是x.x.x.253,否则后面OSPF无法实施,会一会起一会断;

2、R2:到R1和R3的局域网IP,默认路由器必须强制指到自己的默认网关,一般是x.x.x.253,否则后面OSPF无法实施,会一会起一会断;

3、R3:到R2局域网IP,默认路由器必须强制指到自己的默认网关,一般是x.x.x.253,否则后面OSPF无法实施,会一会起一会断;

4、R1和R2之间起隧道IP,R2和R3之间也起隧道IP,两两互联

5、宣告R1,R2,R3的局域网IP以及隧道IP进OSPF

6、R1,R2,R3都必须设置nat,伪装为 ether1的出口IP,否则无法访问ROS下面的其他ECS服务器。

现在引入一个新的问题,我这个时候在VPC1的R1局域网下,再创建一个ROS,R0,要求使用静态路由表的方式去访问,R1,R2,R3。

所以我们在R0上添加路由表,设定目的地址为R3的局域网IP段172.31.47.225/20,下一跳为R1的IP 10.100.0.146。

这个时候出现问题了!从R0上去ping 172.31.47.225,发现在R1的接口上抓包,死活看不到icmp的包过来!!!

说明了一个问题!!!

虽然在阿里云上,是同一个IP段,在同一个安全组,但是你的数据包,发送的目的地址172.31.47.225并不属于VPC1也不属于VPC2,那么阿里云认为你传递的不是阿里云ECS范围的IP包,阿里云会检查你数据包的目的地址,而直接丢弃!!!!

所以,你在R1的接口,根本抓不到任何icmp的包文过来。而是被阿里云直接丢弃了,或者是直接发给默认网关了(因为tracert出来全是*,我也不知道阿里云把数据发到哪去了),根本不会按照你的ROS的静态路由表的下一跳走!!!

所以,唯一的解决方案就是:

1、在R0和R1之间建立一个IP隧道,让发往172.31.47.225的包,下一跳发送到R1的隧道IP去;

2、一定要做nat伪装,所有的数据,必须伪装成R0的隧道IP去访问,OSPF的网络!否则,数据回包无法回到R0来!

3、在R1的OSPF宣告一定要把新加的隧道IP加进去,否则R2,R3的数据回不到R0来,想想为什么?因为没有R0和R1之间的隧道路由!