在 SDN 基础结构中跨网络路由流量

本文介绍如何在 System Center Virtual Machine Manager (VMM) 构造中设置的软件定义网络(SDN)基础结构中跨网络路由流量。

使用 SDN RAS 网关,无论资源位于何处,都可以在物理和虚拟网络之间路由网络流量。 SDN RAS 网关是多租户、开发板网关协议(BGP),支持使用使用 IPsec 或通用路由封装(GRE)或第 3 层转发的站点到站点虚拟专用网络(VPN)建立连接。 了解详细信息

注意

  • 从 VMM 2019 UR1 中,一个连接的网络类型将更改为“已连接网络”。
  • VMM 2019 UR2 及更高版本支持 IPv6。
  • IPSec 隧道、GRE 隧道和 L3 层隧道支持 IPv6。

注意

  • IPSec 隧道、GRE 隧道和 L3 层隧道支持 IPv6。

开始之前

确保以下信息:

使用 VMM 配置站点到站点 VPN 连接

站点到站点 VPN 连接允许使用 Internet 在不同物理位置安全地连接两个网络。

对于托管数据中心内许多租户的云服务提供商(CSP),SDN RAS 网关提供了一个多租户网关解决方案,允许租户通过站点到站点 VPN 连接从远程站点访问和管理其资源,进而允许数据中心中的虚拟资源与其物理网络之间的网络流量。

VMM 2025 和 2022 支持 SDN 组件的双堆栈(Ipv4 + Ipv6)。

若要为站点到站点 VPN 连接启用 IPv6,路由子网必须是 IPv4 和 IPv6。 若要使网关在 IPv6 中工作,请提供以分号分隔的 IPv4 和 IPv6 地址,并在远程终结点中提供 IPv6 地址。 例如, 192.0.2.1/23;2001:0db8:85a3:0000:0000:8a2e:0370::/64。 对于指定 VIP 范围,请勿使用 IPv6 地址的缩短形式;使用“2001:db8:0:200:0:0:7”格式,而不是“2001:db8:0:200::7”。

启用 IPv6 的屏幕截图。

配置 IPSec 连接

使用以下过程

  1. 选择要配置站点到站点 IPSec 连接的 VM 网络,然后选择“ 连接”。
  2. 选择 “通过 VPN 隧道连接到另一个网络”。 (可选)若要在数据中心启用 BGP 对等互连,请选择“启用边界网关协议”(BGP)。
  3. 选择网关设备的网络控制器服务。
  4. 选择“VPN 连接>添加>IPSec 隧道”。
  5. 输入子网,如下图所示。 此子网用于将数据包路由出 VM 网络。 无需在数据中心预配置此子网。 站点到站点 VPN 的屏幕截图。
  6. 输入连接的名称和远程终结点的 IP 地址。 (可选)配置带宽。
  7. “身份验证”中,选择要使用的身份验证类型。 如果选择使用运行方式帐户进行身份验证,请使用用户名创建用户帐户,并将 IPSec 密钥作为帐户的密码。
  8. 路由中,输入要连接到的所有远程子网。 如果在“连接”页中选择“启用边界网关协议”(BGP),则不需要路由。
  9. “高级 ”选项卡上,接受默认设置。
  10. 如果在“连接”页中选择了“启用边界网关协议”(BGP),则可以在边界网关协议向导页上填写 ASN、对等 BGP IP 及其 ASN,如下所示。 启用 b g p 的屏幕截图。
  11. 若要验证连接,请尝试从 VM 网络上的某个虚拟机 ping 远程终结点 IP 地址。

配置 GRE 隧道

GRE 隧道支持租户虚拟网络与外部网络之间的连接。 由于 GRE 协议是轻量级的,并且对 GRE 的支持在大多数网络设备上都可用,因此它成为隧道中不需要数据加密的理想选择。 站点到站点 (S2S) 隧道中的 GRE 支持可促进租户虚拟网络和租户外部网络之间的流量转发。

使用以下过程

  1. 选择要在其中配置 S2S GRE 连接的 VM 网络,然后选择“ 连接”。
  2. 选择 “通过 VPN 隧道连接到另一个网络”。 (可选)若要在数据中心启用 BGP 对等互连,请选择“启用边界网关协议”(BGP)。
  3. 选择网关设备的网络控制器服务。
  4. 选择“VPN 连接>添加>GRE 隧道”。
  5. 输入子网,如下图所示。 此子网用于将数据包路由出 VM 网络。 无需在数据中心预配置此子网。 GRE 隧道的屏幕截图。
  6. 输入连接名称,并指定远程终结点的 IP 地址。
  7. 输入 GRE 密钥
  8. (可选)可以完成此屏幕上的其他字段;设置连接不需要这些值。
  9. 路由中,添加要连接到的所有远程子网。 如果在连接中选择了“启用边界网关协议”(BGP),则可以将此屏幕留空,而是在“边界网关协议”选项卡上完成 ASN、对等 BGP IP 和 ASN 字段
  10. 可以使用其余设置的默认值。
  11. 若要验证连接,请尝试从 VM 网络上的某个虚拟机 ping 远程终结点 IP 地址。

在远程站点上配置 IPsec 和 GRE 连接

在远程对等设备上,设置 IPSec\GRE 连接时,将 VMM UI 中的 VM 网络终结点 IP 地址用作目标地址

远程站点的屏幕截图。

配置 L3 转发

L3 转发可在数据中心的物理基础结构与 Hyper-V 网络虚拟化云中的虚拟化基础结构之间建立连接。

使用 L3 转发,租户网络虚拟机可以通过已在 SDN 环境中配置的 Windows Server 2016 SDN 网关连接到物理网络。 在本例中,SDN 网关充当虚拟网络和物理网络之间的路由器。

若要了解详细信息,请查看以下文章: Windows Server 网关作为转发网关RAS 网关高可用性

在尝试配置 L3 之前,请确保满足以下条件:

  • 确保以 VMM 服务器上的管理员身份登录。
  • 必须为需要为其设置 L3 转发的每个租户 VM 网络配置唯一的下一跃点逻辑网络(具有唯一 VLAN ID)。 租户网络和相应的物理网络之间必须有 1:1 映射(具有唯一 VLAN ID)。

使用以下步骤在 SCVMM 中创建下一跃点逻辑网络:

  1. 在 VMM 控制台上,选择“逻辑网络”,右键单击并选择“创建逻辑网络”。

  2. “设置” 页中,选择 “一个连接的网络”,选中“创建具有相同名称的 VM 网络 ”复选框 ,以允许虚拟机直接 访问此逻辑网络,并由 Microsoft网络控制器管理

  3. 为此新逻辑网络创建 IP 池。

    此池中的 IP 地址在脚本中需要用于设置 L3 转发。

下表提供了动态和静态 L3 连接的示例。

参数 详细信息/示例值
L3VPNConnectionName L3 转发网络连接的用户定义名称。 示例:Contoso_L3_GW
VmNetworkName 可以通过 L3 网络连接访问的租户虚拟网络的名称。 运行脚本时必须存在此网络。 示例:ContosoVMNetwork
NextHopVMNetworkName 下一跃点 VM 网络的用户定义名称,该网络已作为先决条件创建。 这表示想要与租户 VM 网络通信的物理网络。 运行此脚本时,此网络必须存在。 示例:Contoso_L3_Network
LocalIPAddresses 要配置在 SDN 网关 L3 网络接口上的 IP 地址。 此 IP 地址必须属于创建的下一跃点逻辑网络。 还必须提供子网掩码。 示例:10.127.134.55/25
PeerIPAddresses 物理网关的 IP 地址,可以通过 L3 逻辑网络访问。 此 IP 地址必须属于在先决条件中创建的下一跃点逻辑网络。 从租户 VM 网络发往物理网络的流量到达 SDN 网关后,此 IP 将充当下一跃点。 示例:10.127.134.65
GatewaySubnet 用于在 HNV 网关和租户虚拟网络之间路由的子网。 可以使用任何子网,确保它不会与下一跃点逻辑网络重叠。 示例:192.168.2.0/24
RoutingSubnets 需要位于 HNV 网关的 L3 接口上的静态路由。 这些路由适用于物理网络子网,必须可通过 L3 连接从租户 VM 网络访问这些子网。
EnableBGP 启用 BGP 的选项。 默认值:false。
TenantASNRoutingSubnets 仅当启用了 BGP 时,租户网关的 ASN 数量。

运行以下脚本以设置 L3 转发。 请参阅上表,检查每个脚本参数标识的内容。

  param (
      [Parameter(Mandatory=$true)]
      # Name of the L3 VPN connection
      $L3VPNConnectionName,
      [Parameter(Mandatory=$true)]
      # Name of the VM network to create gateway
      $VmNetworkName,
      [Parameter(Mandatory=$true)]
      # Name of the Next Hop one connected VM network
      # used for forwarding
      $NextHopVmNetworkName,
      [Parameter(Mandatory=$true)]
      # IPAddresses on the local side that will be used
      # for forwarding
      # Format should be @("10.10.10.100/24")
      $LocalIPAddresses,
      [Parameter(Mandatory=$true)]
      # IPAddresses on the remote side that will be used
      # for forwarding
      # Format should be @("10.10.10.200")
      $PeerIPAddresses,
      [Parameter(Mandatory=$false)]
      # Subnet for the L3 gateway
      # default value 10.254.254.0/29
      $GatewaySubnet = "10.254.254.0/29",
      [Parameter(Mandatory=$false)]
      # List of subnets for remote tenants to add routes for static routing
      # Format should be @("14.1.20.0/24","14.1.20.0/24");
      $RoutingSubnets = @(),
      [Parameter(Mandatory=$false)]
      # Enable BGP in the tenant space
      $EnableBGP = $false,
      [Parameter(Mandatory=$false)]
      # ASN number for the tenant gateway
      # Only applicable when EnableBGP is true
      $TenantASN = "0"
  )

  # Import SC-VMM PowerShell module
  Import-Module virtualmachinemanager

  # Retrieve Tenant VNET info and exit if VM Network not available
  $vmNetwork = Get-SCVMNetwork -Name $VmNetworkName;
  if ($vmNetwork -eq $null)
  {
      Write-Verbose "VM Network $VmNetworkName not found, quitting"
      return
  }

  # Retrieve L3 Network info and exit if VM Network not available
  $nextHopVmNetwork = Get-SCVMNetwork -Name $NextHopVmNetworkName;
  if ($nextHopVmNetwork -eq $null)
  {
      Write-Verbose "Next Hop L3 VM Network $NextHopVmNetworkName not found, quitting"
      return
  }

  # Retrieve gateway Service and exit if not available
  $gatewayDevice = Get-SCNetworkGateway | Where {$_.Model -Match "Microsoft Network Controller"};
  if ($gatewayDevice -eq $null)
  {
      Write-Verbose "Gateway Service not found, quitting"
      return
  }

  # Retrieve Tenant Virtual Gateway info
  $vmNetworkGatewayName = $VmNetwork.Name + "_Gateway";
  $VmNetworkGateway = Get-SCVMNetworkGateway -Name $vmNetworkGatewayName -VMNetwork $vmNetwork

  # Create a new Tenant Virtual Gateway if not configured
  if($VmNetworkGateway -eq $null)
  {
      if($EnableBGP -eq $false)
      {
          # Create a new Virtual Gateway for tenant
          $VmNetworkGateway = Add-SCVMNetworkGateway -Name $vmNetworkGatewayName -EnableBGP $false -NetworkGateway $gatewayDevice -VMNetwork $vmNetwork -RoutingIPSubnet $GatewaySubnet;
      }
      else
      {
          if($TenantASN -eq "0")
          {
              Write-Verbose "Please specify valid ASN when using BGP"
              return
          }

          # Create a new Virtual Gateway for tenant
          $VmNetworkGateway = Add-SCVMNetworkGateway -Name $vmNetworkGatewayName -EnableBGP $true -NetworkGateway $gatewayDevice -VMNetwork $vmNetwork -RoutingIPSubnet $GatewaySubnet -AutonomousSystemNumber $TenantASN;
      }

  }

  if ($VmNetworkGateway -eq $null)
  {
      Write-Verbose "Could not Find / Create Virtual Gateway for $($VmNetwork.Name), quitting"
      return
  }

  # Check if the network connection already exists
  $vpnConnection = Get-SCVPNConnection -VMNetworkGateway $VmNetworkGateway -Name $L3VPNConnectionName
  if ($vpnConnection -ne $null)
  {
      Write-Verbose "L3 Network Connection for $($VmNetwork.Name) already configured, skipping"
  }
  else
  {
      # Create a new L3 Network connection for tenant
      $vpnConnection = Add-SCVPNConnection  -NextHopNetwork $nexthopvmNetwork  -Name $L3VPNConnectionName -IPAddresses $LocalIPAddresses -PeerIPAddresses $PeerIPAddresses -VMNetworkGateway $VmNetworkGateway -protocol L3;

      if ($vpnConnection -eq $null)
      {
          Write-Verbose "Could not add network connection for $($VmNetwork.Name), quitting"
          return
      }
      Write-Output "Created VPN Connection " $vpnConnection;
  }

  # Add all the required static routes to the newly created network connection interface
  foreach($route in $RoutingSubnets)
  {
      Add-SCNetworkRoute -IPSubnet $route -RunAsynchronously -VPNConnection $vpnConnection -VMNetworkGateway $VmNetworkGateway
  }

配置 L3 转发

L3 转发可在数据中心的物理基础结构与 Hyper-V 网络虚拟化云中的虚拟化基础结构之间建立连接。

使用 L3 转发连接,租户网络虚拟机可以通过已在 SDN 环境中配置的 Windows Server 2016/2019 SDN 网关连接到物理网络。 在本例中,SDN 网关充当虚拟网络和物理网络之间的路由器。

使用 L3 转发连接,租户网络虚拟机可以通过 Windows Server 2016/2019/2022 SDN 网关(已在 SDN 环境中配置)连接到物理网络。 在本例中,SDN 网关充当虚拟网络和物理网络之间的路由器。

使用 L3 转发连接,租户网络虚拟机可以通过已在 SDN 环境中配置的 Windows Server 2019/2022/2022/2025 SDN 网关连接到物理网络。 在本例中,SDN 网关充当虚拟网络和物理网络之间的路由器。

若要了解详细信息,请查看以下文章: Windows Server 网关作为转发网关RAS 网关高可用性

在尝试配置 L3 连接之前,请确保满足以下条件:

  • 确保以 VMM 服务器上的管理员身份登录。
  • 必须为需要为其设置 L3 转发的每个租户 VM 网络配置唯一的下一跃点逻辑网络(具有唯一 VLAN ID)。 租户网络和相应的物理网络之间必须有 1:1 映射(具有唯一 VLAN ID)。

使用以下步骤在 VMM 中创建下一跃点逻辑网络:

  1. 在 VMM 控制台上,选择“逻辑网络”,右键单击并选择“创建逻辑网络”。

  2. 在“设置”页中,选择“一个已连接网络”并选择“创建同名的 VM 网络,以允许虚拟机直接访问此逻辑网络”和“由 Microsoft 网络控制器管理”

    一个连接的网络

注意

从 VMM 2019 UR1 中,一个连接的网络类型将更改为“已连接网络”。

  1. 为此新逻辑网络创建 IP 池。 设置 L3 转发需要此池中的 IP 地址。

使用以下步骤配置 L3 转发

注意

无法在 L3 VPN 连接中限制带宽。

  1. 在 VMM 控制台中,选择要通过 L3 网关连接到物理网络的租户虚拟网络。

  2. 右键单击所选租户虚拟网络,选择“属性>连接”。

  3. 选择 “通过 VPN 隧道连接到另一个网络”。 (可选)若要在数据中心启用 BGP 对等互连,请选择“启用边界网关协议”(BGP)。 UI 中 L3 配置的屏幕截图。

  4. 选择网关设备的网络控制器服务。

  5. “VPN 连接”页中,选择“添加第>3 层隧道”。

    添加第 3 层隧道的屏幕截图。

  6. 为路由子网提供 CIDR 表示法格式的 子网。 此子网用于将数据包路由出 VM 网络。 无需在数据中心预配置此子网。

    L3 子网的屏幕截图。

  7. 使用以下信息并配置 L3 连接:

参数 详细信息
名称 L3 转发网络连接的用户定义名称。
VM 网络 (NextHop) 下一跃点 VM 网络的用户定义名称,该网络已作为先决条件创建。 这表示想要与租户 VM 网络通信的物理网络。 选择“浏览”时,只能选择由网络服务管理的一个连接的 VM 网络
对等 IP 地址 物理网关的 IP 地址,可以通过 L3 逻辑网络访问。 此 IP 地址必须属于作为先决条件创建的下一跃点逻辑网络。 一旦从租户 VM 网络发往物理网络的流量到达 SDN 网关,此 IP 将充当下一跃点。 这必须是 IPv4 地址。 可以有多个对等 IP 地址,它们必须用逗号分隔。
本地 IP 地址 要配置在 SDN 网关 L3 网络接口上的 IP 地址。 这些 IP 地址必须属于先决条件中所创建的下一跃点逻辑网络。 还必须提供子网掩码。 示例:10.127.134.55/25。 这必须是 IPv4 地址,并且必须采用 CIDR 表示法格式。 对等 IP 地址和本地 IP 地址必须来自同一池。 这些 IP 地址必须属于 VM 网络的逻辑网络定义中定义的子网。
  • 如果使用静态路由,请在“路由”中输入要连接到的所有远程子网。

    远程子网的屏幕截图。

    注意

    必须为租户虚拟网络子网配置物理网络中的路由,下一跃点作为 SDN 网关上 L3 接口的 IP 地址(用于创建 L3 连接的本地 IP 地址)。 这是为了确保通过 SDN 网关正确路由发往租户虚拟网络的流量。

  • 如果使用 BGP,请确保在 SDN 网关内部接口 IP 地址之间建立 BGP 对等互连,该地址存在于网关 VM 上的不同隔离舱(而不是默认隔离舱)和物理网络上的对等设备中。

    若要使 BGP 正常工作,必须执行以下步骤

    1. 为 L3 连接添加 BGP 对等方。 在“边界网关协议”页上输入你的 ASN、对等 BGP IP 及其 ASN。

      添加 bgp 的屏幕截图。

    2. 根据以下部分的详述确定 SDN 网关内部地址。

    3. 在远程端(物理网络网关)上创建 BGP 对等互连。 创建 BGP 对等方时,使用 SDN 网关内部地址(在上一步骤中确定)作为对等 IP 地址。

    4. 在物理网络中配置路由,其目标为 SDN 网关内部地址,下一跃点为 L3 接口 IP 地址(创建 L3 连接时使用的本地 IP 地址)。

注意

配置 L3 连接之后,必须为租户虚拟网络子网在物理网络中配置路由,并且使用下一个跃点作为 SDN 网关上 L3 接口的 IP 地址(脚本中的参数 LocalIpAddresses)。 这是为了确保通过 SDN 网关正确路由发往租户虚拟网络的流量。

可以选择使用 L3 连接配置静态路由或动态路由(通过 BGP)。 如果使用静态路由,可以使用 Add-SCNetworkRoute 添加它们,如以下脚本中所述。

如果将 BGP 与 L3 隧道连接配合使用,则必须在 SDN 网关内部接口 IP 地址之间建立 BGP 对等互连,该地址存在于网关 VM 上的不同隔离舱(而不是默认隔离舱)和物理网络上的对等设备中。

若要使 BGP 正常工作,必须使用以下步骤:

  1. 使用 Add-SCBGPPeer cmdlet 为 L3 连接添加 BGP 对等方。

    示例:Add-SCBGPPeer -Name “peer1” -PeerIPAddress “12.13.14.15” -PeerASN 15 -VMNetworkGateway $VmNetworkGateway

  2. 根据以下部分的详述确定 SDN 网关内部地址。

  3. 在远程端(物理网络网关)上创建 BGP 对等互连。 创建 BGP 对等方时,请使用 SDN 网关内部地址(在上面的步骤 2 中确定)作为对等 IP 地址。

  4. 在物理网络上将路由配置为 SDN 网关内部地址,并将下一跃点配置为 L3 接口 IP 地址(脚本中的 LocalIPAddresses 参数)。

确定 SDN 网关内部地址

请按以下过程操作:

在安装了网络控制器的计算机或配置为网络控制器客户端的计算机上运行以下 PowerShell cmdlet:

$gateway = Get-NetworkControllerVirtualGateway -ConnectionUri <REST uri of your deployment>
$gateway.Properties.NetworkConnections.Properties.IPAddresses

此命令的结果可以显示多个虚拟网关,具体取决于已配置网关连接的租户数。 每个虚拟网关可以有多个连接(IPSec、GRE、L3)。

由于已知道连接的 L3 接口 IP 地址(LocalIPAddresses),因此可以根据该 IP 地址标识正确的连接。 建立正确的网络连接后,运行以下命令(在相应的虚拟网关上)获取虚拟网关的 BGP 路由器 IP 地址。

$gateway.Properties.BgpRouters.Properties.RouterIp

此命令的结果提供必须在远程路由器上配置为对等 IP 地址的 IP 地址。

从 VMM PowerShell 设置流量选择器

使用以下过程

注意

使用的值只是示例。

  1. 使用以下参数创建流量选择器。

    $t= new-object Microsoft.VirtualManager.Remoting.TrafficSelector
    
    $t.Type=7 // IPV4=7, IPV6=8
    
    $t.ProtocolId=6 // TCP =6, reference: https://en.wikipedia.org/wiki/List_of_IP_protocol_numbers
    
    $t.PortEnd=5090
    
    $t.PortStart=5080
    
    $t.IpAddressStart=10.100.101.10
    
    $t.IpAddressEnd=10.100.101.100
    
  2. 使用 Add-SCVPNConnection 或 Set-SCVPNConnection-LocalTrafficSelectors 参数配置上述流量选择器。