[[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 まっちゃだいふく(書きかけの項目)