- PR -

プロキシの自動構成スクリプトで端末IPで使用するプロキシを変更したい

1
投稿者投稿内容
shinobu
常連さん
会議室デビュー日: 2004/12/08
投稿数: 22
投稿日時: 2007-05-22 10:47
こんにちは。
4拠点にそれぞれProxyはsquid(2.6)を設置、現在グループポリシで拠点別に設定を配布しています。

最近、拠点間を移動しながら使用する端末が増えてきました。
当初はIPアドレスの切替ツールなどでカバーしていますが、ユーザーによって失敗するケースが増えてきたためこの機会に自動構成スクリプトで設定を配布しようと考えました。

それぞれの拠点でDHCPサーバが稼働しており、IPアドレスの自動配布は可能な状態にあります。

拠点A 192.168.1.0/24 Proxyserver1 192.168.1.10 8080
拠点B 192.168.2.0/24 Proxyserver2 192.168.2.10 8080
拠点C 192.168.3.0/24 Proxyserver3 192.168.3.10 8080
拠点D 192.168.4.0/24 Proxyserver4 192.168.4.10 8080

尚、書式の配布は固定IPを必須とする端末があるためDHCPでの配布ではなく今後もグループポリシを使い、同じ自動構成ファイルを4拠点で配布する予定です。

実現したいこと:拠点Aの端末及び、拠点AのIPアドレスを取得した端末はProxyserver1を使用、拠点Bの端末及び、拠点BのIPアドレスを取得した端末はProxyserver2を使用、拠点Cの端末及び、拠点CのIPアドレスを取得した端末はProxyserver3を使用、拠点Dの端末及び、拠点DのIPアドレスを取得した端末はProxyserver4を使用、するようにする自動構成スクリプトを作成したい。

サンプル等ご紹介頂ければ幸いです。
よろしくお願いいたします。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2007-05-22 11:31
引用:

実現したいこと:拠点Aの端末及び、拠点AのIPアドレスを取得した端末はProxyserver1を使用、拠点Bの端末及び、拠点BのIPアドレスを取得した端末はProxyserver2を使用、拠点Cの端末及び、拠点CのIPアドレスを取得した端末はProxyserver3を使用、拠点Dの端末及び、拠点DのIPアドレスを取得した端末はProxyserver4を使用、するようにする自動構成スクリプトを作成したい。


isInNet で切り替える形ですかね。

コード:
if (isInNet(host, "192.168.1.0","255.255.255.0" )){
return "Proxyserver1:8080;";


みたいな感じですかね。

グループポリシーが使える環境なら、サブネットごとに
ActiveDirectoryのサイトを定義して、
自動構成スクリプトなり、参照するProxyサーバ指定などを
グループポリシーで直接制御することも可能ですね。
_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
shinobu
常連さん
会議室デビュー日: 2004/12/08
投稿数: 22
投稿日時: 2007-05-22 12:06
Mattunさん

ありがとうございます。
現在はサブネットごとに直接グループポリシで指定する使い方をしてるんですが、サブネットと拠点ごとのサブネットの区切りが同一なので、サブネットをまたいで端末を移動させると元のサブネットのプロキシを参照しに行ってしまい使えない・・・という問題がでてました。

とりあえず以下のような感じでファイルを試してみたいと思いますが・・・。
(書式が試行錯誤で正しくないかもしれませんが・・・)

コード
コード:
function FindProxyForURL(url,host) {
var proxyserver1 = "192.168.1.10:8080";
var proxyserver2 = "192.168.2.10:8080";
var proxyserver3 = "192.168.3.10:8080";
var proxyserver4 = "192.168.4.10:8080";
if (isInNet(host, "192.168.1.0", "255.0.0.0")) return "DIRECT";
if (isInNet(host, "192.168.2.0", "255.0.0.0")) return "DIRECT";
if (isInNet(host, "192.168.3.0", "255.0.0.0")) return "DIRECT";
if (isInNet(host, "192.168.4.0", "255.0.0.0")) return "DIRECT";

if (isInNet(host, "192.168.1.0","255.255.255.0" )){
return "Proxyserver1:8080;";
if (isInNet(host, "192.168.2.0","255.255.255.0" )){
return "Proxyserver2:8080;";
if (isInNet(host, "192.168.3.0","255.255.255.0" )){
return "Proxyserver3:8080;";
if (isInNet(host, "192.168.4.0","255.255.255.0" )){
return "Proxyserver4:8080;";
   }
  }
 }
}

Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2007-05-22 12:27
すみません、なんか大幅に言葉足らずだ。

接続先ホストのアドレスを条件にする: isInNet(host,<Network>,<NetMask>)
接続元ホストのアドレスを条件にする: isInNet(myAddress(),<Network>,<NetMask>)

とかですね。isInNetとあわせてmyAddress()を使う必要があります。

↓こんな感じ?
コード:
 
function FindProxyForURL(url,host) {
var proxyserver1 = "192.168.1.10:8080";
var proxyserver2 = "192.168.2.10:8080";
var proxyserver3 = "192.168.3.10:8080";
var proxyserver4 = "192.168.4.10:8080";
if (isInNet(host, "192.168.1.0", "255.255.255.0")) return "DIRECT";
if (isInNet(host, "192.168.2.0", "255.255.255.0")) return "DIRECT";
if (isInNet(host, "192.168.3.0", "255.255.255.0")) return "DIRECT";
if (isInNet(host, "192.168.4.0", "255.255.255.0")) return "DIRECT";

if (isInNet(myAddress(), "192.168.1.0","255.255.255.0" )){
return "Proxyserver1:8080;";
if (isInNet(myAddress(), "192.168.2.0","255.255.255.0" )){
return "Proxyserver2:8080;";
if (isInNet(myAddress(), "192.168.3.0","255.255.255.0" )){
return "Proxyserver3:8080;";
if (isInNet(myAddress(), "192.168.4.0","255.255.255.0" )){
return "Proxyserver4:8080;";
   }
  }
 }
}

 



_________________
Mattun
Microsoft MVP for Directory Services
(Oct 2006-Sep 2007)
shinobu
常連さん
会議室デビュー日: 2004/12/08
投稿数: 22
投稿日時: 2007-05-22 12:48
ありがとうございます。
しかし・・・つまってしまいました。

たぶん書式そのものがおかしいのではないかと思うんですが、うまく動作してくれません・・・・。
なにがいけないのか・・・。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2007-05-22 13:05
ああ、俺もざっくりしか見てないので・・・
2つ目以降のif は、 else if ですね。
あとどこだろ。

とりあえず、最小限のスクリプトを配置して、
少しずつ動作確認してみてください。
shinobu
常連さん
会議室デビュー日: 2004/12/08
投稿数: 22
投稿日時: 2007-05-22 18:52
以下の様にしたらどのLAN上でも動作するようになりましたが、なぜかWebサイトへのアクセスが異常に遅く全く速度がでません・・・。


コード:


// A-LAN : 192.168.1.0/24
// B-LAN : 192.168.2.0/24
// C-LAN : 192.168.3.0/24
// D-LAN : 192.168.4.0/24
//各拠点にプロキシ近くのプロキシに自動で接続。
//社内のWebサーバへのアクセスにはプロキシを経由しないようにする。
//
function FindProxyForURL(url, host) {
MyDomain = ".hogehoge.jp";
MyIP = myIpAddress();
NetworkID = 0 ; // Default = 0(A), 1(B), 2(C), 3(D)

ProxyA="PROXY 192.168.1.10:8080" ;
ProxyB="PROXY 192.168.2.10:8080" ;
ProxyC="PROXY 192.168.3.10:8080" ;
ProxyD="PROXY 192.168.4.10:8080" ;

// 社内のWebサーバのアクセスかどうか
if (isInNet(host, "192.168.1.0", "255.255.255.0")) {return "DIRECT" ;}
if (isInNet(host, "192.168.2.0", "255.255.255.0")) {return "DIRECT" ;}
if (isInNet(host, "192.168.3.0", "255.255.255.0")) {return "DIRECT" ;}
if (isInNet(host, "192.168.4.0", "255.255.255.0")) {return "DIRECT" ;}
// どのサブネットか。
if (isInNet(MyIP, "192.168.1.0", "255.255.255.0")) NetworkID = 0 ;
if (isInNet(MyIP, "192.168.2.0", "255.255.255.0")) NetworkID = 1 ;
if (isInNet(MyIP, "192.168.3.0", "255.255.255.0")) NetworkID = 2 ;
if (isInNet(MyIP, "192.168.4.0", "255.255.255.0")) NetworkID = 3 ;
//サブネット別のプロキシの指定
switch ( NetworkID ) {
case 0: // LAN A
return ProxyA ;
break;
case 1: // LAN B
return ProxyB ;
break;
case 2: // LAN C
return ProxyC ;
break;
   case 3: // LAN D
return ProxyD ;
break;
}
}



[ メッセージ編集済み 編集者: shinobu 編集日時 2007-05-22 18:52 ]

[ メッセージ編集済み 編集者: shinobu 編集日時 2007-05-22 18:56 ]
1

スキルアップ/キャリアアップ(JOB@IT)