PAC ファイルについて

Last Update: feedback 共有

これまで Japan IE Support Team Blog にて公開していた記事のうち、プロキシ関連の記事を整理しました。
長い記事になってしまうため、下記の 4 つの記事に分けています。

ローカル エリア ネットワーク (LAN) の設定について
IE からみるプロキシの設定について
(今回の記事) PAC について
WPAD について


PAC ファイルを利用する場合、[インターネット オプション] – [接続] タブ – [LAN の設定] から以下のダイアログを開き、赤枠で囲った設定を有効とします。

なお、[アドレス] の項目には、PAC ファイルへの URL を記載する必要があります。ここが、WPAD とは異なる点です。WPAD を利用する場合は、URL の指定などは必要ありません。一方、PAC ファイルを利用する場合は、端末を利用するユーザーごとに PAC ファイルへの URL を明示的に設定する必要があります。
LANSettings


1. 自動構成スクリプト (PAC) ファイルの書き方について

PAC ファイルでは、「アクセス先の URL などの情報を元に、利用するプロキシ サーバーを指定する」ための処理条件をスクリプトで記載します。スクリプトの処理内では、URL のホスト名や IP アドレスなどの条件に合ったプロキシ サーバーの宛先 (URL、もしくは IP アドレス) とポート番号を返します。

PAC ファイルを記載する場合は、必ず FindProxyForURL 関数を記載する必要があります。PAC ファイルの処理時には、この FindProxyForURL の関数が実行されます。

FindProxyForURL 関数の第一引数である url はアクセス先の URL、第二引数である host はアクセス先の URL から取得したホスト名を表します。例えば、http://www.bing.com/ という URL にアクセスする際には、url が http://www.bing.com/ 、host が www.bing.com となります。これらの値を様々な関数を用い条件分けし、最終的に経由するサーバーを返す (return) するような処理を作成します。以下に PAC ファイルの具体例を挙げて、ご説明します。

PAC ファイルの具体例

1
2
3
4
5
6
7
8
9
10
11
12
13
function FindProxyForURL (url, host) {
if (isPlainHostName (host)) {
return "DIRECT";
} else {
if (shExpMatch(url, "http://www.bing.com/")) {
return "PROXY www.bing-proxy.com:6060";
} else if (shExpMatch(url, "http://www.microsoft.com/")) {
return "PROXY www.microsoft-proxy.com:7070";
} else {
return "PROXY www.other-proxy.com:8080";
}
}
}

上記の PAC ファイルには、isPlainHostName 関数と shExpMatch 関数が記載されています。isPlainHostName 関数は host に “.” (ピリオド) が含まれていなければ true、含まれていれば false を返す関数です。shExpMatch 関数は、文字列の部分比較を行う関数であり、第一引数で与えられた文字列が、シェル表現パターンを使用した第二引数で与えられた文字列にマッチする場合は true、マッチしない場合は false を返します。

上記の PAC ファイルを使用して http://www.bing.com/ にアクセスした場合の戻り値は www.bing-proxy.coom というプロキシ サーバーに 6060 番ポート、http://www.google.com/ にアクセスした場合の戻り値は www.other-proxy.com というプロキシ サーバーに 8080 番ポートでアクセスします。IE では、この戻り値の結果に応じ、対象となるプロキシ サーバーへの接続を試み、接続が確立できる場合にはプロキシ サーバー経由で HTTP の通信が行われます。

なお、host にピリオドが含まれていない場合は、isPlainHostName が true になり、”return DIRECT” が戻り値となります。IE では “return DIRECT” が戻り値として返された場合は、プロキシ サーバーを経由せずに直接接続する動作となります。

PAC ファイルで使用できる関数は こちらの弊社公開情報に記載されています ので、ご参考いただけますと幸いです。


2. PAC ファイルの配置方法について

上記の方法で作成した PAC ファイルは、Web サーバーへ配置することで利用することができます。PAC ファイルへの URL を、[インターネット オプション] の [自動構成スクリプトを使用する] の項目に記載します。

なお、PAC ファイルを配置した Web サーバーには、.pac の拡張子に対する MIME タイプを併せて設定する必要があります。

 拡張子:.pac
 MIME の種類:application/x-ns-proxy-autoconfig
 ※ 適切な指定を行っていない場合には、適切に PAC ファイルを解析し、条件判断をすることができなくなりますので、ご注意ください。

PAC ファイルは、通常の Web サイトと同様に HTTP 通信の GET リクエストで取得します。そのため、HTML コンテンツと同様にクライアントにキャッシュされますので、通信時に毎回取得する動作にはなりません。なお、Web のキャッシュと同じフォルダに保存されますので、IE のキャッシュを消去することで、PAC ファイルのキャッシュも消去されます。


3. PAC ファイルに関するよくあるお問い合わせ

ここでは、PAC ファイルに関連してよくお問い合わせいただく事例を紹介します。

3-1. PAC ファイルを使用した場合に Web サイトへのアクセスに時間がかかる場合がある

PAC ファイルを利用する場合に、Web ページへのアクセスに時間がかかるというお問い合わせをいただきます。この事象は、PAC ファイル内で URL を解析する処理を行っている際に発生する DNS の名前解決に失敗し、発生している可能性があります。

PAC ファイル内で以下の関数を利用する際には、DNS への名前解決が発生します。
・isResolvable
・isInNet
・dnsResolve

DNS サーバーへ問題なくアクセスができ、かつ名前解決にも成功する場合は、基本的に Web ページへのアクセスに時間がかかることはありません。しかし、DNS サーバーへのアクセスに失敗した場合や、アクセスは成功しても名前解決に失敗する場合は、その過程で時間がかかってしまうため、Web ページへのアクセスに時間がかかってしまいます。

そのため、PAC ファイル内で上記の関数を利用している環境で Web ページへのアクセスに時間がかかる場合は、DNS サーバーへの通信が正常に行えているかをご確認いただくのが有効です。

3-2. “ローカル イントラネット” ゾーンの Web サイトが “インターネット” ゾーンと判断される場合がある

PAC ファイルの解析結果は、セキュリティ ゾーンの自動判定にも使用されます。具体的には、PAC ファイルで “return DIRECT” が戻り値となる URL、つまり直接接続を行う Web サイトは “ローカル イントラネット” ゾーンとして表示されます。しかし、直接接続を行っているにもかかわらず、Web サイトが “インターネット” ゾーンとして表示されてしまうというお問い合わせをいただきます。この事象は、セキュリティ ゾーンの判定処理と PAC ファイルを取得/解析する処理が完了するタイミングによって発生します。

この事象は、[インターネット オプション] の [セキュリティ] タブから、Web サイトを明示的に “ローカル イントラネット” ゾーンに登録することで回避されます。明示的なゾーン登録を行うことで、PAC ファイルを使用したセキュリティ ゾーンの自動判定処理が行われず、Web サイトは必ず “ローカル イントラネット” ゾーンとして判定されます。

上記の事象については以下のサポート技術文書にも記載されておりますので、ご参考ください。

 FQDN または IP アドレスを使用すると、イントラネット サイトがインターネット サイトとして識別される
 https://support.microsoft.com/ja-jp/help/303650/

PAC ファイルをうまく活用することでネットワーク管理も容易になりますので、ぜひご利用ください!

なお、本ブログは弊社の公式見解ではなく、予告なく変更される場合があります。
もし公式な見解が必要な場合は、弊社ドキュメント (https://docs.microsoft.com/ や https://support.microsoft.com) をご参照いただく、もしくは私共サポートまでお問い合わせください。