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

原因见上去,阿里云不支持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之间的隧道路由!

我提了工单,阿里云的工单回复,其实还有花大钱解决的方案:
工程师 69361 号 : 您好,根据您的场景,这边联系后端核实了,是不支持vpc传递互通的,您还需要在账号1 杭州和账号2的香港做跨账号vpc互通或者使用云企业网才可以的,谢谢
都是要钱滴。。。。。。不在乎钱的主,可以忽略这篇文章。
阿里云线上ROS静态路由转发,有大坑。的更多相关文章
- 关于 tp5.0 阿里云 oss 上传文件操作
tp5.0 结合阿里云oss 上传文件 1.引入 oss 的空间( composer install 跑下第三方拓展包及核心代码包) 备注:本地测试无误,放到线上有问题 应该是移动后的路劲(相对于服 ...
- 在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境 项目运行环境 阿里云(单核CPU, 1G内存, Ubuntu 14.04 x64 带宽1Mbps), 具体购买和ssh连接阿 ...
- 阿里云主机上安装jdk
今天继续安装jdk到阿里云服务上,大家要看一下阿里云是32位还是64位的,如果是32位下载32位的包,如果是64位的下载64位的包 我的就是64位的,开始我还不知道是怎么区分32/64位的,原来X64 ...
- 阿里云vps上mysql挂掉的解决办法
阿里云vps上mysql挂掉的解决办法 4条回复 用阿里云的vps用作blog服务器,系统很稳定,已经100多天一直运行正常,大概从上个月开始发现blog的mysql会有时挂掉,会收到短信通知.之前没 ...
- 阿里云服务器上安装mysql的心路历程(博友们进来看看哦)
在阿里云花了100买了一台云服务器,配置如下: CPU: 1核 内存: 512MB 数据盘: 0G 带宽: 1Mbps 阿里云服务器安装mysql搞得我想吐血,搞了一个多星期,现在才搞好,而且,还有许 ...
- 阿里云容器服务--配置自定义路由服务应对DDOS攻击
阿里云容器服务--配置自定义路由服务应对DDOS攻击 摘要: 容器服务中,除了slb之外,自定义路由服务(基于HAProxy)也可以作为DDOS攻击的一道防线,本文阐述了几种方法来应对普通规模的DDO ...
- 关于阿里云ESC上go语言项目编译6l: running gcc failed: Cannot allocate memory
(1)前段时间将自己的阿里云服务器上的系统由centos 6.5换为了ubuntu 14,其他的硬件配置都没有发生改变,将服务器上的数据恢复并且重新安装了golang的编译环境后,发现使用go bui ...
- 在阿里云服务器上安装完成并启动Tomcat后,通过http不能访问--解决办法
在阿里云服务器上安装完成并启动Tomcat后,通过http不能访问的原因是阿里云平台为了安全设置了安全组策略,必须我们授权的端口,其他计算机才能通过http访问 解决办法:(这里以阿里轻量应用服务器为 ...
- jdbc连接阿里云服务器上的MySQL数据库 及 数据库IP限制
问题1:Jdbc 如何连接阿里云服务器上的MySQL数据库? 解决: 上截图: 其中IP是阿里云服务器的公网IP地址. 问题2: 刚开始接手开发的时候,使用Navicat连接阿里云服务器上的数据后 ...
随机推荐
- Spring Cloud 微服务实战
Eureka 服务治理 Maven dependency 与spring boot的版本的对应 Finchley兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x Dal ...
- Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法
Ubuntu下安装JDK图文教程详解 jdk-java6-30 .bin 的处理方法: https://blog.csdn.net/mingjie1212/article/details/485250 ...
- 【HAOI2011】problem a
又看题解了,这样下去要跪啊QAQ 原题: 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 1≤n≤100000 0≤ ...
- Java基础二(变量、运算符)
1.变量2.运算符 ###01变量概述 * A: 什么是变量? * a: 变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,例如水杯是容器,用来装载水:你家里的大衣柜是容器,用来装载 ...
- Unity3D中常用的数据结构 学习
Array 1.数组存储在连续的内存上. 2.数组的元素都是相同类型或者类型的衍生类型 3.数组可以直接通过下标访问 ArrayList 1.不必在声明ArrayList时指定它的长度,这是由于Arr ...
- spring中ApplicationContextAware接口描述
项目中使用了大量的工厂类,采用了简单工厂模式: 通过该工厂类可以获取指定的处理器bean,这些处理器bean我们是从spring容器中获取的,如何获取,是通过实现ApplicationContextA ...
- gulp 压缩 js 和 css 代码
我们在写出来的代码都是非常规范的,改换行的时候就换行,改tab 的时候就有tab,还有这样做是为了后期维护方便,但是这也导致了内存占用量的增大,当把把代码发到线上,如果网速慢一点,可能很久都加载不出来 ...
- dependencies、devDependencies、webpack打包 的区别与联系
为什么要在dependencies.devDependencies中声明依赖? 答:保证任何人在(或者你自己在其他设备上)对这个项目进行修改(开发)时,通过npm install就能获取同样的开发环境 ...
- PHP 换行符 PHP_EOL
PHP 中换行可以用 PHP_EOL 来替代,以提高代码的源代码级可移植性: unix系列用 \n windows系列用 \r\n mac用 \r <?php echo PHP_EOL; //w ...
- C# 集合、字典、栈和队列
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...