トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

プロキシ自動設定ファイルのTIP

Index > 運用管理のお部屋 > 運用管理のお話? > プロキシ自動設定ファイルのTIP

プロキシ自動設定ファイルのTIP

PACファイルでは、上からスクリプトを実行し、"return"があった時点で終了する。
端末上では、PACファイルをキャッシュしInternetExplorerを再起動時に再度PACファイルを取得する(Proxyを使わずに取得する)

ここで、PACファイルにおいてDNS参照を必要とするコマンドを実行した場合
端末から、URLへの問い合わせが複数回発生する。(ただしWindows2000以降は端末にDNSキャッシュを持つ為殆ど影響はない)
この影響で、DNSサーバーのスペックにより外部Web閲覧が遅延することがある。
よって、DNS参照しないshExpMatch等を駆使してPACを作成する事をお勧めする。

  • よく使われるコマンド
コマンド概要DNS参照するか
isPlainHostName単一ホスト名(intra)でのリクエストの場合マッチする×
isInNetDNS正引きをしてサブネット内か確認する
shExpMatch文字列比較をして、合致しているか確認する×
dnsResolveIPアドレスへ変換する
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秒