SDN 게이트웨이 성능

적용 대상: Windows Server 2022, Windows Server 2019, Azure Stack HCI, 버전 22H2 및 21H2

Windows Server 2016에서 고객의 관심사 중 하나는 SDN 게이트웨이가 최신 네트워크의 처리량 요구 사항을 충족하지 못하는 것이었습니다. IPsec 및 GRE 터널의 네트워크 처리량에는 IPsec 연결에 대한 단일 연결 처리량이 약 300Mbps이고 GRE 연결의 경우 약 2.5Gbps로 제한되었습니다.

Windows Server 2019부터는 각각 1.8Gbps, IPsec 및 GRE 연결의 경우 15Gbps로 급증하면서 SDN 게이트웨이 성능이 크게 향상되었습니다. 이 모든 것이 CPU 주기/바이트당 크게 감소하여 CPU 사용률이 훨씬 적은 초고성능 처리량을 제공합니다.

게이트웨이를 사용하여 고성능 사용

GRE 연결의 경우 게이트웨이 VM에서 Windows Server 2019 빌드를 배포/업그레이드하면 향상된 성능이 자동으로 표시됩니다. 수동 단계는 관련되지 않습니다.

IPsec 연결의 경우 기본적으로 가상 네트워크에 대한 연결을 만들 때 Windows Server 2016 데이터 경로 및 성능 번호를 가져옵니다. Windows Server 2019 데이터 경로를 사용하도록 설정하려면 다음을 수행합니다.

  1. SDN 게이트웨이 VM에서 Services 콘솔(services.msc)로 이동합니다.
  2. Azure Gateway Service라는 서비스를 찾고 시작 유형을 Automatic으로 설정합니다.
  3. 게이트웨이 VM을 다시 시작합니다. 이 게이트웨이의 활성 연결은 중복 게이트웨이 VM으로 장애 조치(failover)됩니다.
  4. 게이트웨이 VM의 나머지 부분에 대해 이전 단계를 반복합니다.

고성능 IPsec 연결이 작동하려면 다음 요구 사항을 충족해야 합니다.

  • 온-프레미스 게이트웨이에서 NAT-T(Network Address Translation-Traversal)를 사용하도록 설정해야 합니다. 고성능 IPsec 연결을 사용하도록 설정하는 경우 SDN 게이트웨이는 NAT 규칙을 구성하므로 온-프레미스 게이트웨이에서도 NAT-T를 사용하도록 설정해야 합니다.
  • 온-프레미스 게이트웨이는 포트 500 및 4500 및 프로토콜 50 및 51에서 UDP(사용자 데이터그램 프로토콜) 패킷을 허용해야 합니다.

최상의 성능 결과를 위해 IPsec 연결의 quickMode 설정에서 cipherTransformationConstant 및 authenticationTransformConstant가 GCMAES256 암호 그룹을 사용하는지 확인합니다.

성능을 최대화하려면 게이트웨이 호스트 하드웨어가 AES-NI 및 PCLMULQDQ CPU 명령 집합을 지원해야 합니다. AES-NI가 비활성화된 모델을 제외한 모든 Westmere(32nm) 이상 Intel CPU에서 사용할 수 있습니다. 하드웨어 공급업체 설명서를 참조하여 CPU가 AES-NI 및 PCLMULQDQ CPU 명령 집합을 지원하는지 확인할 수 있습니다.

다음은 최적의 보안 알고리즘을 사용하는 IPsec 연결의 REST 샘플입니다.

# NOTE: The virtual gateway must be created before creating the IPsec connection. More details here.
# Create a new object for Tenant Network IPsec Connection
$nwConnectionProperties = New-Object Microsoft.Windows.NetworkController.NetworkConnectionProperties

# Update the common object properties
$nwConnectionProperties.ConnectionType = "IPSec"
$nwConnectionProperties.OutboundKiloBitsPerSecond = 2000000
$nwConnectionProperties.InboundKiloBitsPerSecond = 2000000

# Update specific properties depending on the Connection Type
$nwConnectionProperties.IpSecConfiguration = New-Object Microsoft.Windows.NetworkController.IpSecConfiguration
$nwConnectionProperties.IpSecConfiguration.AuthenticationMethod = "PSK"
$nwConnectionProperties.IpSecConfiguration.SharedSecret = "111_aaa"

$nwConnectionProperties.IpSecConfiguration.QuickMode = New-Object Microsoft.Windows.NetworkController.QuickMode
$nwConnectionProperties.IpSecConfiguration.QuickMode.PerfectForwardSecrecy = "PFS2048"
$nwConnectionProperties.IpSecConfiguration.QuickMode.AuthenticationTransformationConstant = "GCMAES256"
$nwConnectionProperties.IpSecConfiguration.QuickMode.CipherTransformationConstant = "GCMAES256"
$nwConnectionProperties.IpSecConfiguration.QuickMode.SALifeTimeSeconds = 3600
$nwConnectionProperties.IpSecConfiguration.QuickMode.IdleDisconnectSeconds = 500
$nwConnectionProperties.IpSecConfiguration.QuickMode.SALifeTimeKiloBytes = 2000

$nwConnectionProperties.IpSecConfiguration.MainMode = New-Object Microsoft.Windows.NetworkController.MainMode
$nwConnectionProperties.IpSecConfiguration.MainMode.DiffieHellmanGroup = "Group2"
$nwConnectionProperties.IpSecConfiguration.MainMode.IntegrityAlgorithm = "SHA256"
$nwConnectionProperties.IpSecConfiguration.MainMode.EncryptionAlgorithm = "AES256"
$nwConnectionProperties.IpSecConfiguration.MainMode.SALifeTimeSeconds = 28800
$nwConnectionProperties.IpSecConfiguration.MainMode.SALifeTimeKiloBytes = 2000

# L3 specific configuration (leave blank for IPSec)
$nwConnectionProperties.IPAddresses = @()
$nwConnectionProperties.PeerIPAddresses = @()

# Update the IPv4 Routes that are reachable over the site-to-site VPN Tunnel
$nwConnectionProperties.Routes = @()
$ipv4Route = New-Object Microsoft.Windows.NetworkController.RouteInfo
$ipv4Route.DestinationPrefix = "<<On premise subnet that must be reachable over the VPN tunnel. Ex: 10.0.0.0/24>>"
$ipv4Route.metric = 10
$nwConnectionProperties.Routes += $ipv4Route

# Tunnel Destination (Remote Endpoint) Address
$nwConnectionProperties.DestinationIPAddress = "<<Public IP address of the On-Premise VPN gateway. Ex: 192.168.3.4>>"

# Add the new Network Connection for the tenant. Note that the virtual gateway must be created before creating the IPsec connection. $uri is the REST URI of your deployment and must be in the form of “https://<REST URI>”
New-NetworkControllerVirtualGatewayNetworkConnection -ConnectionUri $uri -VirtualGatewayId $virtualGW.ResourceId -ResourceId "Contoso_IPSecGW" -Properties $nwConnectionProperties -Force

테스트 결과

테스트 랩에서 SDN 게이트웨이에 대한 광범위한 성능 테스트를 수행했습니다. 테스트에서는 SDN 시나리오 및 비 SDN 시나리오에서 게이트웨이 네트워크 성능을 Windows Server 2019와 비교했습니다. 여기에서 블로그 문서에서 캡처한 결과 및 테스트 설정 세부 정보를 찾을 수 있습니다.