Proxy.pac myIpAddress() はイーサネットアダプタではなくローカルアドレスを返します

Proxy.pac myIpAddress() はイーサネットアダプタではなくローカルアドレスを返します

これはパート2のようなものだここから

クライアントがVPNでネットワークに接続すると、IPアドレスが割り当てられ、DHCPから252オプションが提供されます。自動検出により、このファイルが取得されます。

基本的に必要なのは、proxy.pac がクライアントが VPN 接続中であるかどうかを判断し、クライアントの DIRECT を解決できるようにする方法です。

単純なvar myIp = myipAddress()そして、これらの固定アドレスのリストから一致させれば、問題は解決します。ただし、myIpAddress() 関数は、ネットワーク アダプターではなく、マシンのローカル IP (例: 192.168.10.1) を取得しているようです。私の場合、そのローカル アドレスは、一部のローカル VM に必要な MS ループバックです。ループバック アダプターを無効にすると、正しいアドレスの解決が開始されます。これは理想的な回避策ではありません。

では、正しいアダプタから必要な IP アドレスを解決するにはどうすればよいでしょうか?

  • 今のところ、このテストはローカルマシンから実行しています。
  • これはクローズド VPN ソリューションではなく、現時点で決定されたものであるにすぎないことは承知しています。

前もって感謝します...

答え1

残念ながら、WindowsでmyIpAddress()が正しいアドレスを返すようにするにはするNIC の優先順位を変更することが含まれます (Windows XP では、これは「ネットワーク接続」ダイアログの「詳細設定」メニューの「詳細設定...」ダイアログにあります)。

あなたが見ているのと似たような問題を他の人が抱えています:http://www.geurtsrus.com/gerke/2005/01/proxy-auto-configuration-blues.html

プロキシを必要としない IP アドレス (つまり、会社のローカル サブネット) ではなく、プロキシを必要とする IP アドレスを検出し、それ以外の場合は DIRECT と想定する方がよいでしょう。

もう 1 つの代替案は、VPN 上のクライアントに別の PAC DHCP オプションを渡すことです。これは、VPN ユーザーが専用サブネットからアクセスしている場合は簡単かもしれませんが、LAN サブネットからアクセスしている場合は簡単ではない可能性があります。

答え2

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";
}

答え3

どのブラウザを使用していますか? Mozilla ベースのブラウザではこの問題がありましたが、関数呼び出しは元々システムがシングルホームであると想定して定義されていたため、簡単に解決できませんでした (物理ネットワークから切断され、ループバックのみで実行されている場合を除き、これは完全に誤りです)。

関連情報