%20%E5%82%B3%E5%9B%9E%E6%9C%AC%E6%A9%9F%E4%BD%8D%E5%9D%80%E8%80%8C%E4%B8%8D%E6%98%AF%E4%B9%99%E5%A4%AA%E7%B6%B2%E8%B7%AF%E4%BB%8B%E9%9D%A2%E5%8D%A1.png)
這有點像第二部分從這裡。
當客戶端 VPN 進入我的網路時,他們會被指派一個 IP 位址,這反過來又為他們提供來自 DHCP 的 252 選項。然後自動檢測抓取該文件
我本質上需要的是 proxy.pac 確定客戶端是否在 VPN 連接上的方法,以便它可以為他們解析 DIRECT。
所以如果我做一個簡單的var myIp = myipAddress()然後讓它從這些固定地址的清單中匹配它就可以解決。然而,myIpAddress()函數似乎正在取得機器的本機IP(例如:192.168.10.1)而不是網路介面卡。在我的例子中,本地地址是我的 MS Loopback,這是我的一些本地虛擬機器所需要的。如果我禁用環回適配器,它就會開始解析正確的位址。這不是一個理想的解決方法。
那麼我該如何從正確的適配器解析我想要的 IP 位址呢?
- 我現在一直在本地機器上進行此測試。
- 我知道這不是一個封閉的 VPN 解決方案,這只是目前已經決定的。
提前致謝...
答案1
不幸的是,讓 myIpAddress() 在 Windows 中傳回正確的位址做涉及更改 NIC 的優先順序(在 Windows XP 中,位於「網路連線」對話方塊的「進階」功能表的「進階設定…」對話方塊中)。
這是其他人的問題,看起來與您所看到的類似:http://www.geurtsrus.com/gerke/2005/01/proxy-auto-configuration-blues.html
您可能會更清楚地偵測需要代理程式的 IP 位址,而不是不需要代理程式的 IP 位址(即公司中的本機子網路),否則假設為 DIRECT。
另一種替代方法是將不同的 PAC DHCP 選項傳遞給 VPN 上的用戶端。如果您的 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 的瀏覽器在這方面有問題,但它們無法輕易解決,因為函數呼叫最初是在假設系統是單宿主的情況下定義的(這是完全錯誤的,除非您與物理網路斷開連接,並且僅在環回上運行)。