トップ 一覧 Farm 検索 ヘルプ RSS ログイン

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

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
[[Index|Administration TIPS]] > [[運用管理のお部屋]] > [[運用管理のお話]] > プロキシ自動設定ファイルの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社の総合的なセキュリティ担当部署)に
 問い合わせてみたところ、これは“仕様”であるとの回答を得た。
*[@IT:検証:IEの自動Proxy設定とセキュリティ・ゾーン 2.イントラネット・ゾーン|http://www.atmarkit.co.jp/fwin2k/experiments/ieproxy/ieproxy_02.html]より

!!!参考資料
*[Proxy Client Autoconfig File Format(NetScape)|http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html]
*[@IT:検証:IEの自動Proxy設定とセキュリティ・ゾーン 2.イントラネット・ゾーン|http://www.atmarkit.co.jp/fwin2k/experiments/ieproxy/ieproxy_02.html]

!!!書いた人

2006/07/01 まっちゃだいふく(書きかけの項目)
2008/05/30 たーきょん更新