Office365用のPacファイルを作成する

インターネットへの接続でProxyを利用しているイントラネット環境においてMicrosoft/Office365の利用が増えてきた場合に考える必要が出てくるのがProxyの分散だろう。(ExpressRoute経由でMicrosoft Peeringを使用している場合はその必要はないだろうが)

Microsoft 公式ドキュメント


PowerShellでO365用Pacのひな形が作成できるようなのでやってみる。

①新規にGuidを生成

PS C:\> New-Guid

Guid
----
6ea6e89f-b85e-4076-8319-e6cd6d17a747

PS C:\>

②Pacファイル生成

-TenantNameには自組織のテナント名称を指定、-ClientRequestIdには①で生成したGuid、-TenantNameには自組織のテナント名、-DefaultProxySettingsにはProxyサーバを指定。

PS C:> Get-PacFile.ps1 -ClientRequestId af4a1b07-c765-4aa2-b8fa-b9ffbf3b6d1d  -TenantName mytenantName -Instance WorldWide -Type 2 -DefaultProxySettings "PROXY 192.168.100.20:3128"

③生成されたPacのひな形

コマンド実行の出力は以下のとおり。(ファイルにリダイレクトしておけば良い)

そのまま使用することはできないが、ゼロから作成するよりはましだろうと思う。

// 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 direct = "DIRECT";
    var proxyServer = "PROXY 192.168.100.20:3128";

    if(shExpMatch(host, "cdn.odc.officeapps.live.com")
        || shExpMatch(host, "excelcs.officeapps.live.com")
        || shExpMatch(host, "mrodevicemgr.officeapps.live.com")
        || shExpMatch(host, "ocsa.officeapps.live.com")
        || shExpMatch(host, "ocsredir.officeapps.live.com")
        || shExpMatch(host, "ocws.officeapps.live.com")
        || shExpMatch(host, "odc.officeapps.live.com")
        || shExpMatch(host, "odcsm.officeapps.live.com")
        || shExpMatch(host, "ols.officeapps.live.com")
        || shExpMatch(host, "pptcs.officeapps.live.com")
        || shExpMatch(host, "roaming.officeapps.live.com")
        || shExpMatch(host, "statics.teams.microsoft.com")
        || shExpMatch(host, "uci.officeapps.live.com")
        || shExpMatch(host, "wordcs.officeapps.live.com"))
    {
        return proxyServer;
    }

    if(shExpMatch(host, "*.broadcast.skype.com")
        || shExpMatch(host, "*.lync.com")
        || shExpMatch(host, "*.mail.protection.outlook.com")
        || shExpMatch(host, "*.manage.office.com")
        || shExpMatch(host, "*.msftidentity.com")
        || shExpMatch(host, "*.msidentity.com")
        || shExpMatch(host, "*.officeapps.live.com")
        || shExpMatch(host, "*.online.office.com")
        || shExpMatch(host, "*.outlook.office.com")
        || shExpMatch(host, "*.portal.cloudappsecurity.com")
        || shExpMatch(host, "*.protection.office.com")
        || shExpMatch(host, "*.protection.outlook.com")
        || shExpMatch(host, "*.skypeforbusiness.com")
        || shExpMatch(host, "*.teams.microsoft.com")
        || shExpMatch(host, "account.activedirectory.windowsazure.com")
        || shExpMatch(host, "account.office.net")
        || shExpMatch(host, "accounts.accesscontrol.windows.net")
        || shExpMatch(host, "admin.microsoft.com")
        || shExpMatch(host, "adminwebservice.microsoftonline.com")
        || shExpMatch(host, "api.passwordreset.microsoftonline.com")
        || shExpMatch(host, "autologon.microsoftazuread-sso.com")
        || shExpMatch(host, "becws.microsoftonline.com")
        || shExpMatch(host, "broadcast.skype.com")
        || shExpMatch(host, "clientconfig.microsoftonline-p.net")
        || shExpMatch(host, "companymanager.microsoftonline.com")
        || shExpMatch(host, "device.login.microsoftonline.com")
        || shExpMatch(host, "graph.microsoft.com")
        || shExpMatch(host, "graph.windows.net")
        || shExpMatch(host, "home.office.com")
        || shExpMatch(host, "login.microsoft.com")
        || shExpMatch(host, "login.microsoftonline.com")
        || shExpMatch(host, "login.microsoftonline-p.com")
        || shExpMatch(host, "login.windows.net")
        || shExpMatch(host, "logincert.microsoftonline.com")
        || shExpMatch(host, "loginex.microsoftonline.com")
        || shExpMatch(host, "login-us.microsoftonline.com")
        || shExpMatch(host, "manage.office.com")
        || shExpMatch(host, "mytenantName.sharepoint.com")
        || shExpMatch(host, "mytenantName-my.sharepoint.com")
        || shExpMatch(host, "nexus.microsoftonline-p.com")
        || shExpMatch(host, "nexus.officeapps.live.com")
        || shExpMatch(host, "nexusrules.officeapps.live.com")
        || shExpMatch(host, "office.live.com")
        || shExpMatch(host, "outlook.office.com")
        || shExpMatch(host, "outlook.office365.com")
        || shExpMatch(host, "passwordreset.microsoftonline.com")
        || shExpMatch(host, "portal.microsoftonline.com")
        || shExpMatch(host, "portal.office.com")
        || shExpMatch(host, "protection.office.com")
        || shExpMatch(host, "provisioningapi.microsoftonline.com")
        || shExpMatch(host, "smtp.office365.com")
        || shExpMatch(host, "teams.microsoft.com")
        || shExpMatch(host, "www.office.com"))
    {
        return direct;
    }

    return proxyServer;
}

以上。