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

重要

此版本的 Virtual Machine Manager (VMM) 已终止支持。 建议 升级到 VMM 2022

本文介绍如何在 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 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: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 网络上的一个虚拟机对远程终结点 IP 地址执行 ping 操作。

配置 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 转发,租户网络虚拟机可以通过 Windows Server 2016 SDN 网关(已在 SDN 环境中配置)连接到物理网络。 在本例中,SDN 网关充当虚拟网络和物理网络之间的路由器。

若要了解详细信息,请参阅以下文章: Windows server 网关用作转发网关RAS 网关高可用性

在尝试配置 L3 之前,请确保做好以下准备

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

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

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

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

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

    脚本中需要该池的 IP 地址以便设置 L3 转发。

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

Parameter 详细信息/示例值
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 通过 L3 逻辑网络可访问的物理网络网关的 IP 地址。 此 IP 地址必须属于先决条件中所创建的下一跃点逻辑网络。 从租户 VM 网络发往物理网络的流量到达 SDN 网关后,此 IP 将充当下一跃点。 例如:10.127.134.65
GatewaySubnet 用于在 HNV 网关和租户虚拟网络间路由的子网。 可以使用任何子网,确保它不会与下一跃点逻辑网络重叠。 例如:192.168.2.0/24
RoutingSubnets 需要位于 HNV 网关的 L3 接口上的静态路由。 这些路由适用于物理网络子网,应通过 L3 连接从租户 VM 网络访问。
EnableBGP 用于启用 BGP 的选项。 默认值:False。
TenantASNRoutingSubnets 租户网关的 ASN 编号(仅当启用 BGP 时)。

运行以下脚本设置 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 转发连接,租户网络虚拟机可以通过 Windows Server 2016/2019 SDN 网关(已在 SDN 环境中配置)连接到物理网络。 在本例中,SDN 网关充当虚拟网络和物理网络之间的路由器。

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

若要了解详细信息,请参阅以下文章: Windows server 网关用作转发网关RAS 网关高可用性

在尝试配置 L3 连接之前,请确保做好以下准备

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

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

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

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

    一个已连接网络

注意

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

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

使用以下步骤配置 L3 转发

注意

不能限制 L3 VPN 连接中的带宽。

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

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

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

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

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

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

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

    L3 子网的屏幕截图。

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

Parameter 详细信息
名称 L3 转发网络连接的用户定义名称。
VM 网络 (NextHop) 作为先决条件创建的下一跃点 VM 网络的用户定义名称。 这表示要与租户 VM 网络进行通信的物理网络。 选择“ 浏览”时,只能选择由网络服务管理的 一个连接的 VM 网络
对等 IP 地址 通过 L3 逻辑网络可访问的物理网络网关的 IP 地址。 此 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 添加它们,如以下脚本中所述。

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

若要使 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 对等方时,请使用上述步骤 2 中确定的 SDN 网关内部地址 () 作为对等 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-SCVPNConnectionSet-SCVPNConnection-LocalTrafficSelectors 参数配置上述流量选择器。