VPN 환경에서 Stream 및 라이브 이벤트에 대한 특수 고려 사항

참고

이 문서는 원격 사용자를 위한 Microsoft 365 문서 집합의 일부입니다.

  • VPN 분할 터널링을 사용하여 원격 사용자에 대한 Microsoft 365 최적화하는 개요는 Overview: VPN split tunneling for Microsoft 365.
  • VPN 분할 터널링을 구현하는 방법에 대한 자세한 지침은 VPN 분할 터널링 구현을 Microsoft 365.
  • VPN 분할 터널링 시나리오의 자세한 목록은 일반적인 VPN 분할 터널링 시나리오를 Microsoft 365.
  • VPN 분할 터널링 환경에서 Teams 미디어 트래픽을 보호하는 방법에 대한 지침은 VPN 분할 터널링을 위한 Teams 미디어 트래픽 보호를 참조하세요.
  • 중국 사용자에 대한 Microsoft 365 테넌트 성능을 최적화하는 데 대한 자세한 내용은 중국 사용자를 Microsoft 365 성능 최적화를 참조하세요.

Microsoft 365 라이브 이벤트 트래픽(Teams 생성 라이브 이벤트에 참가하는 참석자 및 Teams, Stream 또는 Yammer을 통해 외부 인코더로 생성되는 이벤트) 및 요구 시 Stream 트래픽은 현재 서비스의 URL/IP 목록에서 기본 및 최적화로 분류됩니다. 이러한 끝점은 다른 서비스에서도 사용할 수 있는 CDNS에서 호스트되어 있기 때문에 기본값 으로 분류됩니다. 고객은 일반적으로 이 유형의 트래픽을 프록시로 프록시하고 이러한 끝점에서 일반적으로 수행되는 모든 보안 요소를 적용하는 것을 선호합니다.

많은 고객이 VPN 인프라를 통해 대량 및 대기 시간에 민감한 트래픽을 라우팅하는 대신 로컬 인터넷 연결에서 직접 사용자를 Stream/Live 이벤트에 연결하는 데 필요한 URL/IP 데이터를 요청했습니다. 일반적으로 이 작업은 전용 네임스페이스와 끝점에 대한 정확한 IP 정보 없이는 사용할 수 없습니다. 끝점에 대해 기본값으로 분류된 Microsoft 365 없습니다.

다음 단계에 따라 강제 터널 VPN을 사용하여 클라이언트에서 Stream/Live Events 서비스에 직접 연결을 사용하도록 설정할 수 있습니다. 이 솔루션은 집에서 작업하는 시나리오로 인해 네트워크 트래픽이 많은 동안 VPN을 통해 라이브 이벤트 트래픽을 라우팅하지 않도록 하는 옵션을 고객에게 제공하기 위한 것입니다. 가능한 경우 검사 프록시를 통해 서비스에 액세스하는 것이 좋습니다.

참고

이 솔루션을 사용하면 제공된 IP 주소로 확인되지 않고 VPN을 트래버스하는 서비스 요소가 있을 수 있지만 스트리밍 데이터와 같은 대량의 볼륨 트래픽이 필요합니다. 이 오프로드에 의해 걸러진 Live Events/Stream의 범위를 벗어난 다른 요소가 있을 수 있지만 직접 진행하기 전에 FQDN IP 일치를 모두 충족해야 하기 때문에 이러한 요소가 제한되어야 합니다.

중요

고객은 라이브 이벤트의 성능 향상보다 VPN을 우회하는 더 많은 트래픽을 보낼 위험에 가중치가 있는 것이 좋습니다.

Live 이벤트 및 Stream에 대해 강제 Teams 예외를 구현하기 위해 다음 단계를 적용해야 합니다.

1. 외부 DNS 확인 구성

클라이언트는 다음 호스트 이름을 IP 주소로 확인할 수 있도록 외부 재구성 DNS 확인을 사용할 수 있도록 해야 합니다.

  • *.azureedge.net
  • *.media.azure.net
  • *.bmc.cdn.office.net

*.azureedge.net Stream 이벤트에 사용됩니다(Microsoft Stream에서 라이브 스트리밍을 위한 인코더 구성 - Microsoft Stream | Microsoft Docs).

*.media.azure.net *및 .bmc.cdn.office.net 는 Teams 클라이언트에서 예약된 Teams 생성 라이브 이벤트(빠른 시작 이벤트, RTMP-In 지원되는 이벤트[로드맵 ID 84960])Teams 에 사용됩니다.

이러한 끝점 중 일부는 Stream/Live 이벤트 외부의 다른 요소와 공유됩니다. 이러한 FQDN을 사용하여 VPN 솔루션에서 기술적으로 가능한 경우에도 VPN 오프로드를 구성하는 것이 좋습니다(예: IP가 아닌 FQDN에서 작동하는 경우).

FQDNS는 VPN 구성에 필요하지 않습니다. 관련 트래픽을 직접 보내기 위해 IP와 결합하여 PAC 파일에서만 사용할 수 있습니다.

2. PAC 파일 변경 구현(필요한 경우)

VPN을 사용하는 동안 PAC 파일을 사용하여 트래픽을 프록시를 통해 라우팅하는 조직의 경우 일반적으로 FQDNS를 사용하여 이 방법을 사용할 수 있습니다. 그러나 Stream/Live * 이벤트를 사용할 경우 제공된 호스트 이름에는 .azureedge.net 와일드카드가 포함되는데, 이 와일드카드에는 전체 IP 목록을 제공할 수 없는 다른 요소도 포함되어 있습니다. 따라서 요청이 DNS 와일드카드 일치만 기준으로 직접 전송된 경우 이 문서 3단계의 3 단계에서 직접 경로를 통해 경로가 없는 경우 이러한 끝점에 대한 트래픽이 차단됩니다.

이 문제를 해결하기 위해 1단계에서 설명한 예제 PAC 파일의 호스트 이름과 함께 다음의 IPS를 제공하고 이를 사용할 수 있습니다. PAC 파일은 URL이 Stream/Live 이벤트에 사용된 URL과 일치하는지 확인한 다음 해당 URL이 일치하는지 확인한 다음, DNS 쿼리에서 반환된 IP가 서비스에 대해 제공된 IP와 일치하는지 확인합니다. 두 가지가 일치하면 트래픽이 직접 라우팅됩니다. 두 요소(FQDN/IP)가 일치하지 않는 경우 트래픽이 프록시로 전송됩니다. 따라서 구성은 IP 및 정의된 네임스페이스의 범위를 벗어나는 IP로 확인되는 모든 것이 VPN을 통해 프록시를 트래버스하도록 합니다.

끝점의 현재 목록 CDN 수집

라이브 이벤트는 여러 CDN 공급자를 사용하여 고객에게 스트리밍하여 최상의 범위, 품질 및 탄력성 제공 현재 Microsoft와 Verizon의 Azure CDN 둘 다 사용됩니다. 시간이 지날 때 지역별 가용성과 같은 상황으로 인해 변경될 수 있습니다. 이 문서는 IP 범위를 최신으로 유지할 수 있는 원본입니다.

Microsoft에서 Azure CDN 경우 공식 Microsoft 다운로드 센터에서 Azure IP 범위 및 서비스 태그 (공용 클라우드) 다운로드에서 목록을 다운로드할 수 있습니다. JSON에서 AzureFrontdoor.Frontend 서비스 태그를 구체적으로 찾아야 합니다. addressPrefixes 에는 IPv4/IPv6 서브넷이 표시됩니다. 시간이 경과하면 IPS가 변경될 수 있지만 서비스 태그 목록은 항상 사용 전에 업데이트됩니다.

Verizon에서 Azure CDN(Edgecast https://docs.microsoft.com/rest/api/cdn/edge-nodes/list )의 경우 (사용해 보기 클릭)를 사용하여 전체 목록을 찾을 수 있습니다. Premium Verizon 섹션을 구체적으로 찾아야_ 합니다. 이 API에는 모든 에지캐스트 IPS(원본 및 Anycast)가 표시됩니다. 현재 API가 원점과 Anycast를 구분하는 메커니즘은 없습니다.

PAC 파일에서 이를 구현하기 위해 FQDN을 통해 Microsoft 365 최적화 트래픽 다이렉트(권장되는 모범 사례)를 전송하고 FQDN과 반환된 IP 주소의 조합을 통해 중요한 Stream/Live 이벤트 트래픽을 직접 전송하는 다음 예제를 사용할 수 있습니다. 자리 지정자 이름은 contoso 가 해당 위치의 특정 테넌트 이름으로 contoso.onmicrosoft.com

PAC 파일 예제

PAC 파일을 생성하는 방법의 예는 다음과 같습니다.

  1. 아래 스크립트를 로컬 하드 디스크에 에 저장합니다Get-TLEPacFile.ps1.

  2. Verizon URL로 이동하여 결과 JSON을 다운로드합니다(cdnedgenodes.json과 같은 파일에 붙여 넣기).

  3. 스크립트와 동일한 폴더에 파일을 넣습니다.

  4. PowerShell 창에서 다음 명령을 실행합니다. SPO URL을 사용하려는 경우 다른 이름으로 테넌트 이름을 변경합니다. 유형 2이기 때문에 최적화 및 허용(유형 1은 최적화 전용)입니다.

    .\Get-TLEPacFile.ps1 -Instance Worldwide -Type 2 -TenantName <contoso> -CdnEdgeNodesFilePath .\cdnedgenodes.json -FilePath TLE.pac
    
  5. TLE.pac 파일에는 모든 네임스페이스 및 IPv4/IPv6이 포함되어 있습니다.

Get-TLEPacFile.ps1
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

<#PSScriptInfo

.VERSION 1.0.4

.AUTHOR Microsoft Corporation

.GUID 7f692977-e76c-4582-97d5-9989850a2529

.COMPANYNAME Microsoft

.COPYRIGHT
Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License.

.TAGS PAC Microsoft Microsoft365 365

.LICENSEURI

.PROJECTURI http://aka.ms/ipurlws

.ICONURI

.EXTERNALMODULEDEPENDENCIES

.REQUIREDSCRIPTS

.EXTERNALSCRIPTDEPENDENCIES

.RELEASENOTES

#>

<#

.SYNOPSIS

Create a PAC file for Microsoft 365 prioritized connectivity

.DESCRIPTION

This script will access updated information to create a PAC file to prioritize Microsoft 365 Urls for
better access to the service. This script will allow you to create different types of files depending
on how traffic needs to be prioritized.

.PARAMETER Instance

The service instance inside Microsoft 365.

.PARAMETER ClientRequestId

The client request id to connect to the web service to query up to date Urls.

.PARAMETER DirectProxySettings

The direct proxy settings for priority traffic.

.PARAMETER DefaultProxySettings

The default proxy settings for non priority traffic.

.PARAMETER Type

The type of prioritization to give. Valid values are 1 and 2, which are 2 different modes of operation.
Type 1 will send Optimize traffic to the direct route. Type 2 will send Optimize and Allow traffic to
the direct route.

.PARAMETER Lowercase

Flag this to include lowercase transformation into the PAC file for the host name matching.

.PARAMETER TenantName

The tenant name to replace wildcard Urls in the webservice.

.PARAMETER ServiceAreas

The service areas to filter endpoints by in the webservice.

.PARAMETER FilePath

The file to print the content to.

.EXAMPLE

Get-TLEPacFile.ps1 -ClientRequestId b10c5ed1-bad1-445f-b386-b919946339a7 -DefaultProxySettings "PROXY 4.4.4.4:70" -FilePath type1.pac

.EXAMPLE

Get-TLEPacFile.ps1 -ClientRequestId b10c5ed1-bad1-445f-b386-b919946339a7 -Instance China -Type 2 -DefaultProxySettings "PROXY 4.4.4.4:70" -FilePath type2.pac

.EXAMPLE

Get-TLEPacFile.ps1 -ClientRequestId b10c5ed1-bad1-445f-b386-b919946339a7 -Instance WorldWide -Lowercase -TenantName tenantName -ServiceAreas Sharepoint

#>

#Requires -Version 2

[CmdletBinding(SupportsShouldProcess=$True)]
Param (
    [Parameter(Mandatory = $false)]
    [ValidateSet('Worldwide', 'Germany', 'China', 'USGovDoD', 'USGovGCCHigh')]
    [String] $Instance = "Worldwide",

    [Parameter(Mandatory = $false)]
    [ValidateNotNullOrEmpty()]
    [guid] $ClientRequestId = [Guid]::NewGuid().Guid,

    [Parameter(Mandatory = $false)]
    [ValidateNotNullOrEmpty()]
    [String] $DirectProxySettings = 'DIRECT',

    [Parameter(Mandatory = $false)]
    [ValidateNotNullOrEmpty()]
    [String] $DefaultProxySettings = 'PROXY 10.10.10.10:8080',

    [Parameter(Mandatory = $false)]
    [ValidateRange(1, 2)]
    [int] $Type = 1,

    [Parameter(Mandatory = $false)]
    [switch] $Lowercase = $false,

    [Parameter(Mandatory = $false)]
    [ValidateNotNullOrEmpty()]
    [string] $TenantName,

    [Parameter(Mandatory = $false)]
    [ValidateSet('Exchange', 'SharePoint', 'Common', 'Skype')]
    [string[]] $ServiceAreas,

    [Parameter(Mandatory = $false)]
    [ValidateNotNullOrEmpty()]
    [string] $FilePath,

    [Parameter(Mandatory = $false)]
    [ValidateNotNullOrEmpty()]
    [string] $CdnEdgeNodesFilePath
)

##################################################################################################################
### Global constants
##################################################################################################################

$baseServiceUrl = "https://endpoints.office.com/endpoints/$Instance/?ClientRequestId={$ClientRequestId}"
$directProxyVarName = "direct"
$defaultProxyVarName = "proxyServer"
$bl = "`r`n"

##################################################################################################################
### Functions to create PAC files
##################################################################################################################

function Get-PacClauses
{
    param(
        [Parameter(Mandatory = $false)]
        [string[]] $Urls,

        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [String] $ReturnVarName
    )

    if (!$Urls)
    {
        return ""
    }

    $clauses =  (($Urls | ForEach-Object { "shExpMatch(host, `"$_`")" }) -Join "$bl        || ")

@"
    if($clauses)
    {
        return $ReturnVarName;
    }
"@
}

function Get-PacString
{
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [array[]] $MapVarUrls
    )

@"
// This PAC file will provide proxy config to Microsoft 365 services
//  using data from the public web service for all endpoints
function FindProxyForURL(url, host)
{
    var $directProxyVarName = "$DirectProxySettings";
    var $defaultProxyVarName = "$DefaultProxySettings";

$( if ($Lowercase) { "    host = host.toLowerCase();" })

$( ($MapVarUrls | ForEach-Object { Get-PACClauses -ReturnVarName $_.Item1 -Urls $_.Item2 }) -Join "$bl$bl" )

$( if (!$ServiceAreas -or $ServiceAreas.Contains('Skype')) { Get-TLEPacConfiguration })

    return $defaultProxyVarName;
}
"@ -replace "($bl){3,}","$bl$bl" # Collapse more than one blank line in the PAC file so it looks better.
}

##################################################################################################################
### Functions to get and filter endpoints
##################################################################################################################

function Get-TLEPacConfiguration {
    param ()
    $PreBlock = @"
    // Don't Proxy Teams Live Events traffic

    if(shExpMatch(host, "*.azureedge.net")
    || shExpMatch(host, "*.bmc.cdn.office.net")
    || shExpMatch(host, "*.media.azure.net"))
    {
        var resolved_ip = dnsResolveEx(host);

"@
    $TLESb = New-Object 'System.Text.StringBuilder'
    $TLESb.Append($PreBlock) | Out-Null

    if (![string]::IsNullOrEmpty($CdnEdgeNodesFilePath) -and (Test-Path -Path $CdnEdgeNodesFilePath)) {
        $CdnData = Get-Content -Path $CdnEdgeNodesFilePath -Raw -ErrorAction SilentlyContinue | ConvertFrom-Json | Select-Object -ExpandProperty value | 
            Where-Object { $_.name -eq 'Premium_Verizon'} | Select-Object -First 1 -ExpandProperty properties | 
            Select-Object -ExpandProperty ipAddressGroups
        $CdnData | Select-Object -ExpandProperty ipv4Addresses | ForEach-Object {
            if ($TLESb.Length -eq $PreBlock.Length) {
                $TLESb.Append("        if(") | Out-Null
            }
            else {
                $TLESb.AppendLine() | Out-Null
                $TLESb.Append("        || ") | Out-Null
            }
            $TLESb.Append("isInNetEx(resolved_ip, `"$($_.BaseIpAddress)/$($_.prefixLength)`")") | Out-Null
        }
        $CdnData | Select-Object -ExpandProperty ipv6Addresses | ForEach-Object {
            if ($TLESb.Length -eq $PreBlock.Length) {
                $TLESb.Append("        if(") | Out-Null
            }
            else {
                $TLESb.AppendLine() | Out-Null
                $TLESb.Append("        || ") | Out-Null
            }
            $TLESb.Append("isInNetEx(resolved_ip, `"$($_.BaseIpAddress)/$($_.prefixLength)`")") | Out-Null
        }
    }
    $AzureIPsUrl = Invoke-WebRequest -Uri "https://www.microsoft.com/en-us/download/confirmation.aspx?id=56519" -UseBasicParsing -ErrorAction SilentlyContinue  | 
            Select-Object -ExpandProperty Links | Select-Object -ExpandProperty href | 
            Where-Object { $_.EndsWith('.json') -and $_ -match 'ServiceTags' } | Select-Object -First 1
    if ($AzureIPsUrl) {
        Invoke-RestMethod -Uri $AzureIPsUrl -ErrorAction SilentlyContinue | Select-Object -ExpandProperty values | 
            Where-Object { $_.name -eq 'AzureFrontDoor.Frontend' } | Select-Object -First 1 -ExpandProperty properties |
            Select-Object -ExpandProperty addressPrefixes | ForEach-Object {
                if ($TLESb.Length -eq $PreBlock.Length) {
                    $TLESb.Append("        if(") | Out-Null
                }
                else {
                    $TLESb.AppendLine() | Out-Null
                    $TLESb.Append("        || ") | Out-Null
                }
                $TLESb.Append("isInNetEx(resolved_ip, `"$_`")") | Out-Null
            }
    }
    if ($TLESb.Length -gt $PreBlock.Length) {
        $TLESb.AppendLine(")") | Out-Null
        $TLESb.AppendLine("        {") | Out-Null
        $TLESb.AppendLine("            return $directProxyVarName;") | Out-Null
        $TLESb.AppendLine("        }") | Out-Null
    }
    else {
        $TLESb.AppendLine("        // no addresses found for service via script") | Out-Null
    }
    $TLESb.AppendLine("    }") | Out-Null
    return $TLESb.ToString()
}

function Get-Regex
{
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string] $Fqdn
    )

    return "^" + $Fqdn.Replace(".", "\.").Replace("*", ".*").Replace("?", ".?") + "$"
}

function Match-RegexList
{
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string] $ToMatch,

        [Parameter(Mandatory = $false)]
        [string[]] $MatchList
    )

    if (!$MatchList)
    {
        return $false
    }
    foreach ($regex in $MatchList)
    {
        if ($regex -ne $ToMatch -and $ToMatch -match (Get-Regex $regex))
        {
            return $true
        }
    }
    return $false
}

function Get-Endpoints
{
    $url = $baseServiceUrl
    if ($TenantName)
    {
        $url += "&TenantName=$TenantName"
    }
    if ($ServiceAreas)
    {
        $url += "&ServiceAreas=" + ($ServiceAreas -Join ",")
    }
    return Invoke-RestMethod -Uri $url
}

function Get-Urls
{
    param(
        [Parameter(Mandatory = $false)]
        [psobject[]] $Endpoints
    )

    if ($Endpoints)
    {
        return $Endpoints | Where-Object { $_.urls } | ForEach-Object { $_.urls } | Sort-Object -Unique
    }
    return @()
}

function Get-UrlVarTuple
{
    param(
        [Parameter(Mandatory = $true)]
        [ValidateNotNullOrEmpty()]
        [string] $VarName,

        [Parameter(Mandatory = $false)]
        [string[]] $Urls
    )
    return New-Object 'Tuple[string,string[]]'($VarName, $Urls)
}

function Get-MapVarUrls
{
    Write-Verbose "Retrieving all endpoints for instance $Instance from web service."
    $Endpoints = Get-Endpoints

    if ($Type -eq 1)
    {
        $directUrls = Get-Urls ($Endpoints | Where-Object { $_.category -eq "Optimize" })
        $nonDirectPriorityUrls = Get-Urls ($Endpoints | Where-Object { $_.category -ne "Optimize" }) | Where-Object { Match-RegexList $_ $directUrls }
        return @(
            Get-UrlVarTuple -VarName $defaultProxyVarName -Urls $nonDirectPriorityUrls
            Get-UrlVarTuple -VarName $directProxyVarName -Urls $directUrls
        )
    }
    elseif ($Type -eq 2)
    {
        $directUrls = Get-Urls ($Endpoints | Where-Object { $_.category -in @("Optimize", "Allow")})
        $nonDirectPriorityUrls = Get-Urls ($Endpoints | Where-Object { $_.category -notin @("Optimize", "Allow") }) | Where-Object { Match-RegexList $_ $directUrls }
        return @(
            Get-UrlVarTuple -VarName $defaultProxyVarName -Urls $nonDirectPriorityUrls
            Get-UrlVarTuple -VarName $directProxyVarName -Urls $directUrls
        )
    }
}

##################################################################################################################
### Main script
##################################################################################################################

$content = Get-PacString (Get-MapVarUrls)

if ($FilePath)
{
    $content | Out-File -FilePath $FilePath -Encoding ascii
}
else
{
    $content
}

스크립트는 AzureFrontDoor.Frontend 의 다운로드 URL 및 키를 기반으로 Azure 목록을 자동으로 구문 분석하기 때문에 수동으로 얻을 필요가 없습니다.

다시 말하면 FQDNS만 사용하여 VPN 오프로드를 수행하지 않는 것이 좋습니다. 함수 에서 FQDNS와 IP 주소를 모두 활용하면 이 오프로드를 라이브 이벤트/스트림을 비롯한 제한된 끝점 집합으로의 사용 범위를 지정하는 데 도움이 됩니다. 함수가 구조화되는 방식에 따라 클라이언트에서 나열한 FQDN과 직접 일치하는 FQDN에 대한 DNS 쿼리가 수행됩니다. 즉, 나머지 네임스페이스의 DNS 확인은 변경되지 않습니다.

라이브 이벤트 및 Stream * 과 관련되지 않은 끝점을 오프로드할 위험을 제한하려면 모든 Azure CDN 고객에게 사용되는 공유 도메인이기 때문에 이러한 위험의 대부분이 있는 구성에서 .azureedge.net 도메인을 제거할 수 있습니다. 이 경우의 단점은 외부 인코더를 사용하는 모든 이벤트는 최적화되지 않지만 이벤트가 외부 인코더 내에서 생성/Teams 것입니다.

3. 직접 시작을 사용하도록 VPN의 라우팅 구성

마지막 단계는 VPN 구성에 CDN 끝점의 현재 목록 수집에 설명된 Live 이벤트 IP에 대한 직접 경로를 추가하여 트래픽이 VPN으로 강제 터널을 통해 전송되지 않도록 하는 것입니다. Microsoft 365 최적화 끝점에 대해 이 작업을 하는 방법에 대한 자세한 내용은 2013에 대한 VPN 분할 터널링 구현의 VPN 분할 터널링 구현 섹션에서 Microsoft 365. 이 프로세스는 이 문서에 나열된 Stream/Live 이벤트 IPS와 정확히 동일합니다.

현재 FQDNS 목록 수집의 FQDNS가 아닌 CDN VPN 구성에 사용해야 합니다.

FAQ

이 경우 모든 트래픽이 서비스로 직접 전송하나요?

아니요. 이렇게 하면 Live 이벤트 또는 Stream 비디오에 대한 대기 시간에 민감한 스트리밍 트래픽이 직접 전송되고, 게시된 IP로 확인되지 않으면 다른 트래픽은 VPN 터널을 계속 사용하게 됩니다.

IPv6 주소를 사용해야 하나요?

아니요. 연결은 필요한 경우 IPv4일 수 있습니다.

이러한 IP가 MICROSOFT 365 IP 서비스에 게시되지 않는 이유는 무엇입니까?

Microsoft는 고객이 정보를 안정적으로 사용하여 끝점 범주에 따라 안전하고 최적의 라우팅을 구현할 수 있도록 서비스에 있는 정보의 형식과 유형에 대한 엄격한 제어를 제공합니다.

기본 점 범주에는 다양한 이유로 제공된 IP 정보가 없습니다(기본 끝점은 Microsoft의 제어 외부에 있을 수 있습니다. 너무 자주 변경되거나 다른 요소와 공유되는 블록에 있을 수 있습니다). 이러한 이유로 기본 끝점은 FQDN을 통해 일반 웹 트래픽과 같은 검사 프록시로 전송하도록 디자인됩니다.

이 경우 위의 끝점은 Live 이벤트 또는 Stream이 아닌 Microsoft가 제어하지 않는 요소에서 사용할 수 있는 CDNS이기 때문에 트래픽 다이렉트 전송도 이러한 IP로 확인되는 다른 모든 것이 클라이언트에서 직접 전송됩니다. 현재 글로벌 위기의 고유한 특성과 고객의 단기 요구 사항을 충족하기 위해 Microsoft는 고객이 적합한 것으로 보게 될 때 사용할 수 있는 위의 정보를 제공했습니다.

Microsoft는 향후 허용/최적화 끝점 범주에 포함될 수 있도록 라이브 이벤트 끝점을 다시 구성하기 위해 작업 중입니다.

이러한 IP에 대한 액세스만 허용해야 하나요?

아니요. URL/IP 서비스의 필수 표시된 모든 끝점에 액세스하려면 서비스가 작동해야 합니다. 또한 Stream(ID 41-45)으로 표시된 선택적 끝점이 필요합니다.

이 조언이 다루는 시나리오는 무엇입니까?

  1. 앱 내에서 생성되는 라이브 Teams
  2. Stream 호스트된 콘텐츠 보기
  3. 외부 장치(인코더) 생성 이벤트

발표자 트래픽에 대한 조언이 있나요?

위의 조언은 서비스를 사용하는 사람들을 위한 것이 아닙니다. 발표자는 Teams 내에서 발표자 트래픽이 URL/IP 서비스 행 11에 나열된 최적화 표시된 UDP 끝점으로 흐르며, 발표자에 대한 VPN 분할 터널링 구현의 VPN 분할 터널링 구현 섹션에 설명된 자세한 VPN 오프로드 조언이 Microsoft 365.

라이브 이벤트 스트림이 다른 & 구성 위험 트래픽이 직접 전송하나요?

예, 서비스의 일부 요소에 사용되는 공유 FQDNS로 인해 이는 불가피합니다. 이 트래픽은 일반적으로 검사를 적용할 수 있는 회사 프록시를 통해 전송됩니다. VPN 분할 터널 시나리오에서 FQDNS와 IP를 모두 사용하면 이 위험의 범위를 최소로 벗어날 수 있지만 여전히 존재합니다. 고객은 오프로드 구성에서 .azureedge.net 도메인을 제거하고 이 위험을 최소한으로 줄일 수 있지만 이 경우 Stream에서 지원되는 라이브 이벤트(Teams 예약, 외부 인코더 이벤트, Teams에서 생성되는 Yammer 이벤트, Yammer 예약된 외부 인코더 이벤트 및 Stream에서 예약된 이벤트 또는 Stream에서 주문형 보기)의 오프로드가 제거됩니다.* 이벤트가 예약되어 Teams 영향을 받지 않습니다.

개요: 서버의 VPN 분할 Microsoft 365

가상화용 VPN 분할 터널링 Microsoft 365

사용자에 대한 일반적인 VPN 분할 Microsoft 365

VPN 분할 터널링을 위한 Teams 미디어 트래픽 보호

Microsoft 365 사용자에 대한 성능 최적화

Microsoft 365 네트워크 연결 원칙

Microsoft 365 네트워크 연결 평가

Microsoft 365 및 성능 조정

보안 전문가와 IT가 오늘날의 고유한 원격 작업 시나리오에서 최신 보안 제어를 달성할 수 있는 다른 방법(Microsoft 보안팀 블로그)

Microsoft에서 VPN 성능 향상: Windows 10 VPN 프로필을 사용하여 자동 연결 허용

VPN에서 실행: Microsoft가 원격 인력을 연결 상태로 유지하는 방법

Microsoft 전역 네트워크