PACファイル

読み:ぱっくふぁいる / 英語表記:Proxy Auto-Configuration file

Webブラウザなどが、宛先ごとの接続方法を自動で選ぶための設定ファイルである。JavaScriptの関数で、利用するプロキシサーバや、それを経由せず直接接続する場合を指定する。

イマシルちゃんの解説

インターネットのサイトには通信を中継するプロキシサーバを通したいけど、社内サイトまで同じ経路だと遠回りになることがあるよ。
PACファイルは、アクセス先に応じて接続方法を選ぶルールを書いた設定ファイルなんだ。
ブラウザは宛先のURLやホスト名をルールに照らし合わせ、使うプロキシサーバや経由の要否を決めるよ。
管理者が共通のファイルを配れば、端末ごとに宛先のルールを書き直さずに済むの。
利用者が毎回設定を切り替えなくても、会社で決めた接続方法を使い分けられるんだ。

より深い解説

接続方法を決める処理を端末へ配る

PACファイルは、アクセス先に応じたプロキシの選択規則をJavaScriptで記述する設定ファイルである。対応するブラウザやアプリケーションはファイルを読み込み、接続先のURLを調べる際にFindProxyForURLという関数を呼び出す。関数は利用するプロキシの候補や、プロキシを使わない接続方法を文字列で返す。

この関数に渡す引数は二つある。

引数渡される情報判断に使う例
urlアクセス先のURLURLの方式に応じて接続方法を選ぶ
hostURLから取り出したホスト名社内サイトか外部サイトかを判断する

HTTPSのURLでは、ブラウザがパスやクエリを除いて関数へ渡すことがある。URLの全文が必ず使えると考えず、利用するソフトウェアの仕様を確認する。

利点は、宛先ごとの接続規則を一つのファイルで管理し、複数の端末へ配れることである。 PACファイル自身が通信を中継するわけではない。返された設定に従い、ブラウザなどが実際の接続を行う。

宛先の判定と接続候補を記述する

独自の例として、intra.exampleとその配下のホストには直接接続し、それ以外には二つのプロキシを候補として返す。

function FindProxyForURL(url, host) {
  if (host === "intra.example" ||
      dnsDomainIs(host, ".intra.example")) {
    return "DIRECT";
  }
  return "PROXY proxy-a.example:8080; " +
         "PROXY proxy-b.example:8080";
}

dnsDomainIsは、ホスト名が指定したドメインに属するかを調べる補助関数である。この例ではドットで始まる.intra.exampleとの一致を調べるため、intra.exampleそのものは別の条件で比較している。

戻り値の意味は次のとおりである。ここで指定する8080は、プロキシ側で要求を待ち受けるポート番号の例であり、PACファイルが定める固定値ではない。

戻り値の要素接続方法
DIRECTプロキシを経由せず、宛先へ直接接続する
PROXY ホスト名:ポート番号指定したHTTPプロキシへ接続する
セミコロンで区切った複数候補左から順に候補を示し、利用できない場合の代替を用意する

例えばnews.exampleへの要求では、上の条件に一致しないため、proxy-aとproxy-bがこの順で候補になる。返すものは一つの接続先だけとは限らず、接続候補の優先順位を含む文字列である。

障害時に次の候補を試す

最初の候補が利用できないとき、次の候補へ切り替える動作をフォールバックという。上の設定を使い、候補の並べ替えが行われていない最初の試行は次のようになる。

  1. ブラウザがproxy-aへの接続を試みる。
  2. 接続に失敗し、切替えの対象となる障害と判断した場合はproxy-bを試す。
  3. proxy-bへの接続が成功すると、そのプロキシを通して要求を送る。

注意:フォールバックの対象となる失敗や再試行の時刻は、ブラウザやアプリケーションの実装に依存する。 例えばChromeでは、プロキシの名前解決やTCP接続の失敗などを対象とする。一方、接続先のWebサーバが返すHTTPエラーまで、すべて別プロキシへの切替えで解決するわけではない。利用不能と判断したプロキシを一時的に後回しにする実装もある。

候補の末尾へDIRECTを加えると、プロキシを使わず直接接続する方法も候補になる。業務上プロキシの認証やログ取得を必須とする場合は、この迂回を許すかを先に決める。端末からの直接接続をファイアウォールが遮断していれば、候補に加えるだけでは通信できない。

PACファイルの候補指定と、DNSラウンドロビンは働く場所が異なる。前者では対応するアプリケーションが接続候補を扱い、後者では名前解決の応答を利用して接続先を分散する。どちらも既存のTCP接続を別のサーバへそのまま移す仕組みではない。

ファイルの配布と自動検出を区別する

PACファイルを使うには、端末がファイルの場所を知り、取得できる必要がある。主な方法は次の三つである。

方法設定・動作
URLの指定ブラウザやOSの設定にPACファイルのURLを登録する
WPADDHCPやDNSを利用して、PACファイルの場所を自動検出する
管理ツールによる配布管理者がグループポリシーなどで利用設定をまとめて配る

WPADはWeb Proxy Auto-Discoveryの略であり、ファイルを見つけるための仕組みである。見つけたファイルの中で接続方法を決める処理と、接続失敗時のフォールバックは別の段階として考える。PACファイルのURLを明示すれば、WPADを使わずに自動設定を利用できる。

URLが分かった後は、端末が配布先へHTTPなどでアクセスしてファイルを取得する。DNSによる場所の発見、ファイルのダウンロード、その規則に従ったWebサイトへの接続は、それぞれ別の通信である。

配布サーバの可用性や、ファイルを更新した後の反映も確認する。取得したファイルをキャッシュして再利用する実装があり、配布元を変更しても、すべての端末が直ちに新しい規則を使うとは限らない。

利用するアプリケーションごとに確かめる

プロキシの自動設定を利用できるのは、その機能に対応するブラウザやアプリケーションである。OSに設定しただけで、サーバ上の処理やコマンドを含むすべての通信へ適用されるとは限らない。独自の設定を持つアプリケーションもあるため、実際に業務で使うソフトウェアごとに確認する。

確認では、社内宛てと外部宛ての選択、通常時とプロキシ停止時の動作、両方の候補が利用できない場合を分ける。PACファイルを取得できない場合の動作も、プロキシ自体が停止した場合とは分けて試す。

プロキシを経由する場合は、端末からプロキシの待受ポートへ届く必要がある。直接接続を選ぶ場合は、端末から宛先へ届く必要がある。選択規則に合わせてファイアウォールの許可条件を設計する。

参考資料

実際の試験ではここに出る!全3問

ネットワークスペシャリスト

午後Ⅰ
午後Ⅱ

この用語が出てくる記事

↑