プロキシ自動設定ファイルのTIP
Index > 運用管理のお部屋 > 運用管理のお話? > プロキシ自動設定ファイルのTIP
プロキシ自動設定ファイルのTIP
PACファイルでは、上からスクリプトを実行し、"return"があった時点で終了する。
端末上では、PACファイルをキャッシュしInternetExplorerを再起動時に再度PACファイルを取得する(Proxyを使わずに取得する)
ここで、PACファイルにおいてDNS参照を必要とするコマンドを実行した場合
端末から、URLへの問い合わせが複数回発生する。(ただしWindows2000以降は端末にDNSキャッシュを持つ為殆ど影響はない)
この影響で、DNSサーバーのスペックにより外部Web閲覧が遅延することがある。
よって、DNS参照しないshExpMatch等を駆使してPACを作成する事をお勧めする。
- よく使われるコマンド
| コマンド | 概要 | DNS参照するか |
|---|---|---|
| isPlainHostName | 単一ホスト名(intra)でのリクエストの場合マッチする | × |
| isInNet | DNS正引きをしてサブネット内か確認する | ○ |
| shExpMatch | 文字列比較をして、合致しているか確認する | × |
| dnsResolve | IPアドレスへ変換する | ○ |
| isResolvable | 名前解決ができるか確認する | ○ |
| myIpAddress() | 自ホストのIPアドレスを取得する | × |
プロキシ自動設定ファイルのサンプル
汎用的なPACファイルのサンプル
function FindProxyForURL(url,host) {
var proxy = "PROXY proxy1.example.co.jp:8080; PROXY proxy2.example.co.jp:8080";
/* Private Address */
function isPrivate(host) {
return shExpMatch(host, "172.16.*")
|| shExpMatch(host, "172.17.*")
|| shExpMatch(host, "172.18.*")
|| shExpMatch(host, "172.19.*")
|| shExpMatch(host, "172.2?.*")
|| shExpMatch(host, "172.30.*")
|| shExpMatch(host, "172.31.*")
|| shExpMatch(host, "10.*")
|| shExpMatch(host, "192.168.*")
|| shExpMatch(host, "127.0.0.*");
/* Intranet */
if (isPlainHostName(host)
|| isPrivate(host)
|| shExpMatch(host,"*.example.co.jp"){
return "DIRECT";
else
/* The Internet */
return proxy;
}
}
端末IPアドレスに従ってPACの設定を変えるサンプル
function FindProxyForURL(url,host) {
var proxy = "PROXY proxy1.example.co.jp:8080; PROXY proxy2.example.co.jp:8080";
var proxy2 = "PROXY proxy3.example.co.jp:8080; PROXY proxy4.example.co.jp:8080";
var myip = myIpAddress();
/* Private Address */
function isPrivate(host) {
return shExpMatch(host, "172.16.*")
|| shExpMatch(host, "172.17.*")
|| shExpMatch(host, "172.18.*")
|| shExpMatch(host, "172.19.*")
|| shExpMatch(host, "172.2?.*")
|| shExpMatch(host, "172.30.*")
|| shExpMatch(host, "172.31.*")
|| shExpMatch(host, "10.*")
|| shExpMatch(host, "192.168.*")
|| shExpMatch(host, "127.0.0.*");
/* Intranet */
if (isPlainHostName(host)
|| isPrivate(host){
return "DIRECT";
else
if (shExpMatch(myip,"192.168.*") {
return proxy;
else
return proxy2;
}
}
}
注意点
- return DIRECTを記述すると、Direct接続先はイントラネットとなります。
イントラネット・ゾーンとして扱われる原因は? ある種の自動構成スクリプトを使うと(正確には「return "DIRECT"」を実行すると)、 本来「インターネット ゾーン」となるべきサイトが「イントラネット ゾーン」となってしまうのは、 IEの仕様なのだろうか、それとも何か重大なセキュリティ上の脆弱性なのだろうか、気になるところである。 そこでこの件をMicrosoft Security Response Center(Microsoft社の総合的なセキュリティ担当部署)に 問い合わせてみたところ、これは“仕様”であるとの回答を得た。
参考資料
書いた人
2006/07/01 まっちゃだいふく(書きかけの項目)
最終更新時間:2008年10月22日 18時32分17秒