二层专线上云解决方案

更新时间:

方案概述

企业客户在搬站上云的过程中会遇到各种问题,云上云下网络打通问题经常成为困扰客户的难点之一。网络连通的方式、介质、技术多种多样,一些连通方式由于公有云的特殊性并不被云平台所支持,但由于客户自身业务的一些限制,又必须选用这种方式进行连通。

阿里云高速通道默认支持的是云上云下使用专线进行三层网络打通,云上云下需要网络隔离,利用路由转发实现互联互通。但一些客户由于历史网段规划问题、业务应用系统IP地址写死等问题,其云下IDC和云上VPC需要使用相同的网段进行通信,这种方式是阿里云网络产品默认不支持的,本文将介绍一种云网络架构及相关配置,实现云上云下二层专线互通的网络架构。

需要说明的是,一般推荐客户使用默认的三层互通是阿里云混合云的最佳方案,如果因业务限制等原因,不得不采用二层专线互通时才使用本方案

方案优势

企业IP地址免规划上云

使用本方案后,云上和云下使用相同的地址段进行互通,因此无需单独为云上环境规划IP地址段。

细粒度业务迁移

由于使用同一网段,不用重新进行IP规划,因此可以以单个IP地址粒度进行业务迁移,不必一次迁移一整个交换机网段。

客户场景

IDCVPC需使用相同网段进行通信

场景描述

网络连通的方式、介质、技术多种多样,有一些连通方式由于公有云的特殊性并不被云平台所支持,部分客户由于历史网段规划问题、业务应用系统IP地址写死等问题,其云下IDC和云上VPC需要使用相同的网段进行通信。

适用客户

  • 企业因业务系统IP地址写死等原因,需要搬站前后服务器IP地址不变。

  • 单个IP粒度业务上云的客户。

  • 使用线下物理负载均衡设备,要求后端服务器必须是同一个二层网段的,但后端需要绑定云上虚拟机。

方案架构

方案架构说明如下:

  • VPC与线下IDC通过高速通道上云专线(也可以通过VPN实现,本文主要讨论上云专线的情况)服务实现三层互通(云专线本身如何搭建不在本方案范围内,请参考相应的帮助文档)。

  • 线下IDC内部署了VXLAN VTEP设备,且与二层网关L2GW的主网卡IPPing通(VXLAN VTEP部署不在本方案范围内,请参考相关厂商文档)。

  • 在客户VPC内使用ECS搭建L2GW,利用Linux内核的VXLAN、ARP Proxy、路由转发等能力,在VPC与客户IDC之间中转流量,实现VPC与线下IDC在同一子网。

产品费用及名词

产品费用

产品名称

产品说明

产品费用

专有网络VPC

专有网络VPC(Virtual Private Cloud)是您专有的云上私有网络。您可以完全掌控自己的专有网络,例如选择IP地址范围、配置路由表和网关等,您可以在自己定义的专有网络中使用阿里云资源,如云服务器、云数据库RDS和负载均衡等。

本身免费,详情参见产品计费

云服务器ECS

云服务器ECS(Elastic Compute Service)是一种简单高效、处理能力可弹性伸缩的计算服务。帮助您构建更稳定、安全的应用,提升运维效率,降低IT成本,使您更专注于核心业务创新。

收费,详情参见产品计费

高速通道

阿里云高速通道(Express Connect)可在本地数据中心IDC(Internet Data Center)和云上专有网络VPC(Virtual Private Cloud)间建立高速、稳定、安全的私网通信。高速通道的物理专线数据传输过程可信可控,避免网络质量不稳定问题,同时可避免数据在传输过程中被窃取。

收费,详情参见产品计费

名词解释

名称

说明

L2GW

Level-2 GateWay,二层网关,供局域网到局域网的转换。

Proxy ARP

代理ARPARP协议的一个变种。对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答

VXLAN VTEP

VXLAN Tunnel EndPoint,VTEP是直接与终端连接的设备,负责原始以太报文的VXLAN封装和解封装。

安全性

VPC安全性

专有网络VPC具有安全可靠、灵活可控、灵活可用以及较强的可扩展性,详情参见产品优势访问控制

注意事项

L2GW与子网对应关系

L2GW可以绑定多个ENI,而每个ENI属于不同的子网(ENI不能跨AZ绑定),实现L2GW与子网的多对1绑定。在ENI上配置相应的辅助私网IPL2GW内对应的路由后,可以实现多个子网通过1条隧道与线下IDC多个VLAN互通(需要线下IDCVXLAN设备支持一个VXLAN对应多个VLAN),也可以每个子网通过1VXLAN隧道对应线下1VLAN,子网:隧道:线下IDC VLAN1:1:1关系。由于VPC内的子网天然互通,所以如果线下IDC的不同VLAN都配置了VPC内的子网网关地址作为自己VLAN的网关,则线下IDC的不同VLAN间也能互通。

L2GW转发性能

L2GW依赖Linux内核转发,转发性能约等于所在ECS实例的内网访问性能。选择不同的实例规格,转发性能不同。

L2GW扩容

当一台L2GW性能不满足需求时,可以在同子网内部署多台L2GW实现性能扩容。扩容时,每个L2GWENI配置的辅助私网IP不同。

能访问的线下IDC IP数量

每个辅助私网IP对应一个线下IDC IP,能访问的线下IDC IP数量等于能配置的辅助私网IP数量;VPCECSIP数量L2GW无限制,只受VPC能支持的ECS/IP数量限制。

根据ECS实例规格不同,能支持的ENI数量和每个ENI能支持的辅助私网IP数量不同。最大规格为g5ne.18xlarge,支持配置15ENI,每个ENI支持配置50个辅助私网IP。每个私网辅助IP对应一个线下IDC IP,所以能支持的最大线下IP数量为749(15*50-1)。

通过增加同子网内L2GW的数量,能线性增加辅助私网IP数量,例如2g5ne.18xlargeL2GW能支持1498个线下IP。参考多L2GW方案。

L2GW热备

不支持L2GW热备份。由于同一个辅助私网IP不能配置到2ECS实例,不同ECS实例的主私网IP不能相同,ALI-VXLAN不支持广播/组播等等限制,所以无法支持L2GW的热备份。目前L2GW的可靠性依赖ECS本身的可靠性,ECS实例重启实测一般不到1分钟。

不能用自定义路由代替辅助私网IP

当前VPC自定义路由不支持配置掩码大于当前子网的路由,而使用掩码小于当前子网的自定义路由,虽然可配置,但实际不影响转发,不生效。所以无法使用自定义路由来代替辅助私网IP。

L2GW Linux内必须配置指向VXLAN接口的明细路由

必须配置指向VXLAN接口的明细路由,否则ARP报文只会从主网卡发送,无法从VXLAN接口发送。L2GW无法学到线下IDCARP信息。

MTU问题

L2GW在报文加了VXLAN封装,导致报文长度增加,如果VPC通过ipsec VPN与线下IDC互通,则报文长度会更长。因此依赖ECS和线下IDC主机的路径MTU发现机制,主动减小报文大小。如果能确定整个路径上的MTU大小,可以在L2GWVXLAN接口设置MTU值,以配合实现这个路径的路径MTU发现。

实施步骤

实施准备

  • 已创建二层网关L2GW所在的VPC及交换机。

  • 已完成云上与IDC网络互联,详情操作可参考物理专线连接VPN组网

  • 已完成云下VXLAN VTEP部署,步骤请参考相关厂商文档。

  • 收集如下信息:

    说明

    示例

    互联网段

    需要横跨VPC与线下IDC的子网网段

    172.16.1.0/24

    线下IDC VXLAN VTEP IP地址

    用于与VPCL2GW建立隧道,作为隧道的起点/终点

    192.168.100.100

    VXLAN所使用的端口号

    L2GW配置VXLAN时使用,需与线下IDC VXLAN设备一致

    4789

    L2GW主私网IP

    用于与线下IDC VXLAN设备建立隧道,作为隧道的起点/终点的VTEP地址。

    如果该VTEP地址与需要横跨VPC与线下IDC的子网不同网段,则需要在对应VXLAN接口配置一个同网段的IP地址。

    VTEP地址与需要横跨VPC与线下IDC的子网同网段时:

    172.16.1.100

    这时VXLAN接口可以不配置IP地址。

    VTEP地址与需要横跨VPC与线下IDC的子网不同网段时:

    172.16.99.100

    这时VXLAN接口需要配置同网段IP地址:

    172.16.1.100

    VXLAN VNI

    L2GW配置VXLAN时使用,需与线下IDC VXLAN设备一致

    10000

    要访问的线下IDC IP地址

    用于L2GW的辅助私网IP配置

    172.16.1.10、172.16.1.15

实施计划

示例拓扑入上图,配置完成后实现VPC172.16.1.200、172.16.1.210能和线下IDC172.16.1.10、172.16.1.15这些同一子网内的IP能够相同通信。

实施时长

在实施准备工作完成的情况下,本方案实施预计时长:45分钟。

操作步骤

L2GW控制台配置

  1. 在横跨子网的网段内创建操作系统为LinuxECS实例,详情参见创建ECS实例

    注意:

    • L2GW所在ECS实例要求Linux内核版本大于3.9——使用uname -r命令查看内核版本。

    • L2GW所在ECS实例上安装了iproute2工具——阿里云提供的公共镜像基本都预装了iproute2。

  2. 建立ECS实例主网卡与线下IDC VXLAN设备的网络连接(云专线/VPN),确保主网卡IP能与VXLAN VTEP IP互相Ping通。

  3. 根据要访问的线下IDC IP数量配置ECS实例的ENI数量,并绑定到ECS实例,详情参见创建弹性网卡绑定弹性网卡

  4. ECS实例的“实例详情”的“弹性网卡”TAB页中选择“管理辅助私网IP”配置具体的IP信息,详情参见分配辅助私网IP地址

L2GW Linux配置

  1. 登录ECS,在/opt目录下新建名为l2gw.sh的文件,并 chmod +x l2gw.sh 为文件添加可执行权限

  2. 编辑l2gw.sh文件内容,根据收集的信息替换命令的参数

    单个VXLAN隧道的l2gw.sh文件内容:

    #!/bin/sh
    
    ip link add vxlan0 type vxlan id 10000 dstport 4789 local 172.16.99.100 remote 192.168.100.100
    ip link set vxlan0 up
    ip add add 172.16.1.100/24 dev vxlan0
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/conf/vxlan0/proxy_arp
    ip rou add 172.16.1.10 dev vxlan0
    ip rou add 172.16.1.15 dev vxlan0

    2VXLAN隧道的l2gw.sh文件内容,更多隧道则增加相应的命令:

    #!/bin/sh
    
    ip link add vxlan10 type vxlan id 10000 dstport 4789 local 172.16.99.100 remote 192.168.100.100
    ip link add vxlan20 type vxlan id 20000 dstport 4789 local 172.16.99.100 remote 192.168.100.100
    ip link set vxlan10 up
    ip link set vxlan20 up
    ip add add 172.16.1.100/24 dev vxlan10
    ip add add 172.16.2.100/24 dev vxlan20
    echo 1 > /proc/sys/net/ipv4/ip_forward
    echo 1 > /proc/sys/net/ipv4/conf/vxlan10/proxy_arp
    echo 1 > /proc/sys/net/ipv4/conf/vxlan20/proxy_arp
    ip rou add 172.16.1.10 dev vxlan10
    ip rou add 172.16.1.15 dev vxlan10
    ip rou add 172.16.2.10 dev vxlan20
    ip rou add 172.16.2.15 dev vxlan20

    ip link add命令创建VXLAN隧道,idVNI,dstportVXLAN报文的目的端口号,localL2GW所在ECS的主网卡IP,remote为线下IDC VTEP设备VTEP地址。这些信息请根据前置条件中收集到的信息修改。

    ip add add命令为VXLAN接口配置ip地址,这个地址需要与横跨VPC与线下IDC的子网同网段。

    ip rou add命令添加指向线下IDC IP的路由,可以是主机IP,也可以是网段,如果是网段需要该网段不包含VPCECS所使用的IP,并且网段的子网掩码不得小于VPC的子网。这些信息请根据前置条件中收集到的信息修改。

  3. 在/etc/systemd/system目录下新建名为l2gw.service的文件,并编辑文件内容

    [Unit]
    Description=L2GW configuration
    After=network-online.target
    Wants=network-online.target
    
    [Service]
    User=root
    Type=oneshot
    ExecStart=/opt/l2gw.sh
    
    [Install]
    WantedBy=multi-user.target
  4. 使用systemctl start l2gw.service命令运行l2gw.sh脚本

  5. 使用systemctl enable l2gw.service命令让l2gw.sh脚本开机自启动

配置查看

  • VXLAN隧道信息查看:ip -d link show VXLAN0命令可以查看VXLAN隧道配置信息,状态为UNKNOWN不是异常

  • ARP信息查看:ip neigh命令或ARP命令查看当前ARP信息,线下IDCIP对应的dev/IfaceVXLAN接口才是正常

  • 路由信息查看:ip route命令查看指向线下IDC IP的路由是否存在,路由对应dev需为VXLAN0才正常

  • Linux是否启用路由转发:sysctl net.ipv4.ip_forward 显示 = 1 为启用了路由转发

  • Linux VXLAN接口是否启用ARP proxy:sysctl net.ipv4.conf.VXLAN0.proxy_ARP 显示 = 1 为VXLAN0接口启用了ARP proxy

故障排除

L2GW能否通过HAproxy、keepalived实现热备

HAproxy是一款TCPHTTP代理,而VXLAN报文是UDP报文,所以无法通过HAproxy实现L2GW的双机热备。

keepalived依赖VRRP实现双机热备,而VPC暂不支持广播/组播,也无法在没有LB的情况下配置VIP,而且也无法将同一个辅助私网IP配置到不同的ECS实例,所以无法通过keepalived实现双机热备。

是否支持子网跨AZ

不支持。与VPC的限制相同,一个子网只能属于一个交换机,而交换机/子网不能跨AZ。

VXLAN接口是否需要配置IP地址

L2GWVXLAN接口不建议配置IP地址。如果需要配置IP地址来判断VXLAN隧道是否正常转发,则可以在VXLAN接口配置需要横跨VPC与线下IDC的子网范围内的IP地址,该IP地址不能已经被VPCECS或线下IDC内使用,且掩码不能小于这个子网的掩码(即配置的掩码范围内IP数量不能大于子网内的IP数量,例如子网是/24,则VXLAN接口的掩码不能是/23,必须是/24以上的/25、/26等)

L2GW时来回路径不一致问题

从线下IDC发起ARP请求时,由于子网内多个L2GW都启用了ARP proxy,且都配置了相同的指向线下IDC IP的明细路由,所以多个L2GW都会回复ARPMAC不同。线下IDC主机访问VPC时(无论是主动访问还是回复报文),将流量送给其中一个L2GW,再到VPC内的目的ECS。目的ECS回包时,根据VMNC表项将流量送给辅助私网IP(与线下IDC主机IP相同)所在的L2GW,再到线下IDC。当线下IDC主机内ARPMACL2GW-01,而该辅助私网IP配置在L2GW-02上时,造成来回路径不一致。

即使在L2GW与线下IDCVXLAN设备之间部署了检查状态的安全设备,只要不检查VXLAN报文内层,不会造成影响。

不建议将不同L2GW VXLAN接口mac配置成相同的MAC,这可能造成线下IDC VXLAN设备认为是MAC地址漂移。

多个L2GW时,是否有二层环路

VXLAN有水平分割机制,所有VXLAN隧道都在同一个线下IDC VXLAN设备终结时,不会形成环路。