使用 Azure 扩展网络将本地子网扩展到 Azure

概述

使用 Azure 扩展网络可将本地子网延伸到 Azure,使本地虚拟机在迁移到 Azure 时保留其原始的本地专用 IP 地址。

网络是使用两个充当虚拟设备的 Windows Server 2019 VM 之间的双向 VXLAN 隧道扩展的,其中一个 VM 在本地运行,另一个在 Azure 中运行,两者也都已连接到要扩展的子网。 要扩展的每个子网都需要一对设备。 可以使用多个对来扩展多个子网。

注意

应该仅将 Azure 扩展网络用于在迁移到 Azure 时其 IP 地址不可更改的计算机。 如果可以的话,最好更改 IP 地址并将其连接到完全位于 Azure 中的子网。

规划

若要为使用 Azure 扩展网络做好准备,必须确定要延伸哪个子网,然后执行以下步骤:

容量计划

可以使用 Azure 扩展网络最多扩展 250 个 IP 地址。 聚合吞吐量预期大约为 700 Mbps,具体吞吐量根据 Azure 扩展网络虚拟设备的 CPU 速度会出现一定的变化。

Azure 中的配置

在使用 Windows Admin Center 之前,必须通过 Azure 门户执行以下步骤:

  1. 在 Azure 中创建一个虚拟网络,其中至少包含两个子网,加上建立网关连接所需的子网。 创建的子网之一必须使用与要扩展的本地子网相同的子网 CIDR。 该子网在路由域中必须是唯一的,这样它就不会与任何本地子网重叠。

  2. 配置虚拟网络网关,以使用站点到站点或 ExpressRoute 连接将虚拟网络连接到本地网络。

  3. 在 Azure 中创建一个能够运行嵌套虚拟化的 Windows Server 2022 Azure Edition VM。 此 VM 是两个虚拟设备中的一个。 将主要网络接口连接到可路由的子网,将第二个网络接口连接到扩展的子网。

注意

Azure 扩展网络要求为 Azure 中运行的 VM 安装 Windows Server 2022 Azure Edition。

  1. 启动 VM,启用 Hyper-V 角色,然后重启。 例如:

    Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
    
  2. 在 VM 中创建两个外部虚拟交换机,并将其中一个连接到每个网络接口。 例如:

    New-VMSwitch -Name "External" -AllowManagementOS $true -NetAdapterName "Ethernet"
    New-VMSwitch -Name "Extended" -AllowManagementOS $true -NetAdapterName "Ethernet 2"
    

本地配置

还必须在本地基础结构中执行一些手动配置,包括创建一个 VM 来充当本地虚拟设备:

  1. 确保子网在部署本地 VM(虚拟设备)的物理计算机上可用。 这包括要扩展的子网,以及另一个唯一的、不与 Azure 虚拟网络中的任何子网重叠的子网。

  2. 在支持嵌套虚拟化的任何虚拟机监控程序上创建 Windows Server 2019 或 2022 VM。 此 VM 是本地虚拟设备。 我们建议将其创建为群集中的高可用性 VM。 将一个虚拟网络适配器连接到可路由的子网,并将另一个虚拟网络适配器连接到扩展的子网。

  3. 启动 VM,在 VM 上的 PowerShell 会话中运行以下命令以启用 Hyper-V 角色,然后重启 VM:

    Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart
    
  4. 在 VM 上的 PowerShell 会话中运行以下命令以在 VM 中创建两个外部虚拟交换机,并将其中一个连接到每个网络接口:

    New-VMSwitch -Name "External" -AllowManagementOS $true -NetAdapterName "Ethernet"
    New-VMSwitch -Name "Extended" -AllowManagementOS $true -NetAdapterName "Ethernet 2"
    

其他先决条件

如果本地网络和 Azure 之间有防火墙,必须将防火墙配置为允许非对称路由。 这可能包括执行禁用序列号随机化并启用 TCP 状态绕过的步骤。 有关具体的步骤,请参阅防火墙供应商文档。

部署

部署是通过 Windows Admin Center 驱动的。

安装并配置 Windows Admin Center

  1. 下载 Windows Admin Center 并将其安装到任何能够运行 Windows Admin Center 的计算机(前面创建的两个虚拟设备除外)。

  2. 在 Windows Admin Center 中,选择“设置”(页面右上角)>“扩展”。 然后选择“扩展”:

    显示“设置”的“可用扩展”选项卡的屏幕截图

  3. 在“可用扩展”选项卡上,依次选择“扩展网络”、“安装”。

    几秒钟后,应会出现一条指示安装成功的消息。

  4. 将 Windows Admin Center 连接到 Azure(如果尚未这样做)。 如果现在跳过此步骤,稍后的过程仍会要求你这样做。

  5. 在 Windows Admin Center 中,转到“所有连接”>“添加”,然后在“Windows Server”磁贴中选择“添加”。 输入本地虚拟设备的服务器名称(并根据需要输入凭据)。

    Windows Admin Center 的屏幕截图,其中显示了本地虚拟设备上服务器管理器中的扩展网络工具

  6. 单击“扩展网络”开始操作。 首先你会看到概述和一个设置按钮:

    映像

部署 Azure 扩展网络

  1. 单击“设置”开始配置。

  2. 单击“下一步”,直到浏览完概述。

  3. 在“上传包”面板中,需要下载 Azure 扩展网络代理包并将其上传到虚拟设备。 按照面板中的说明操作。

    重要

    根据需要向下滚动并单击“上传”,然后单击“下一步: 扩展网络设置”。

  4. 选择要扩展的本地网络的子网 CIDR。 子网列表是从虚拟设备读入的。 如果你未将虚拟设备连接到正确的子网集,则此列表中不会显示所需的子网 CIDR。

  5. 选择子网 CIDR 后,单击“下一步”。

  6. 选择要扩展到的订阅、资源组和虚拟网络:

    Azure 网络

    系统会自动选择区域(Azure 位置)和子网。 选择“下一步: 扩展网络网关设置”以继续。

  7. 接下来配置虚拟设备。 系统应会自动填充本地网关的信息:

    本地网络网关

    如果信息正确,可单击“下一步”。

  8. 对于 Azure 虚拟设备,需要选择要使用的资源组和 VM:

    Azure 网络网关

注意

Azure 虚拟设备的 VM 列表仅显示包含 Windows Server 2022 Azure Edition 的 Azure VM。 如果该列表中未显示你的 VM,请确保该 VM 使用 Azure Edition,否则请重新创建 VM。

  1. 选择 VM 后,还需要选择 Azure 扩展网络网关子网 CIDR。 然后单击“下一步: 部署”。

  2. 查看摘要信息,然后单击“部署”开始部署过程。 部署大约需要 5-10 分钟。 部署完成后,你将看到以下用于管理扩展 IP 地址的面板,其中的状态应为“正常”:

    安装完成

管理

对于你希望可通过扩展网络访问的每个 IP 地址,都需要对其进行配置。 最多可以配置 250 个要扩展的地址。 扩展地址

  1. 单击“添加 IPv4 地址”:

    添加 ipv4 地址

  2. 右侧会显示“添加新的 IPv4 地址”浮出控件:

    添加 ipv4 地址面板

  3. 使用“添加”按钮手动添加地址。 你添加的本地地址可由添加到 Azure 地址列表的 Azure 地址访问,反之亦然。

  4. Azure 扩展网络将扫描网络以发现 IP 地址,并根据扫描结果填充“建议”列表。 若要扩展这些地址,必须使用下拉列表并选中已发现的地址旁边的复选框。 并非所有地址都将被发现。 (可选)使用“添加”按钮手动添加未自动发现的地址。

    添加 ipv4 地址面板和信息

  5. 完成后,单击“提交”。 你将看到状态先后更改为“正在更新”、“正在进行”,最后在配置完成后恢复“正常”状态。

    地址现已扩展。 随时可以使用“添加 IPv4 地址”按钮添加更多地址。 如果扩展网络的任何一端不再使用某个 IP 地址,请选中该地址旁边的复选框,然后选择“删除 IPv4 地址”。

如果你不再想要使用 Azure 扩展网络,请单击“删除 Azure 扩展网络”按钮。 这会从两个虚拟设备中卸载代理,并删除扩展的 IP 地址。 网络将停止扩展。 如果在删除扩展网络后你想再次使用它,则必须重新运行安装程序。

故障排除

如果在部署 Azure 扩展网络期间收到错误,请使用以下步骤:

  1. 确认本地虚拟设备使用 Windows Server 2019 或 2022。 确认 Azure 虚拟设备使用 Windows Server 2022 Azure Edition。

  2. 确认未在其中一个虚拟设备上运行 Windows Admin Center。 建议从本地网络运行 Windows Admin Center。

  3. 确保可以使用 enter-pssession 从 Windows Admin Center 网关远程连接到本地 VM。

  4. 如果 Azure 和本地之间有防火墙,请确认防火墙配置为允许所选端口(默认为 4789)上的 UDP 流量。 使用 ctsTraffic 之类的工具配置侦听器和发送器。 确认可以通过指定的端口双向发送流量。

  5. 使用 pktmon 验证是否可按预期发送和接收数据包。 在每个虚拟设备上运行 pktmon:

    Pktmon start –etw
    
  6. 运行 Azure 扩展网络配置,然后停止跟踪:

    Pktmon stop
    Netsh trace convert input=<path to pktmon etl file>
    
  7. 打开从每个虚拟设备生成的文本文件,并搜索指定端口(默认为 4789)上的 UDP 流量。 如果你看到了从本地虚拟设备发送的流量,但 Azure 虚拟设备未收到这些流量,则你需要验证设备之间的路由和防火墙。 如果你看到了从本地发送到 Azure 的流量,则应会看到 Azure 虚拟设备发送一个数据包作为响应。 如果本地虚拟设备从未收到该数据包,则你需要验证路由是否正确,并且 Azure 和本地之间没有防火墙阻止流量。

在完成初始配置后诊断数据路径

配置 Azure 扩展网络后,你可能遇到的其他问题通常是由于防火墙阻止了流量,或者超过了 MTU(如果故障是间歇性的)所引起的。

  1. 确认两个虚拟设备都已启动并正在运行。

  2. 确认扩展网络代理在每个虚拟设备上运行:

    get-service extnwagent
    
  3. 如果状态不是“正在运行”,可以使用以下命令将它启动:

    start-service extnwagent
    
  4. 当流量在扩展网络上的两个 VM 之间发送时,按照上面步骤 5 中所述,使用 packetmon 验证流量是否已由虚拟设备接收,通过配置的 UDP 端口发出,然后由另一个虚拟设备接收和转发。