Särskilda överväganden för Stream- och Teams-händelser i VPN-miljöer

Obs!

Den här artikeln är en del av en uppsättning artiklar som behandlar Microsoft 365-optimering för fjärranvändare.

Microsoft 365 Live Events-deltagartrafik (detta inkluderar deltagare till Teams-producerade livehändelser och de som produceras med en extern kodare via Teams, Stream eller Viva Engage), Microsoft Teams Rådhus-deltagartrafik och Stream-deltagartrafik på begäran kategoriseras för närvarande som Standard kontra Optimera i URL/IP-listan för tjänsten. Dessa slutpunkter kategoriseras som Standard eftersom de finns på CDN:er som också kan användas av andra tjänster. Kunder föredrar vanligtvis att använda den här typen av trafik via proxy och tillämpa alla säkerhetselement som normalt utförs på slutpunkter som dessa.

Många kunder har bett om URL/IP-data som behövs för att ansluta sina deltagare till Stream- eller Teams-händelser direkt från den lokala Internetanslutningen, i stället för att dirigera trafik med hög volym och svarstid via VPN-infrastrukturen. Detta är vanligtvis inte möjligt utan både dedikerade namnområden och korrekt IP-information för slutpunkterna, som inte tillhandahålls för Microsoft 365-slutpunkter kategoriserade som Standard.

Använd följande steg för att aktivera direktanslutning för Stream- eller Teams-händelsetjänsterna från klienter med hjälp av en tvingad tunnel-VPN. Den här lösningen är avsedd att ge kunderna ett alternativ för att undvika routning av händelsedeltagares trafik via VPN medan det finns hög nätverkstrafik på grund av scenarier från arbetet. Om möjligt rekommenderar vi åtkomst till tjänsten via en granskningsproxy.

Obs!

Med hjälp av den här lösningen kan det finnas tjänstelement som inte matchar de IP-adresser som tillhandahålls och därmed passerar VPN,men den största delen av högvolymtrafiken som strömmande data bör göra. Det kan finnas andra element utanför omfånget livehändelser/stream som fångas av den här avlastningen, men dessa bör begränsas eftersom de måste uppfylla både FQDN och IP-matchningen innan de går direkt.

Viktigt

Vi rekommenderar att du väger risken för att skicka mer trafik som kringgår VPN över prestandavinsten för livehändelser.

Om du vill implementera undantaget för tvingad tunnel för Teams-händelser och Stream ska följande steg tillämpas:

1. Konfigurera extern DNS-matchning

Klienter behöver extern, rekursiv DNS-matchning för att vara tillgängliga så att följande värdnamn kan matchas till IP-adresser.

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

*.azureedge.net används för Stream-händelser (Konfigurera kodare för liveuppspelning i Microsoft Stream – Microsoft Stream | Microsoft Docs).

*.media.azure.net och *.bmc.cdn.office.net används för Teams-producerade livehändelser (snabbstartshändelser och RTMP-In händelser som stöds) som schemaläggs från Teams-klienten.

*.media.azure.net, *.bmc.cdn.office.net och *.ml.cdn.office.net används för Teams rådhusevenemang.

Vissa av dessa slutpunkter delas med andra element utanför Stream- eller Teams-händelser. Vi rekommenderar inte att du bara använder dessa FQDN för att konfigurera VPN-avlastning även om det är tekniskt möjligt i DIN VPN-lösning (till exempel om det fungerar på FQDN i stället för IP).

FQDN krävs inte i VPN-konfigurationen, de används enbart i PAC-filer i kombination med IP-adresser för att skicka relevant trafikdirigering.

2. Implementera PAC-filändringar (om det behövs)

För organisationer som använder en PAC-fil för att dirigera trafik via en proxy under VPN uppnås detta normalt med FQDN. Men med Stream/Live Events/Rådhuset innehåller värdnamnen jokertecken som *.azureedge.net, som även omfattar andra element som det inte går att tillhandahålla fullständiga IP-listor för. Om begäran skickas direkt baserat på enbart DNS-jokertecken kommer trafik till dessa slutpunkter att blockeras eftersom det inte finns någon väg via direktsökvägen för den i steg 3 senare i den här artikeln.

För att lösa detta kan vi tillhandahålla följande IP-adresser och använda dem i kombination med värdnamnen i en PAC-exempelfil enligt beskrivningen i steg 1. PAC-filen kontrollerar om URL:en matchar de som används för Stream/Live Events/Rådhuset och om den gör det kontrollerar den även om IP-adressen som returneras från en DNS-sökning matchar de som tillhandahålls för tjänsten. Om båda matchar dirigeras trafiken direkt. Om något av elementen (FQDN/IP) inte matchar skickas trafiken till proxyn. Därför säkerställer konfigurationen att allt som matchar en IP-adress utanför omfånget för både IP-adressen och definierade namnområden passerar proxyn via VPN som vanligt.

Samla in de aktuella listorna över CDN-slutpunkter

Teams-händelser använder flera CDN-leverantörer för att strömma till kunder för att tillhandahålla bästa täckning, kvalitet och återhämtning. För närvarande används både Azure CDN från Microsoft och verizon. Med tiden kan detta ändras på grund av situationer som regional tillgänglighet. Den här artikeln är en källa som gör att du kan hålla dig uppdaterad om IP-intervall.

För Azure CDN från Microsoft kan du ladda ned listan från Download Azure IP Ranges and Service Tags – Public Cloud from Official Microsoft Download Center – du måste leta specifikt efter tjänsttaggen AzureFrontdoor.Frontend i JSON; addressPrefixes visar IPv4/IPv6-undernäten. Med tiden kan IP-adresserna ändras, men listan över tjänsttaggar uppdateras alltid innan de används.

För Azure CDN från Verizon (Edgecast) hittar du en fullständig lista med edge-noder – lista (välj Prova ) – du måste leta specifikt efter avsnittet Premium_Verizon . Observera att det här API:et visar alla Edgecast-IP-adresser (ursprung och Anycast). För närvarande finns det ingen mekanism för API:et att skilja mellan ursprung och Anycast.

För att implementera detta i en PAC-fil kan du använda följande exempel som skickar Microsoft 365 Optimize-trafikdirigering (vilket rekommenderas bästa praxis) via FQDN och den kritiska Stream/Live Events-trafiken direkt via en kombination av FQDN och den returnerade IP-adressen. Platshållarnamnet Contoso måste redigeras till din specifika klientorganisations namn där contoso kommer från contoso.onmicrosoft.com

Exempel på PAC-fil

Här är ett exempel på hur du genererar PAC-filerna:

  1. Spara skriptet nedan på din lokala hårddisk somGet-TLEPacFile.ps1.

  2. Gå till Verizon-URL:en och ladda ned den resulterande JSON-filen (kopiera klistra in den i en fil som cdnedgenodes.json)

  3. Placera filen i samma mapp som skriptet.

  4. Kör följande kommando i ett PowerShell-fönster. Ändra klientorganisationens namn för något annat om du vill ha url:erna för SPO. Det här är typ 2, så Optimera och Tillåt (typ 1 är endast Optimera).

    .\Get-TLEPacFile.ps1 -Instance Worldwide -Type 2 -TenantName <contoso> -CdnEdgeNodesFilePath .\cdnedgenodes.json -FilePath TLE.pac
    
  5. Filen TLE.pac innehåller alla namnområden och IP-adresser (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
}

Skriptet parsar automatiskt Azure-listan baserat på nedladdnings-URL:en och nycklarna från AzureFrontDoor.Frontend, så det behöver du inte hämta manuellt.

Återigen rekommenderar vi inte att du utför VPN-avlastning med bara FQDN; Användning av både FQDN och IP-adresserna i funktionen hjälper till att begränsa användningen av den här avlastningen till en begränsad uppsättning slutpunkter, inklusive Live Events/Stream. Funktionens struktur resulterar i att en DNS-sökning görs för det fullständiga domännamnet som matchar dem som anges direkt av klienten, dvs. DNS-matchningen för de återstående namnrymderna förblir oförändrad.

Om du vill begränsa risken för avlastning av slutpunkter som inte är relaterade till Teams-händelser och Stream kan du ta bort domänen *.azureedge.net från konfigurationen där den största risken finns eftersom det här är en delad domän som används för alla Azure CDN-kunder. Nackdelen med detta är att alla händelser som använder en extern kodare som drivs av Stream inte optimeras, men händelser som produceras/organiseras i Teams kommer att vara det.

3. Konfigurera routning på VPN för att aktivera direkt utgående trafik

Det sista steget är att lägga till en direktväg för Teams-händelse-IP-adresser som beskrivs i Samla in de aktuella listorna över CDN-slutpunkter i VPN-konfigurationen för att säkerställa att trafiken inte skickas via den framtvingade tunneln till VPN. Detaljerad information om hur du gör detta för Microsoft 365 Optimize-slutpunkter finns i avsnittet Implementera DELADE VPN-tunnlar i Implementera DELADE VPN-tunnlar för Microsoft 365. Processen är exakt densamma för Stream- eller Teams-händelse-IP-adresser som anges i det här dokumentet.

Observera att endast IP-adresser (inte FQDN) från Insamling av aktuella listor över CDN-slutpunkter ska användas för VPN-konfiguration.

Vanliga frågor och svar

Kommer detta att skicka all min trafik till tjänsten direkt?

Nej, detta skickar svarstidskänslig direktuppspelningstrafik för en Teams-händelse eller Stream-videodirigering. All annan trafik fortsätter att använda VPN-tunneln om de inte matchar de PUBLICERADE IP-adresserna.

Behöver jag använda IPv6-adresserna?

Nej, anslutningen kan bara vara IPv4 om det behövs.

Varför publiceras inte dessa IP-adresser i Microsoft 365 URL/IP-tjänsten?

Microsoft har strikta kontroller kring formatet och typen av information som finns i tjänsten för att säkerställa att kunderna på ett tillförlitligt sätt kan använda informationen för att implementera säker och optimal routning baserat på slutpunktskategori.

Kategorin Standardslutpunkt har ingen IP-information av flera skäl (standardslutpunkter kan vara utanför Microsofts kontroll, kan ändras för ofta eller finnas i block som delas med andra element). Därför är standardslutpunkter utformade för att skickas via FQDN till en granskningsproxy, till exempel normal webbtrafik.

I det här fallet är ovanstående slutpunkter CDN:er som kan användas av andra element som inte är Microsoft-kontrollerade element än Live Events eller Stream, och att skicka trafikdirigering innebär därför också att allt annat som matchar dessa IP-adresser också skickas direkt från klienten. På grund av den aktuella globala krisens unika karaktär och för att uppfylla våra kunders kortsiktiga behov har Microsoft tillhandahållit informationen ovan för kunder att använda som de vill.

Microsoft arbetar med att konfigurera om Teams-händelseslutpunkterna så att de kan ingå i slutpunktskategorierna Tillåt/Optimera i framtiden.

Behöver jag bara tillåta åtkomst till dessa IP-adresser?

Nej, åtkomst till alla obligatoriska markerade slutpunkter i URL/IP-tjänsten är viktigt för att tjänsten ska fungera. Dessutom krävs valfri slutpunkt markerad för Stream (ID 41–45).

Vilka scenarier kommer detta råd att omfatta?

  1. Livehändelser som skapats i Teams-appen
  2. Visa Stream-värdbaserat innehåll
  3. Händelser som skapats av extern enhet (kodare)
  4. Teams rådhus

Omfattar detta råd presentatörstrafik?

Det gör det inte. råden ovan är enbart för dem som konsumerar tjänsten. När du presenterar inifrån Teams kommer presentatörens trafik att flöda till avsnittet Optimera markerade UDP-slutpunkter som anges i URL/IP-tjänstrad 11 med detaljerade råd om VPN-avlastning som beskrivs i avsnittet Implementera DELADE VPN-tunnlar i Implementering av DELADE VPN-tunnlar för Microsoft 365.

Riskerar den här konfigurationen att annan trafik än rådhuset, livehändelser & Stream skickas direkt?

Ja, på grund av delade FQDN:er som används för vissa delar av tjänsten är detta oundvikligt. Den här trafiken skickas normalt via en företagsproxy som kan tillämpa inspektion. I ett scenario med vpn-delad tunnel kommer användningen av både FQDN och IP-adresser att begränsa den här risken till ett minimum, men den kommer fortfarande att finnas. Kunder kan ta bort domänen *.azureedge.net från avlastningskonfigurationen och minska den här risken till ett minimum, men detta tar bort avlastningen av Stream-stödda livehändelser (Teams-schemalagda, Stream-kodarhändelser, Viva Engage händelser som produceras i Teams, Viva Engage schemalagda Stream-kodarhändelser och Stream-schemalagda händelser eller visning på begäran från Stream). Evenemang som schemalagts och producerats i Teams (inklusive rådhuset) påverkas inte.

Översikt: DELADE VPN-tunnlar för Microsoft 365

Implementera DELADE VPN-tunnlar för Microsoft 365

Vanliga scenarier med delade VPN-tunnlar för Microsoft 365

Skydda Teams medietrafik för delade VPN-tunnlar

Microsoft 365-prestandaoptimering för kinesiska användare

Principer för nätverksanslutning i Microsoft 365

Utvärdera Microsoft 365 nätverksanslutningar

Nätverks- och prestandajustering för Microsoft 365

Alternativa sätt för säkerhetspersonal och IT att uppnå moderna säkerhetskontroller i dagens unika fjärrarbetsscenarier (Microsoft Security Team-bloggen)

Förbättra VPN-prestanda hos Microsoft: använda Windows 10 VPN-profiler för att tillåta automatiska anslutningar

Körs på VPN: Hur Microsoft håller sin fjärranslutna personal ansluten

Microsofts globala nätverk