Поделиться через


Особые рекомендации по событиям Stream и Teams в средах VPN

Примечание.

Эта статья является частью набора статей, которые рассматривают оптимизацию Microsoft 365 для удаленных пользователей.

Трафик участников трансляций Microsoft 365 (сюда входят участники трансляций, созданных Teams, и те, которые создаются с помощью внешнего кодировщика через Teams, Stream или Viva Engage), трафик участников в ратушах Microsoft Teams и трафик участников по запросу Stream в настоящее время классифицируется как по умолчанию или optimize в списке URL-адресов или IP-адресов для службы. Эти конечные точки классифицируются как по умолчанию , так как они размещаются в сетях CDN, которые также могут использоваться другими службами. Клиенты обычно предпочитают использовать прокси-сервер этого типа трафика и применять все элементы безопасности, обычно выполняющиеся на таких конечных точках.

Многие клиенты запрашивают данные URL-адреса или IP-адреса, необходимые для подключения участников к событиям Stream или Teams непосредственно из локального подключения к Интернету, а не для маршрутизации трафика с высоким объемом и с учетом задержки через инфраструктуру VPN. Как правило, это невозможно без выделенных пространств имен и точных IP-данных для конечных точек, которые не предоставляются для конечных точек Microsoft 365, классифицированных по умолчанию.

Выполните следующие действия, чтобы включить прямое подключение к службам событий Stream или Teams от клиентов, использующих принудительное vpn-подключение туннеля. Это решение предназначено для того, чтобы предоставить клиентам возможность избежать маршрутизации трафика участников событий через VPN при наличии большого сетевого трафика из-за сценариев работы из дома. По возможности рекомендуется получить доступ к службе через проверяющий прокси-сервер.

Примечание.

С помощью этого решения могут быть элементы службы, которые не разрешаются в предоставленные IP-адреса и, таким образом, проходят через VPN, но основная часть большого объема трафика, такого как потоковая передача данных, должна выполняться. Могут существовать другие элементы за пределами область трансляции или потока, которые попадают в эту разгрузку, но их следует ограничить, так как они должны соответствовать как полному доменному имени, так и совпадению IP-адресов, прежде чем переходить напрямую.

Важно!

Мы рекомендуем взвесить риск отправки большего объема трафика, который обходит VPN за счет повышения производительности для трансляций.

Чтобы реализовать исключение принудительного туннеля для событий Teams и Stream, необходимо выполнить следующие действия:

1. Настройка внешнего разрешения DNS

Клиентам требуется внешнее рекурсивное разрешение DNS, чтобы следующие имена узлов можно было разрешать в IP-адреса.

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

*.azureedge.net используется для событий Stream (настройка кодировщиков для потоковой трансляции в Microsoft Stream — Microsoft Stream | Документация Майкрософт).

*.media.azure.net и *.bmc.cdn.office.net используются для трансляций, создаваемых Teams (события быстрого запуска и RTMP-In поддерживаемые события), запланированные из клиента Teams.

*.media.azure.net, *.bmc.cdn.office.net и *.ml.cdn.office.net используются для мероприятий в ратуше Teams.

Некоторые из этих конечных точек совместно используются другими элементами за пределами событий Stream или Teams. Мы не рекомендуем использовать эти полные доменные имена для настройки разгрузки VPN, даже если это технически возможно в решении VPN (например, если оно работает по полному доменному имени, а не по IP-адресу).

Полные доменные имена не требуются в конфигурации VPN, они используются исключительно в PAC-файлах в сочетании с IP-адресами для отправки соответствующего трафика напрямую.

2. Реализация изменений PAC-файла (при необходимости)

Для организаций, использующих PAC-файл для маршрутизации трафика через прокси-сервер в vpn- режиме, обычно это достигается с помощью полных доменных имен. Однако при использовании Stream/Live Events/Town hall предоставленные имена узлов содержат подстановочные знаки, такие как *.azureedge.net, которые также включают в себя другие элементы, для которых невозможно предоставить полные списки IP-адресов. Таким образом, если запрос отправляется напрямую на основе только совпадения с подстановочными знаками DNS, трафик к этим конечным точкам будет заблокирован, так как маршрут через прямой путь для него не указан на шаге 3 далее в этой статье.

Чтобы решить эту проблему, мы можем предоставить следующие IP-адреса и использовать их в сочетании с именами узлов в примере PAC-файла, как описано в шаге 1. PAC-файл проверяет, соответствует ли URL-адрес тем, которые используются для Stream/Live Events/Town hall, а затем, если он это делает, он также проверяет, соответствует ли IP-адрес, возвращенный из поиска DNS, тем, которые предоставляются для службы. Если оба совпадают, трафик направляется напрямую. Если ни один из элементов (FQDN/IP) не совпадает, трафик отправляется на прокси-сервер. В результате конфигурация гарантирует, что все, что разрешается в IP-адрес за пределами область ip-адреса и определенных пространств имен, как обычно, проходит через прокси-сервер через VPN.

Сбор текущих списков конечных точек CDN

События Teams используют несколько поставщиков CDN для потоковой передачи клиентам, чтобы обеспечить наилучший охват, качество и устойчивость. В настоящее время используются как Azure CDN от Майкрософт, так и от Verizon. Со временем это может быть изменено из-за таких ситуаций, как региональная доступность. Эта статья — источник, позволяющий поддерживать актуальность диапазонов IP-адресов.

Для Azure CDN от Корпорации Майкрософт список можно скачать из статьи Скачивание диапазонов IP-адресов и тегов служб Azure — общедоступное облако из официального центра загрузки Майкрософт . Вам потребуется специально найти тег службы AzureFrontdoor.Frontend в ФОРМАТЕ JSON. addressPrefixes будут отображать подсети IPv4/IPv6. Со временем IP-адреса могут изменяться, но список тегов службы всегда обновляется, прежде чем они будут использоваться.

Для Azure CDN от Verizon (Edgecast) вы можете найти исчерпывающий список с помощью пограничных узлов — Список (выберите Попробовать ). Вам потребуется специально найти раздел Premium_Verizon . Обратите внимание, что этот API отображает все IP-адреса Edgecast (источник и Anycast). В настоящее время для API не существует механизма для различения источника и Anycast.

Чтобы реализовать это в PAC-файле, можно использовать следующий пример, в котором трафик Microsoft 365 Optimize отправляется напрямую (рекомендуется) через полное доменное имя, а критический трафик потоковых и трансляций напрямую — через сочетание полного доменного имени и возвращаемого IP-адреса. Имя заполнителя Contoso потребуется изменить на имя конкретного клиента, где contoso находится из contoso.onmicrosoft.com

Пример PAC-файла

Ниже приведен пример создания PAC-файлов.

  1. Сохраните приведенный ниже сценарий на локальный жесткий диск как Get-TLEPacFile.ps1.

  2. Перейдите по URL-адресу Verizon и скачайте полученный код JSON (скопируйте его в файл, например cdnedgenodes.json).

  3. Поместите файл в ту же папку, что и скрипт.

  4. В окне PowerShell выполните следующую команду. Измените имя клиента на другое, если вам нужны URL-адреса SPO. Это тип 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
}

Скрипт автоматически анализирует список Azure на основе URL-адреса для скачивания и ключей azureFrontDoor.Frontend, поэтому получать его вручную не нужно.

Опять же, мы не рекомендуем выполнять разгрузку VPN с использованием только полных доменных имен; использование полных доменных имен и IP-адресов в функции помогает область использование этой разгрузки в ограниченном наборе конечных точек, включая динамические события или поток. Способ структурирования функции приведет к тому, что поиск DNS выполняется для полного доменного имени, соответствующего тем, которые перечислены клиентом напрямую, т. е. разрешение DNS для остальных пространств имен остается неизменным.

Если вы хотите ограничить риск разгрузки конечных точек, не связанных с событиями Teams и Stream, можно удалить домен *.azureedge.net из конфигурации, где находится большая часть этого риска, так как это общий домен, используемый для всех клиентов Azure CDN. Недостатком этого является то, что любое событие, использующее внешний кодировщик на платформе Stream, не будет оптимизировано, но события, созданные или организованные в Teams, будут выполняться.

3. Настройка маршрутизации в VPN для включения прямого исходящего трафика

Последним шагом является добавление прямого маршрута для IP-адресов событий Teams, описанных в статье Сбор текущих списков конечных точек CDN в конфигурацию VPN, чтобы трафик не отправлялся через принудительный туннель в VPN. Подробные сведения о том, как это сделать для конечных точек оптимизации Microsoft 365, см. в разделе Реализация раздельного туннелирования VPNстатьи Реализация раздельного туннелирования VPN для Microsoft 365. Процесс точно такой же для IP-адресов событий Stream или Teams, перечисленных в этом документе.

Обратите внимание, что для настройки VPN следует использовать только IP-адреса (не полные доменные имена) из сбора текущих списков конечных точек CDN .

Вопросы и ответы

Будет ли это отправлять весь мой трафик в службу напрямую?

Нет, это приведет к отправке трафика потоковой передачи с учетом задержки для события Teams или потокового видео напрямую, а любой другой трафик будет продолжать использовать VPN-туннель, если он не разрешается в опубликованные IP-адреса.

Нужно ли использовать IPv6-адреса?

Нет, подключение может быть IPv4 только при необходимости.

Почему эти IP-адреса не опубликованы в службе MICROSOFT 365 URL/IP?

Корпорация Майкрософт строго контролирует формат и тип информации, которая находится в службе, чтобы клиенты могли надежно использовать эту информацию для реализации безопасной и оптимальной маршрутизации на основе категории конечной точки.

Категория "Конечная точка по умолчанию" не содержит сведений об IP-адресе по нескольким причинам (конечные точки по умолчанию могут находиться вне контроля корпорации Майкрософт, изменяться слишком часто или находиться в блоках, совместно используемых другими элементами). По этой причине конечные точки по умолчанию предназначены для отправки через полное доменное имя проверяющего прокси-сервера, как обычный веб-трафик.

В этом случае указанные выше конечные точки — это сети CDN, которые могут использоваться сторонними управляемыми элементами, кроме трансляций или потоковой трансляции. Таким образом, отправка трафика напрямую также будет означать, что все остальные, которые разрешаются на эти IP-адреса, также будут отправляться напрямую от клиента. В связи с уникальным характером текущего глобального кризиса и для удовлетворения краткосрочных потребностей наших клиентов корпорация Майкрософт предоставила приведенные выше сведения для использования клиентами по мере необходимости.

Корпорация Майкрософт работает над тем, чтобы перенастроить конечные точки событий Teams, чтобы в будущем их можно было включить в категории конечных точек разрешить и оптимизировать.

Нужно ли разрешать доступ только к этим IP-адресам?

Нет, доступ ко всем обязательным помеченным конечным точкам в службе URL-адреса или IP-адреса необходим для работы службы. Кроме того, требуется любая необязательная конечная точка, помеченная для Stream (идентификатор 41–45).

Какие сценарии будет охватывать этот совет?

  1. Трансляции, созданные в приложении Teams
  2. Просмотр содержимого, размещенного в Потоке
  3. События, созданные внешним устройством (кодировщиком)
  4. Ратуша Teams

Охватывает ли этот совет трафик докладчика?

Это не так; приведенный выше совет предназначен исключительно для тех, кто использует службу. При отображении из Teams трафик докладчика передается к помеченным конечным точкам UDP оптимизации, перечисленным в строке 11 URL-адреса или IP-службы, с подробными рекомендациями по разгрузке VPN, описанными в разделе Реализация разделенного туннелирования VPNв разделе Реализация разделенного туннелирования VPN для Microsoft 365.

Рискует ли эта конфигурация напрямую отправлять трафик, отличный от ратуши, трансляций & Stream?

Да, из-за общих полных доменных имен, используемых для некоторых элементов службы, это неизбежно. Этот трафик обычно отправляется через корпоративный прокси-сервер, который может применять проверку. В сценарии разбиения VPN-туннеля использование полных доменных имен и IP-адресов область этот риск с минимальным, но он все равно будет существовать. Клиенты могут удалить домен *.azureedge.net из конфигурации разгрузки и снизить этот риск до минимального уровня, но это приведет к удалению разгрузки поддерживаемых потоковыми трансляциями (запланированные события Teams, события кодировщика Stream, события Viva Engage, созданные в Teams, события кодировщика Stream Viva Engage и запланированные события Stream или просмотр по запросу из Stream). События, запланированные и созданные в Teams (включая ратушу), не затрагиваются.

Обзор: раздельное туннелирование VPN для Microsoft 365

Реализация разделенного туннелирования VPN для Microsoft 365

Распространенные сценарии раздельного туннелирования VPN для Microsoft 365

Защита медиатрафика Teams в раздельном VPN-туннелировании

Оптимизация производительности Microsoft 365 для пользователей из Китая

Принципы сетевого подключения к Microsoft 365

Оценка сетевого подключения Microsoft 365

Настройка сети и производительности Microsoft 365

Альтернативные пути для специалистов по безопасности и ИТ для достижения современных мер безопасности в современных уникальных сценариях удаленной работы (блог Microsoft Security Team)

Улучшение производительности VPN в Майкрософт: использование VPN-профилей Windows 10 для разрешения автоматических подключений

Запуск по VPN: как Microsoft поддерживает подключение своих удаленных сотрудников

Глобальная сеть Майкрософт