自定义路由

本文主要描述自定义路由的方法以及配置自定义路由过程中的常见问题。

网易云基础服务提供多种 VPC 内实例访问外网的方法,如实例自带外网、系统路由+SNAT服务、自定义路由。其中自定义路由需要配置一台带公网 IP 的云服务器作为公网网关,对出网流量进行源地址转换。

自定义路由的主要过程为:

  • VPC 中新建子网 subnet1、subnet2。
  • subnect2 中新建一台带外网 IP 的云服务器作为网关。
  • 新建路由表,关联 subnet1,配置下一跳为 subnet2 中作为网关的云服务器。
  • subnet1 中无外网的 IP 实例访问外网。

具体步骤如下:

新建 VPC

登录网易云控制台新建 VPC 实例 newvpc: 在新建的 VPC 实例中添加子网 subnet1、subnet2和路由表 route2,具体操作步骤可参考文档新建 VPC子网管理路由表管理

子网 subnet1 新建无状态服务

新建无状态服务 centos67,选择可用区为可用区 B,选择 VPC 为上文中新建的 VPC 实例newvpc,子网选择 subnet1,安全组默认即可,镜像此处以centos:6.7-tools为例,具体新建过程可以参考文档创建无状态服务

子网 subnet2 新建云服务器

新建云服务器作为公网网关,选择可用区为可用区 B,选择 VPC 为上文中新建的 VPC 实例 newvpc,子网选择 subnet2,安全组默认即可,选择分配公网,镜像此处以 Centos7.0 为例,具体新建过程可以参考文档创建云服务器实例

新建目标服务

登录网易云控制台,新建有状态服务 nginx,可用区此处选择可用区 A,镜像此处以 nginx1.2.1 镜像为例,绑定公网 IP,具体过程可参考文档创建有状态服务绑定公网 IP

配置路由

进入 VPC 实例 newvpc 的路由表管理页面, 将默认路由表 main_route_table 和子网 subnet1 关联,路由表 route2 与子网 subnet2 关联,具体操作步骤可以参考文档路由表管理

进入默认路由表 main_route_table 路由管理页面,点击「添加路由」按钮进入路由添加页面,填写目标网段为上文可用区 A 中新建的有状态服务 nginx 的外网 IP 地址,下一跳选择上文 subnet2 中新建的云服务器,此服务器作为公网网关:  

配置云服务器

默认情况下 VPC 安全组入网规则是全部禁止的,因此在连接云服务器前需要先配置好 VPC 的安全组入网规则,允许远程连接云服务器,具体操作过程可参考文档SSH 连接 VPC 内云服务器

ssh 远程连接云服务器,以 Centos7.0 为例对内核参数和 iptables 配置进行修改,具体操作如下:

  • 打开配置文件 sysctl.conf,修改内核参数 net.ipv4.ip_forward = 1,保存配置文件,执行命令 sysctl -p 使配置生效。 
  • 执行命令iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE 开启 nat。

至此自定义路由配置完成。

测试自定义路由

进入上文中子网 subnet1 中新建的无状态服务,curl 访问上文可用区 A 中新建的有状态服务 nginx 的外网 IP,如果访问成功则自定义路由配置成功:

另外可进入 nginx 的 access.log,查看来源 IP 是否是子网 subnet2 中作为公网网关的云服务器的外网 IP:

Attention

作为公网网关的云服务器和需要访问外网的服务器(本文为 subnet1 中的无状态服务)不能在同一个子网内,否则会形成环路,不能访问外网。