これはちょっとパート2 ここから です。
クライアントが私のネットワークにVPNで接続すると、IPアドレスが割り当てられ、DHCPから252オプションが提供されます。自動検出は、このファイルを取得します
基本的に必要なのは、proxy.pacがクライアントがVPN接続を使用しているかどうかを判断し、クライアントのDIRECTを解決できるようにする方法です。
したがって、単純なvar myIp = myipAddress()を実行し、これらの固定アドレスのリストから一致させると、解決されます。ただし、myIpAddress()関数は、ネットワークアダプターではなく、マシン(例:192.168.10.1)へのローカルIPを取得しているようです。私の場合、そのローカルアドレスは、一部のローカルVMに必要なMSループバックです。ループバックアダプタを無効にすると、正しいアドレスの解決が開始されます。これは理想的な回避策ではありません。
では、正しいアダプターから必要なIPアドレスを解決するにはどうすればよいですか?
前もって感謝します...
残念ながら、myIpAddress()がWindowsで正しいアドレスを返すようにするには、NICの優先度を変更する必要があります(WindowsではXP this [ネットワーク接続]ダイアログの[詳細]メニューの[詳細設定...]ダイアログにあります)。
これがあなたが見ているもののように見える他の誰かの問題です: http://www.geurtsrus.com/gerke/2005/01/proxy-auto-configuration-blues.html
プロキシを必要としないIPアドレス(つまり、会社のローカルサブネット)ではなく、プロキシを必要とするIPアドレスを検出し、それ以外の場合はDIRECTを想定する方がよい場合があります。
別の方法は、VPN上のクライアントに別のPACDHCPオプションを渡すことです。 VPNユーザーが専用サブネットから出ている場合は簡単かもしれませんが、LANサブネットから出ている場合はそうではないかもしれません。
Wpad.datをwpad.aspxにリダイレクトし、ASPでIPアドレスを見つけることができます。
<%
Dim strClientIP As String
strClientIP = Request.UserHostAddress()
%>
function FindProxyForURL(url, Host)
{
//proxy definition
var UseProxy = "PROXY x.x.x.x:8080"
if (isPlainHostName(Host)) {return "DIRECT"; }
if (isInNet("<%Response.Write(strClientIP)%>", "x.x.1.0", "255.255.255.0"))
return UseProxy;
else
return "DIRECT";
}
どのブラウザを使用していますか? Mozillaベースのブラウザにはこれに問題がありましたが、関数呼び出しは元々システムがシングルホームであると想定して定義されていたため、簡単に解決できませんでした(物理ネットワークから切断され、ループバックでのみ実行されていない限り、これは完全に誤りです)。