使用第 2 层扩展网络迁移工作负载

本页面介绍如何使用第 2 层 VPN(L2VPN)将第 2 层网络从本地环境扩展至您的私有云。

基于 L2VPN 的第 2 层网络扩展可以在本地VMware环境中使用或不使用基于NSX的网络。如果您的本地工作负载没有基于 NSX 的网络,请使用独立的 NSX Edge 服务网关。

部署场景

要使用 L2VPN 扩展本地网络,您必须配置 L2VPN 服务器(目标 NSX-T Tier0 路由器)和 L2VPN 客户端(来源于独立客户端)。

在此部署方案中,您可以使用站点到站点 VPN 隧道将私有云连接到本地环境,该隧道允许本地管理和 vMotion 子网与私有云管理子网和 vMotion 子网通信。此安排可以启用 vCenter vMotion (xVC-vMotion)。您将 NSX-T Tier0 路由器部署为私有云中的 L2VPN 服务器。

在本地环境中将 NSX 独立 Edge 部署为 L2VPN 客户端,然后将其与 L2VPN 服务器配对。在每一侧创建 GRE 隧道端点,并将其配置为“扩展”本地第 2 层网络到私有云。

如需详细了解如何使用 L2 VPN 进行迁移,请参阅虚拟专用网

前提条件

在部署和配置解决方案之前,请验证以下各项是否已准备就绪:

  • 设置了站点到站点的 VPN,以连接您的本地环境和您的私有云数据中心。
  • 本地 vSphere 版本是 6.7U1+ 或 6.5P03+。
  • 本地 vSphere 许可处于 Enterprise Plus 级别(适用于 vSphere 分布式交换机)。
  • 您已确定要扩展到私有云的工作负载第 2 层网络。
  • 您已在本地环境中标识了用于部署 L2VPN 客户端设备的第 2 层网络。
  • 创建私有云。
  • 独立 NSX-T Edge 设备的版本与私有云环境中使用的 NSX-T Manager 版本 (NSX-T 2.3.0) 兼容。
  • 已在本地 vCenter 中创建了一个中继端口组。
  • 已预留一个 IP 地址用于 NSX-T 独立客户端上行链路 IP 地址,并已存在 1:1 的 NAT,用于在两个地址之间进行转换。
  • 在本地DNS服务器上为 cs-needs-review 域设置 DNS 转发,以指向私有云 DNS 服务器。
  • 根据 vMotion 在两个网站上的运行要求,RTT 延迟不超过 150 毫秒。

限制和注意事项

下表列出了受支持的 vSphere 版本和网络适配器类型。

vSphere 版本 来源 vSwitch 类型 虚拟 NIC 驱动程序 目标 vSwitch 类型 受支持?
所有 DVS 所有 DVS
vSphere 6.7UI 或更高版本,6.5P03 或更高版本 DVS VMXNET3 N-VDS
vSphere 6.7UI 或更高版本,6.5P03 或更高版本 DVS E1000 N-VDS 不受支持(根据 VMware)
vx 6.7UI 或 6.5P03、NSX-V 或 NSX-T2.2、6.5P03 或更高版本 所有 所有 N-VDS 不受支持(根据 VMware)

从 VMware NSX-T 2.3 版本开始:

  • 通过 L2VPN 扩展到本地的私有云端逻辑交换机不能同时路由。无法将扩展的逻辑交换机连接到逻辑路由器。
  • L2VPN 和基于路由的 IPSEC VPN 只能使用 API 调用进行配置。

如需了解详情,请参阅虚拟专用网

L2 VPN 部署示例

下表提供了 L2 VPN 部署的示例规范。

部署独立 ESG(L2 VPN 客户端)的本地网络

资源项
网络名称 MGMT_NET_VLAN469
VLAN 469
CIDR 10.250.0.0/24
独立的 Edge 设备 IP 地址 10.250.0.111
独立的 Edge 设备 NAT IP 地址 192.227.85.167

本地网络将被扩展

资源项
VLAN 472
CIDR 10.250.3.0/24

NSX-T Tier0 路由器(L2 VPN 服务器)的私有云 IP 架构

资源项
环回界面 192.168.254.254/32
隧道界面 5.5.5.1/29
逻辑交换机(已被扩展) Stretch_LS
环回界面(NAT IP 地址) 104.40.21.81

将私有云网络映射到扩展网络

资源项
VLAN 712
CIDR 10.200.15.0/24

获取 L2VPN 所需的逻辑路由器 ID

以下步骤展示了如何获取 IPsec 和 L2VPN 服务的 Tier0 DR 逻辑路由器实例的逻辑路由器 ID。稍后在实现 L2VPN 时使用逻辑路由器 ID。

  1. 登录 NSX-T Manager,然后选择 Networking > Routers > Provider-LR > Overview。 对于 High Availability Mode,选择 Active-Standby。此操作会打开一个弹出式窗口,其中显示 Tier0 路由器当前处于活动状态的边缘虚拟机。
  2. 选择 Fabric > Nodes > Edges。记下上一步中标识的活动边缘虚拟机(边缘虚拟机 1)的管理 IP 地址。
  3. 打开与 Edge 虚拟机的管理 IP 地址的 SSH 会话。运行 get-logical-router 命令。
  4. 如果您没有看到 DR-Provider-LR 条目,请完成以下步骤:
    • 创建两个支持叠加的逻辑交换机。一个逻辑交换机会扩展到已迁移的工作负载所在的本地。另一个逻辑交换机是虚拟交换机。如需了解详情,请参阅创建逻辑交换机
    • 将虚拟交换机连接到具有本地链路 IP 地址或来自本地或私有云的任何非重叠子网的 Tier1 路由器。如需了解详情,请参阅在 Tier-1 逻辑路由器上添加下行链路端口
    • 在 Edge 虚拟机的 SSH 会话上再次运行 get logical-router 命令。输出显示 DR-Provider-LR 逻辑路由器的 UUID。记下 UUID(配置 L2VPN 时需要用到)。

获取 L2VPN 所需的逻辑交换机 ID

  1. 登录 NSX-T Manager
  2. 选择 Networking > Switching > Switches > Overview
  3. 记下扩展逻辑交换机的 UUID,这是配置 L2VPN 时必需的。

L2VPN 的路由和安全注意事项

要在NSX-T Tier0 路由器和 NSX 独立 Edge 客户端之间建立基于 IPsec 路由的 VPN、NSX-T Tier0 路由器的环回接口必须能够通过 UDP 500/4500 与本地 NSX 独立客户端的公共 IP 地址通信。

允许 UDP 500/4500 的 IPsec

  1. 创建一个公共 IP 地址,以便在 Google Cloud 确认引擎界面中为 NSX-T Tier0 环回界面创建该 IP 地址。
  2. 使用允许 UDP 500/4500 入站流量的状态规则创建防火墙表,并将防火墙表附加到 NSX-T 主机传输子网。
  1. 为环回界面网络创建空路由。
    • 登录 NSX-T Manager,然后选择 Networking > Routing > Routers > Provider-LR > Routing > Static routes
    • 点击添加
    • 对于 Network,请输入环回接口 IP 地址。
    • 对于下一个跃点,点击添加并为下一个跃点指定 Null。保留管理员距离的默认值 1。
  2. 创建 IP 前缀列表。
    • 登录 NSX-T Manager,然后选择 Networking > Routing > Routers > Provider-LR > Routing > IP prefix lists
    • 点击添加
    • 输入名称以标识列表。
    • 前缀部分,点击两次添加
    • 在第一行中,为网络输入 0.0.0.0/0,为操作输入拒绝
    • 在第二行中,为网络选择任意,为操作选择允许
  3. 将 IP 前缀列表连接到两个 BGP 临近项(TOR)。将IP前缀列表附加到 BGP 临近项可防止在 BGP 中向 TOR 交换机通告默认路由。但是,包含 null 路由的任何其他路由都将向 TOR 交换机通告环回界面 IP 地址。
  4. 登录 NSX-T Manager,然后选择 Networking > Routing > Routers > Provider-LR > Routing > BGP > Neighbors。选择第一个临近项。
    • 点击 Edit > Address families
    • 对于 IPv4 系列,请修改出站过滤器列,然后选择您创建的 IP 前缀列表。点击保存。对第二个临近项重复此步骤。
  5. 将 null 静态路由重新分发到 BGP。要将环回界面路由通告到底层,您必须将 null 静态路由重新分布到 BGP。
    • 登录 NSX-T Manager,然后选择 Networking > Routing > Routers > Provider-LR > Routing > Route redistribution > Neighbors
    • 选择 Provider-LR-route_redistribution,然后点击修改
    • 选中静态复选框并点击保存

在 NSX-T Tier0 路由器上配置基于路由的 VPN

请使用以下模板,为在 NSX-T Tier0 路由器上配置基于路由的 VPN 提供所有详细信息。每个 POST 调用中的 UUID 在后续的 POST 调用中都是必需的。

L2VPN 的环回和隧道界面的 IP 地址必须是唯一的,不得与本地或私有云网络重叠。环回界面网络必须始终为 /32

Loopback interface ip : 192.168.254.254/32
Tunnel interface subnet : 5.5.5.0/29
Logical-router ID : UUID of Tier0 DR logical router obtained in section "Steps to fetch Logical-Router ID needed for L2VPN"
Logical-switch ID(Stretch) : UUID of Stretch Logical Switch obtained earlier
IPSec Service ID :
IKE profile ID :
DPD profile ID :
Tunnel Profile ID :
Local-endpoint ID :
Peer end-point ID :
IPSec VPN session ID (route-based) :
L2VPN service ID :
L2VPN session ID :
Logical-Port ID :
Peer Code :

对于以下所有 API 调用,请将 IP 地址替换为 NSX-T 管理器 IP 地址。您可以通过 POSTMAN 客户端或使用 curl 命令运行所有这些 API 调用。

在逻辑路由器上启用 IPSec VPN 服务

POST   https://192.168.110.201/api/v1/vpn/ipsec/services/
{
"resource_type": "IPSecVPNService",
"description": "Manage VPN service",
"display_name": "IPSec VPN service",
"logical_router_id": "Logical-router ID",
"ike_log_level": "INFO",
"enabled": true
}

创建主文件:IKE

POST https://192.168.110.201/api/v1/vpn/ipsec/ike-profiles

{
"resource_type": "IPSecVPNIKEProfile",
"description": "IKEProfile for siteA",
"display_name": "IKEProfile siteA",
"encryption_algorithms": ["AES_128"],
"ike_version": "IKE_V2",
"digest_algorithms": ["SHA2_256"],
"sa_life_time":21600,
"dh_groups": ["GROUP14"]
}

创建个人资料:DPO

POST  https://192.168.110.201/api/v1/vpn/ipsec/dpd-profiles

{
"resource_type": "IPSecVPNDPDProfile",
"display_name": "nsx-default-dpd-profile",
"enabled": true
}

创建个人资料:隧道

POST  https://192.168.110.201/api/v1/vpn/ipsec/tunnel-profiles

{
"resource_type": "IPSecVPNTunnelProfile",
"display_name": "nsx-default-tunnel-profile",
"enable_perfect_forward_secrecy": true,
"encryption_algorithms": ["AES_GCM_128"],
"digest_algorithms": [],
"sa_life_time":3600,
"dh_groups": ["GROUP14"],
"encapsulation_mode": "TUNNEL_MODE",
"transform_protocol": "ESP",
"df_policy": "COPY"
}

创建本地端点

{
"resource_type": "IPSecVPNLocalEndpoint",
"description": "Local endpoint",
"display_name": "Local endpoint",
"local_id": "",
"ipsec_vpn_service_id": {
"target_id": "IPSec VPN service ID"},
"local_address": "",
"trust_ca_ids": [],
"trust_crl_ids": []
}

创建对等端点

POST https://192.168.110.201/api/v1/vpn/ipsec/peer-endpoints

{
"resource_type": "IPSecVPNPeerEndpoint",
"description": "Peer endpoint for site B",
"display_name": "Peer endpoint for site B",
"connection_initiation_mode": "INITIATOR",
"authentication_mode": "PSK",
"ipsec_tunnel_profile_id": "IPSec Tunnel profile ID",
"dpd_profile_id": "DPD profile ID",
"psk":"nsx",
"ike_profile_id": "IKE profile ID",
"peer_address": "",
"peer_id": ""
}

创建基于路由的 VPN 会话

POST :  https://192.168.110.201/api/v1/vpn/ipsec/sessions

{
"resource_type": "RouteBasedIPSecVPNSession",
"peer_endpoint_id": "Peer Endpoint ID",
"ipsec_vpn_service_id": "IPSec VPN service ID",
"local_endpoint_id": "Local Endpoint ID",
"enabled": true,
"tunnel_ports": [
{
"ip_subnets": [
{
"ip_addresses": [
 "5.5.5.1"
],
"prefix_length": 24
}
  ]
}
]
}

在 NSX-T Tier0 路由器上配置 L2VPN

在每次 POST 调用后提供以下信息。后续 POST 调用需要 ID。

L2VPN Service ID:
L2VPN Session ID:
Logical Port ID:

创建 L2VPN 服务

以下 GET 命令的输出将为空,因为配置尚未完成。

GET : https://192.168.110.201/api/v1/vpn/l2vpn/services

对于以下 POST 命令,逻辑路由器 ID 是之前获得的 Tier0 DR 逻辑路由器的 UUID。

POST : https://192.168.110.201/api/v1/vpn/l2vpn/services

{
"logical_router_id": "Logical Router ID",
"enable_full_mesh" : true
}

创建 L2VPN 会话

对于以下 POST 命令,L2VPN 服务 ID 是您刚刚获取的 ID,IPsec VPN 会话 ID 是在上一部分中获取的 ID。

POST: https://192.168.110.201/api/v1/vpn/l2vpn/sessions

{
"l2vpn_service_id" : "L2VPN service ID",
"transport_tunnels" : [
{
"target_id" : "IPSec VPN session ID"
}
]
}

这些调用会创建一个 GRE 隧道端点。要检查状态,请运行以下命令。

edge-2> get tunnel-port
Tunnel      : 44648dae-8566-5bc9-a065-b1c4e5c3e03f
IFUID       : 328
LOCAL       : 169.254.64.1
REMOTE      : 169.254.64.2
ENCAP       : GRE

Tunnel      : cf950ca1-5cf8-5438-9b1a-d2c8c8e7229b
IFUID       : 318
LOCAL       : 192.168.140.155
REMOTE      : 192.168.140.152
ENCAP       : GENEVE

Tunnel      : 63639321-87c5-529e-8a61-92c1939799b2
IFUID       : 304
LOCAL       : 192.168.140.155
REMOTE      : 192.168.140.156
ENCAP       : GENEVE

使用指定的隧道 ID 创建逻辑端口

   POST https://192.168.110.201/api/v1/logical-ports/

{
"resource_type": "LogicalPort",
"display_name": "Extend logicalSwitch, port for service",
"logical_switch_id": "Logical switch ID",
"admin_state" : "UP",
"attachment": {
"attachment_type":"L2VPN_SESSION",
"id":"L2VPN session ID",
"context" : {
"resource_type" : "L2VpnAttachmentContext",
    "tunnel_id" : 10
}
    }
        }

在 NSX-T 端获取 L2VPN 的对等代码

获取 NSX-T 端点的对等代码。配置远程端点时需要对等代码。您可以通过上一部分获取 L2VPN。如需了解详情,请参阅 NSX-T 2.3 API

GET https://192.168.110.201/api/v1/vpn/l2vpn/sessions//peer-codes

部署 NSX-T 独立客户端(本地)

在部署之前,请验证本地防火墙规则是否允许从先前为 NSX T T0 路由器环回界面保留的公用 IP 地址入站和出站 UDP 500/4500 流量。

  1. 下载独立边缘客户端 OVF 并将下载的软件包中的文件解压到文件夹中。
  2. 转到包含所有提取文件的文件夹。
  3. 选择所有的 vmdks,然后点击 Next
    • NSX-l2t-client-large.mfNSX-l2t-client-large.ovf(适用于大型设备)。
    • NSX-l2t-client-Xlarge.mfNSX-l2t-client-Xlarge.ovf 用于超大尺寸的设备大小。
  4. 输入 NSX-T 独立客户端的名称,然后点击“下一步”。
  5. 根据需要点击下一步以访问数据存储区设置。
  6. 为 NSX-T 独立客户端选择适当的数据存储区,然后点击下一步
  7. 为 NSX-T 独立客户端的中继(中继 PG)、公用(上行 PG)和 HA(上行 PG)接口选择正确的端口组。点击下一步
  8. 自定义模板屏幕中提供以下信息,然后点击下一步
    • 展开 L2T:
      • 对等地址。输入 Google Cloud VMware Engine 门户上为 NSX-T Tier0 环回接口预留的 IP 地址。
      • 对等代码。粘贴从 L2VPN 服务器部署中获得的对等代码。
      • 子接口 VLAN(隧道 ID)。输入要扩展的 VLAN ID。在括号 () 中,输入先前配置的隧道 ID。
    • 展开上行接口:
      • DNS IP address。输入本地 DNS IP 地址。
      • Default gateway。输入 VLAN 的网关,以充当此客户端的默认网关。
      • IP address。输入独立客户端的上行 IP 地址。
      • Prefix length。输入上行 VLAN/子网的前缀长度。
      • CLI admin/enable/root user password。设置 admin/enable/root 账号的密码。
  9. 检查设置,然后点击 Finish

配置本地接收器端口

如果其中一个 VPN 网站未部署 NSX,您可以通过在该网站部署独立的 NSX 边缘来配置 L2 VPN。要让边缘服务网关设备作为 L2 VPN 客户端运行,请在非 NSX 管理的主机上使用 OVF 文件部署独立边缘。

如果独立边缘中继 vNIC 连接到 vSphere 分布式交换机,则 L2 VPN 功能需要混杂模式或接收器端口。使用混杂模式可能会导致重复的 ping 和重复响应。因此,请在 L2 VPN 独立 NSX 边缘配置中使用接收器端口模式。如需了解详情,请参阅配置接收器端口

IPsec VPN 和 L2VPN 验证

使用以下命令从 NSX-T 独立边缘验证 IPsec 和 L2VPN 会话。

nsx-l2t-edge> show service ipsec
-----------------------------------------------------------------------
vShield Edge IPSec Service Status:
IPSec Server is running.
AESNI is enabled.
Total Sites: 1, 1 UP, 0 Down
Total Tunnels: 1, 1 UP, 0 Down
----------------------------------
Site:  10.250.0.111_0.0.0.0/0-104.40.21.81_0.0.0.0/0
Channel: PeerIp: 104.40.21.81    LocalIP: 10.250.0.111  Version: IKEv2  Status: UP
Tunnel: PeerSubnet: 0.0.0.0/0    LocalSubnet: 0.0.0.0/0   Status: UP
----------------------------------
nsx-l2t-edge> show service l2vpn
L2 VPN is running
----------------------------------------
L2 VPN type: Client/Spoke

SITENAME                       IPSECSTATUS          VTI                  GRE
1ecb00fb-a538-4740-b788-c9049e8cb6c6 UP                   vti-100              l2t-1

使用以下命令验证从 NSX-T Tier0 路由器进行的 IPsec 和 L2VPN 会话。

edge-2> get ipsecvpn session
Total Number of Sessions: 1

IKE Session ID : 3
UUID           : 1ecb00fb-a538-4740-b788-c9049e8cb6c6
Type           : Route

Local IP       : 192.168.254.254      Peer IP        : 192.227.85.167
Local ID       : 104.40.21.81         Peer ID        : 192.227.85.167
Session Status : Up

Policy Rules
    VTI UUID       : 4bf96e3b-e50b-49cc-a16e-43a6390e3d53
    ToRule ID      : 560874406            FromRule ID    : 2708358054
    Local Subnet   : 0.0.0.0/0            Peer Subnet    : 0.0.0.0/0
    Tunnel Status  : Up
edge-2> get l2vpn session
Session       : f7147137-5dd0-47fe-9e53-fdc2b687b160
Tunnel        : b026095b-98c8-5932-96ff-dda922ffe316
IPSEC Session : 1ecb00fb-a538-4740-b788-c9049e8cb6c6
Status        : UP

使用以下命令来验证本地环境中 NSX-T 独立客户端虚拟机所在的 ESXi 主机上的接收器端口。

[root@esxi02:~] esxcfg-vswitch -l |grep NSX
  53                  1           NSXT-client-large.eth2
  225                1           NSXT-client-large.eth1
  52                  1           NSXT-client-large.eth0
[root@esxi02:~] net-dvs -l | grep "port\ [0-9]\|SINK\|com.vmware.common.alias"
                com.vmware.common.alias = csmlab2DS ,   propType = CONFIG
        port 24:
        port 25:
        port 26:
        port 27:
        port 13:
        port 19:
        port 169:
        port 54:
        port 110:
        port 6:
        port 107:
        port 4:
        port 199:
        port 168:
        port 201:
        port 0:
        port 49:
        port 53:
        port 225:
                com.vmware.etherswitch.port.extraEthFRP =   SINK
        port 52:

后续步骤