プロキシ自動設定ファイルの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秒