- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
[[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 たーきょん更新