使用转发路由器可以实现在多个专有网络VPC(Virtual Private Cloud)共用一个公网NAT网关,从而达到多VPC访问公网的效果。
背景信息
云企业网CEN(Cloud Enterprise Network)是运行在阿里云私有全球网络上的一张高可用网络。云企业网通过转发路由器TR(Transit Router)帮助您在跨地域VPC之间,VPC与本地数据中心IDC(Internet Data Center)间搭建私网通信通道。
转发路由器实例是地域范围内的核心转发网元,为您转发同地域或跨地域间的流量,并支持定义灵活的路由策略。在一个云企业网实例中,一个地域支持创建一个转发路由器实例。您可以将网络实例连接到企业版转发路由器。企业版转发路由器连接网络实例后,通过转发路由器路由表存储网络实例的路由。企业版转发路由器通过查询路由表中的路由条目信息转发网络实例的流量。
关于转发路由器的更多信息,请参见转发路由器的工作原理。
场景示例
某公司在西南1(成都)地域创建了两个VPC,其名称分别为VPC-A和VPC-B。在VPC-A中,创建了vSwitch-A1和vSwitch-A2,并在vSwitch-A1中创建了公网NAT网关;在vSwitch-A2中创建ECS1实例。在VPC-B中,创建了vSwitch-B1和vSwitch-B2,并在vSwitch-B1中创建了ECS2实例。因公司业务需要,VPC-A与VPC-B都需要访问公网。
公司可以通过使用转发路由器并结合转发路由器路由表功能,然后在VPC-A中创建公网NAT网关,同时为公网NAT网关配置SNAT规则,实现VPC-A和VPC-B通过公网NAT网关访问公网。
前提条件
您已经参考下表完成了VPC和vSwitch的创建。具体操作,请参见创建和管理专有网络。
VPC名称
地域
交换机名称
可用区和网段
VPC-A
西南1(成都)
vSwitch-A1
成都可用区A,192.168.10.0/24
vSwitch-A2
成都可用区B,192.168.20.0/24
VPC-B
vSwitch-B1
成都可用区A,172.16.10.0/24
vSwitch-B2
成都可用区B,172.16.20.0/24
您已经在vSwitch-A2中创建了ECS1实例,在vSwitch-B1中创建了ECS2实例。具体操作,请参见自定义购买实例。
您已经创建了云企业网实例。具体操作,请参见创建云企业网实例。
您已经在VPC实例所在地域创建了企业版转发路由器实例。具体操作,请参见创建转发路由器实例。
配置步骤
步骤一:创建公网NAT网关
登录NAT网关管理控制台。
在公网NAT网关页面,单击创建公网NAT网关。
在NAT网关页面,配置以下购买信息,然后单击立即购买。
配置项
说明
地域
选择需要创建公网NAT网关的地域。
网络及可用区
请选择NAT网关所属的VPC和交换机。创建成功后,无法进行修改或切换。
网络类型
本文选择公网NAT网关。
公网NAT网关:具备网络地址转换能力,可以绑定弹性公网IP,从而为ECS实例提供访问互联网的能力,实现私网和公网之间的通信。
VPC NAT网关:同样具备网络地址转换能力,但无法绑定弹性公网IP,只能为ECS实例提供私网内部的地址转换,适用于内网地址隐藏、地址冲突规避等场景。
弹性公网IP
本文选择新购弹性公网IP。
选择已有
弹性公网IP实例:选择未绑定实例的弹性公网IP。
新购弹性公网IP:默认创建BGP(多线)类型的按使用流量计费的弹性公网IP,可根据自身业务需要选择带宽峰值。
说明如需绑定其他线路类型或计费类型的弹性公网IP,请先申请弹性公网IP,然后选择已有进行绑定。
每绑定一个弹性公网IP,将占用NAT网关所在交换机的一个私网IP地址。请确保该交换机具有足够的可用私网IP地址,否则将无法成功绑定新的弹性公网IP。
稍后配置:成功创建的NAT网关将不具备公网能力,用户需手动绑定弹性公网IP。
创建成功后,您可以在公网NAT网关页面查看已创建的公网NAT网关实例。

步骤二:创建VPC连接并配置路由
在西南1(成都)地域的转发路由器中创建VPC-A连接和VPC-B连接,并为转发路由器配置路由。
登录云企业网管理控制台,找到目标云企业网实例,单击目标实例ID。
在页签,找到目标地域的转发路由器实例,在操作列单击创建网络实例连接。
分别为VPC-A、VPC-B创建VPC连接。
说明企业版转发路由器支持的地域和可用区,请参见转发路由器的版本。
以创建VPC-A连接为例,在网络实例中选择vpc-2 | VPC-A,在交换机区域选择两个可用区的交换机以实现容灾:
成都可用区B:vsw-2*** | vSwitch-A2
成都可用区A:vsw-*** | vSwitch-A1
在高级配置中勾选自动关联至转发路由器的默认路由表、自动传播系统路由至转发路由器的默认路由表、启动为VPC的所有路由表配置指向转发路由器的路由。
在转发路由器路由表页签,单击创建路由条目。
添加0.0.0.0/0路由条目,并将其指向VPC-A,以便将IPv4流量转发至VPC-A。
步骤三:配置VPC路由表
在路由表中添加0.0.0.0/0,并将其指向转发路由器,以便将IPv4流量转发至转发路由器。
- 登录专有网络管理控制台。
- 在左侧导航栏,单击路由表。
在路由表页面,找到VPC-B的系统路由表,单击路由表的ID。
在路由表详情页面,单击页签,然后单击添加路由条目。
在添加路由条目面板,配置以下参数信息,然后单击确定。
配置
说明
名称
输入路由条目的名称。
目标网段
本文选择IPv4网段,然后设置0.0.0.0/0。
下一跳类型
选择下一跳的实例类型。
本文选择转发路由器。
转发路由器
本文选择VPC-B连接。
您可以在自定义路由条目页签,查看已创建的指向VPC-B连接的路由条目。
步骤四:创建SNAT条目
在NAT网关上配置相应的SNAT条目,以确保指定资源能够通过绑定的弹性公网IP访问互联网。
在公网NAT网关页面,找到目标公网NAT网关实例,然后在操作列单击设置SNAT。
在SNAT管理页签,单击创建SNAT条目。
在创建SNAT条目页面,配置以下参数,然后单击确定创建。
配置项
说明
SNAT条目粒度
本文选择VPC粒度。您可以根据实际业务需求,选择适合自身业务的SNAT条目粒度。
VPC粒度:适用于需要让VPC内所有ECS实例,以及通过CEN或专线等产品实现内网互通并配置了0.0.0.0/0路由条目指向该VPC的其他VPC或数据IDC内的ECS实例,统一通过同一弹性公网IP访问公网的场景。
交换机粒度:适用于对公网访问有精细控制需求,只允许指定的交换机具备公网访问能力的场景。
ECS/弹性网卡粒度:适用于对公网访问有精细控制需求,只允许指定的ECS实例或弹性网卡具备公网访问能力的场景。
自定义网段粒度:适用于需要灵活指定任意IP网段,通过NAT网关统一配置公网访问能力的场景,可覆盖VPC内、跨VPC或跨本地IDC等各种网络环境,满足复杂或定制化网络结构的需求。
说明当您选择多个交换机或ECS/弹性网卡时,将为您创建多条SNAT条目,这些条目将使用相同的公网IP地址。
选择弹性公网IP地址
选择用来提供公网访问的弹性公网IP。
结果验证
通过Workbench控制台依次登录ECS1、ECS2实例。
执行
ping 223.5.5.5命令。经验证,ECS1和ECS2实例均可成功访问公网。
左侧ECS1(IP: 192.168.20.105)验证结果:
[root@xxx ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.20.105 netmask 255.255.255.0 broadcast 192.168.20.255 inet6 fe80::216:3eff:fe05:a16b prefixlen 64 scopeid 0x20<link> ether 00:16:3e:05:a1:6b txqueuelen 1000 (Ethernet) RX packets 201827 bytes 292016507 (278.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 24840 bytes 6379164 (6.0 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 136 bytes 10888 (10.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 136 bytes 10888 (10.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@xxx ~]# ping 223.5.5.5 PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data. 64 bytes from 223.5.5.5: icmp_seq=1 ttl=125 time=4.05 ms 64 bytes from 223.5.5.5: icmp_seq=2 ttl=125 time=3.61 ms 64 bytes from 223.5.5.5: icmp_seq=3 ttl=125 time=3.68 ms 64 bytes from 223.5.5.5: icmp_seq=4 ttl=125 time=3.60 ms ^C --- 223.5.5.5 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 3.601/3.732/4.046/0.197 ms右侧ECS2(IP: 172.16.10.30)验证结果:
[root@xxx ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.16.10.30 netmask 255.255.255.0 broadcast 172.16.10.255 inet6 fe80::216:3eff:fe05:a187 prefixlen 64 scopeid 0x20<link> ether 00:16:3e:05:a1:87 txqueuelen 1000 (Ethernet) RX packets 203086 bytes 291677540 (278.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 27542 bytes 6764889 (6.4 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 136 bytes 10888 (10.6 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 136 bytes 10888 (10.6 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 [root@xxx ~]# ping 223.5.5.5 PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data. 64 bytes from 223.5.5.5: icmp_seq=1 ttl=124 time=3.81 ms 64 bytes from 223.5.5.5: icmp_seq=2 ttl=124 time=3.55 ms 64 bytes from 223.5.5.5: icmp_seq=3 ttl=124 time=3.56 ms 64 bytes from 223.5.5.5: icmp_seq=4 ttl=124 time=3.52 ms ^C --- 223.5.5.5 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3004ms rtt min/avg/max/mdev = 3.520/3.609/3.809/0.123 ms