VPN 환경의 Stream 및 Teams 이벤트에 대한 특별 고려 사항

참고

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

Microsoft 365 라이브 이벤트 참석자 트래픽(Teams에서 생성한 라이브 이벤트에 참석자 및 Teams, Stream 또는 Viva Engage 통해 외부 인코더로 생성된 참석자 포함), Microsoft Teams 타운 홀 참석자 트래픽 및 주문형 스트림 참석자 트래픽은 현재 서비스의 URL/IP 목록에서기본최적화로 분류됩니다. 이러한 엔드포인트는 다른 서비스에서도 사용할 수 있는 CDN에서 호스트되므로 기본값 으로 분류됩니다. 고객은 일반적으로 이러한 유형의 트래픽을 프록시하고 이와 같은 엔드포인트에서 일반적으로 수행되는 모든 보안 요소를 적용하는 것을 선호합니다.

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

다음 단계를 사용하여 강제 터널 VPN을 사용하여 클라이언트에서 Stream 또는 Teams 이벤트 서비스에 직접 연결할 수 있습니다. 이 솔루션은 회사 홈 시나리오로 인해 네트워크 트래픽이 많은 동안 VPN을 통해 이벤트 참석자 트래픽 라우팅을 방지하는 옵션을 고객에게 제공하기 위한 것입니다. 가능하면 검사 프록시를 통해 서비스에 액세스하는 것이 좋습니다.

참고

이 솔루션을 사용하면 제공된 IP 주소로 resolve 않아 VPN을 트래버스하는 서비스 요소가 있을 수 있지만 스트리밍 데이터와 같은 대량의 대용량 트래픽이 있어야 합니다. 라이브 이벤트/스트림의 scope 외부에 다른 요소가 있을 수 있지만 직접 진행하기 전에 FQDN IP 일치를 모두 충족해야 하므로 제한해야 합니다.

중요

라이브 이벤트의 성능 향상보다 VPN을 우회하는 더 많은 트래픽을 보낼 위험을 저울질하는 것이 좋습니다.

Teams 이벤트 및 스트림에 대한 강제 터널 예외를 구현하려면 다음 단계를 적용해야 합니다.

1. 외부 DNS 확인 구성

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

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

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

*.media.azure.net*.bmc.cdn.office.net Teams 클라이언트에서 예약된 Teams에서 만든 라이브 이벤트(빠른 시작 이벤트 및 RTMP-In 지원되는 이벤트)에 사용됩니다.

*.media.azure.net, *.bmc.cdn.office.net*.ml.cdn.office.net Teams 타운 홀 이벤트에 사용됩니다.

이러한 엔드포인트 중 일부는 Stream 또는 Teams 이벤트 외부의 다른 요소와 공유됩니다. VPN 솔루션에서 기술적으로 가능하더라도(예: IP가 아닌 FQDN에서 작동하는 경우) 이러한 FQDN을 사용하여 VPN 오프로드를 구성하는 것은 권장되지 않습니다.

FQDN은 VPN 구성에 필요하지 않으며, 관련 트래픽을 직접 보내기 위해 IP와 함께 PAC 파일에서 사용하기 위한 것입니다.

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

PAC 파일을 사용하여 VPN에 있는 동안 프록시를 통해 트래픽을 라우팅하는 조직의 경우 일반적으로 FQDN을 사용하여 수행됩니다. 그러나 Stream/Live 이벤트/타운 홀을 사용하면 제공된 호스트 이름에는 *.azureedge.net 같은 와일드카드가 포함되어 있으며, 여기에는 전체 IP 목록을 제공할 수 없는 다른 요소도 포함됩니다. 따라서 요청이 DNS 와일드카드 일치에 따라 직접 전송되는 경우 이 문서의 뒷부분에 있는 3단계 에서 직접 경로를 통해 경로가 없으므로 이러한 엔드포인트에 대한 트래픽이 차단됩니다.

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

CDN 엔드포인트의 현재 목록 수집

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

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

Verizon(Edgecast)의 Azure CDN의 경우 Edge 노드 - 목록 ( 사용해 보기 선택)을 사용하여 전체 목록을 찾을 수 있습니다. Premium_Verizon 섹션을 구체적으로 확인해야 합니다. 이 API는 모든 Edgecast IP(원본 및 Anycast)를 표시합니다. 현재 API가 원본과 Anycast를 구분하는 메커니즘은 없습니다.

PAC 파일에서 이를 구현하려면 FQDN을 통해 Microsoft 365 Optimize 트래픽 다이렉트(권장 모범 사례)와 FQDN과 반환된 IP 주소의 조합을 통해 직접 중요한 Stream/Live 이벤트 트래픽을 보내는 다음 예제를 사용할 수 있습니다. contoso가 있는 특정 테넌트의 이름으로 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 파일에는 모든 네임스페이스 및 IP(IPv4/IPv6)가 포함됩니다.

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

<#PSScriptInfo

.VERSION 1.0.5

.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, "*.ml.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 목록을 자동으로 구문 분석하므로 수동으로 가져올 필요가 없습니다.

다시 말하지만, FQDN만 사용하여 VPN 오프로드를 수행하지 않는 것이 좋습니다. 함수에서 FQDN과 IP 주소를 모두 활용하면 라이브 이벤트/스트림을 포함한 제한된 엔드포인트 집합에 이 오프로드를 사용하는 scope 도움이 됩니다. 함수를 구조화하면 클라이언트에서 직접 나열한 것과 일치하는 FQDN에 대한 DNS 조회가 수행됩니다. 즉, 나머지 네임스페이스의 DNS 확인은 변경되지 않은 상태로 유지됩니다.

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

3. 직접 송신을 사용하도록 VPN에서 라우팅 구성

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

현재 CDN 엔드포인트 목록 수집의 IP(FQDN 아님)만 VPN 구성에 사용해야 합니다.

FAQ

그러면 모든 트래픽이 서비스에 직접 전송될까요?

아니요, 그러면 Teams 이벤트 또는 스트림 비디오 다이렉트에 대한 대기 시간에 민감한 스트리밍 트래픽이 전송되고, 게시된 IP에 resolve 않는 경우 다른 트래픽은 VPN 터널을 계속 사용합니다.

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

아니요, 필요한 경우에만 IPv4로 연결할 수 있습니다.

이러한 IP가 Microsoft 365 URL/IP 서비스에 게시되지 않는 이유는 무엇인가요?

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

기본 엔드포인트 범주에는 여러 가지 이유로 제공되는 IP 정보가 없습니다(기본 엔드포인트가 Microsoft의 제어 범위를 벗어나거나, 너무 자주 변경되거나, 다른 요소와 공유되는 블록에 있을 수 있음). 이러한 이유로 기본 엔드포인트는 FQDN을 통해 일반 웹 트래픽과 같은 검사 프록시로 보내도록 설계되었습니다.

이 경우 위의 엔드포인트는 라이브 이벤트 또는 스트림 이외의 비 Microsoft 제어 요소에서 사용할 수 있는 CDN이므로 트래픽 직접 전송은 이러한 IP로 확인되는 다른 모든 항목도 클라이언트에서 직접 전송됨을 의미합니다. 현재 글로벌 위기의 고유한 특성과 고객의 단기 요구 사항을 충족하기 위해 Microsoft는 고객이 적합할 때 사용할 수 있도록 위의 정보를 제공했습니다.

Microsoft는 Teams 이벤트 엔드포인트를 나중에 허용/최적화 엔드포인트 범주에 포함할 수 있도록 다시 구성하기 위해 노력하고 있습니다.

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

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

이 조언은 어떤 시나리오를 다룰 것인가?

  1. Teams 앱 내에서 생성된 라이브 이벤트
  2. 스트림 호스팅 콘텐츠 보기
  3. 외부 디바이스(인코더) 생성 이벤트
  4. Teams 타운 홀

이 조언은 발표자 트래픽을 다루나요?

그렇지 않습니다. 위의 조언은 서비스를 사용하는 사용자만을 위한 것입니다. Teams 내에서 프레젠테이션하면 Microsoft 365VPN 분할 터널링 구현의 VPN 분할 터널링 구현 섹션에 설명된 자세한 VPN 오프로드 조언과 함께 URL/IP 서비스 행 11에 나열된 최적화 표시된 UDP 엔드포인트로 이동하는 발표자의 트래픽이 표시됩니다.

이 구성은 시청, 라이브 이벤트 & Stream 이외의 트래픽이 직접 전송될 위험이 있나요?

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

개요: Microsoft 365용 VPN 분할 터널링

Microsoft 365용 VPN 분할 터널링 구현

Microsoft 365에 대한 일반적인 VPN 분할 터널링 시나리오

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

중국 사용자를 위한 Microsoft 365 성능 최적화

Microsoft 365 네트워크 연결 원칙

Microsoft 365 네트워크 연결 평가

Microsoft 365 네트워크 및 성능 튜닝

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

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

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

Microsoft 글로벌 네트워크