在 Windows 上使用 WPAD(Web 代理自動發現協議)

Jacki

失敗(Web 代理自動發現)協議允許您輕鬆配置網絡中客戶端上的代理設置。 WPAD 背後的想法是,客戶端可以使用 DHCP 和/或 DNS 來查找網絡上具有帶有代理設置的 PAC 配置文件的 Web 服務器(https://yourdomain/wpad.dat)。

內容:

創建代理自動發現文件 (wpad.dat)

一個特別的PAC(代理自動配置)文件描述了使用代理的規則。 PAC 文件預定義名稱是wpad.dat。此文件包含確定客戶端在連接到特定資源(HTTP、HTTPS 或 FTP)或直接訪問時是否必須使用代理服務器的規則。

wpad.dat 文件中使用了 Javascript 語法。您可以設置默認代理服務器地址,以及客戶端何時應該(或不應該)使用代理進行連接的不同例外和規則。

讓我們看一個 wpad.dat 語法的簡單示例:

function FindProxyForURL(url, host)
{
   if (shExpMatch(host, "127.0.0.1" )) {return "DIRECT";}
   if (shExpMatch(host, "*/localhost*" )) {return "DIRECT";}
   if (isInNet(host, "192.0.0.0", "255.0.0.0")) {return "DIRECT";}
   if (isInNet(host, "10.0.0.0", "255.0.0.0")) {return "DIRECT";}
   // Dedicated proxy for a specific IP network
   if (isInNet(myIpAddress(), "172.15.1.0", "255.255.255.0"))
   {return "PROXY prx2.woshub.com:8080";}
   if (dnsDomainIs(host, "*.corp.woshub.com")) {return "DIRECT";}
   // Local addresses to be accessed directly
   if (
    shExpMatch(url,"https://*.woshub.com") ||
    shExpMatch(url,"https://*.woshub.com") ||
    shExpMatch(url,"ftp://*.woshub.com")
    )
   return "DIRECT";
   // If the URL does not contain dots in the address, the client should access it directly.
   if (isPlainHostName(host)) {return "DIRECT";}
   if (shExpMatch(host,"bank.example.com")) {return "DIRECT";}
   // Use a separate proxy server to access a specific wildcard domain
   if (shExpMatch(url,"*.microsoft.com*")){return "PROXY prx2.woshub.com:8080";}
   //a default proxy server address
   return "PROXY proxy.woshub.com:3128";
}

PAC 文件通常由單個查找 URL 代理根據請求的 URL 將代理地址返回給客戶端的函數。在這種情況下,返回“DIRECT”指令指示應使用直接連接(無需代理)來訪問這些 IP 地址和域。如果客戶端訪問的網站與 WPAD 文件中的任何規則都不匹配,則默認代理服務器 (PROXY proxy.woshub.com:3128) 用於訪問它。

您可以使用任何流行的代理服務器,例如squid 或3proxy。

您可以使用 PAC 文件作為內容過濾的簡單方法,以拒絕訪問某些網站或阻止訪問帶有 s 的域。

proxy_empty = "PROXY 127.0.0.1:3128"; // a link to an non-existing proxy
if ( shExpMatch(url,"*://twitter.com/*")) { return proxy_empty; }
if ( shExpMatch(url,"*://spam.*")) { return proxy_empty; }
if ( shExpMatch(url,"*doubleclick.net/*")) { return proxy_empty; }

不同的操作系統版本對 PAC 文件的最大大小有限制。對於 Windows,wpad.dat 文件的大小不應超過 1 MB。

更多閱讀:什麼是深網和暗網以及您可以在那裡找到什麼

將 wpad.dat 放在本地網絡中的 HTTP Web 服務器上,並允許所有用戶讀取它。您可以使用基於 Linux(nginx、apache、lighttpd)或基於 Windows(IIS 或基於 PowerShell 的簡單 HTTP 服務器)的 Web 服務器。

在此示例中,我將在域控制器上的 IIS Web 服務器上發布 wpad.dat。複製wpad.datC:inetpubwwwroot

如果網絡上有非域客戶端,請授予 IUSR 和 IIS APPPOOLDefaultAppPool 對 IIS 文件夾的只讀權限。

打開 IIS 管理器(inetmgr), 選擇MIME 類型在IIS網站設置中,添加一個新類型:

  • 文件擴展名:.dat
  • MIME 類型:application/x-ns-proxy-autoconfig

重新啟動 IIS。

在 DHCP 或 DNS 中配置 WPAD 記錄

現在,您需要配置 DHCP 服務器或 DNS 記錄,以便客戶端發現 PAC 文件。

如果您使用 DHCP 服務器,您可以使用選項為客戶端設置 WPAD 地址第252章。在此示例中,對於在 Windows Server 上運行的 DHCP:

  1. 打開 DHCP 控制台(dhcpmgmt.msc),單擊 IPv4 部分,然後選擇設置預定義選項;
  2. 點擊添加並添加具有以下選項的條目:
    姓名:WPAD
    數據類型:string
    代碼:252
  3. 單擊“確定”並指定 WPAD 主機的地址 (https://wpad.woshub.com)。
  4. 然後打開範圍選項並啟用第252章它的選項(或在服務器選項部分)。

然後創建 A 或 CNAME DNS 記錄搞砸了您的域中的名稱。

如果您使用的是 Active Directory,請注意,默認情況下 Microsoft DNS 服務器會阻止使用 wpad 和 isatap 名稱。您可以通過運行以下命令來檢查:

dnscmd mun-dc02 /info /globalqueryblocklist

要允許在 DNS 中使用這些名稱,請運行以下命令:

dnscmd mun-dc02 /config /enableglobalqueryblocklist 0

您可以清除列表:

dnscmd /config /globalqueryblocklist

並為isatap添加一條記錄:

dnscmd /config /globalqueryblocklist isatap

對所有 DNS 服務器進行相同的更改。

然後創建一條A記錄,名稱為搞砸了指向 WPAD 文件所在的 Web 服務器。您可以在 DNS 管理器中手動創建 A 記錄 (dnsmgmt.msc)或使用 Add-DnsServerResourceRecordA PowerShell cmdlet:

Add-DnsServerResourceRecordA -Name wpad -IPv4Address 192.168.13.10 -ZoneName woshub.loc -TimeToLive 01:00:00

現在您需要將瀏覽器配置為在啟動時自動接收 PAC 文件。為此,請啟用自動檢測設置IE 設置中的選項(工具 > Internet 選項 > 連接 > LAN 設置)或設置中的 Windows 代理設置(MS-Settings 快速 URI 命令:ms-settings:network-proxy)。

您可以使用以下命令集中啟用此選項組策略選項用戶配置 -> 首選項 -> 控制面板設置 -> Internet 設置–>新->Internet Explorer 10

詳細了解如何使用 GPO 配置代理服務器設置。

現在,客戶端設備上的瀏覽器在加載時將在 DNS 中查找 wpad 條目(或從 DHCP 獲取)。如果在網絡中發現帶有 WPAD 的主機,客戶端將下載文件https://wpad.%domain%/wpad.dat,運行 JavaScript 代碼,並應用 PAC 文件中的代理服務器規則。

例如,Windows 首先在 DNS 中搜索 wpad 名稱,然後通過鏈路本地多播名稱解析 (LLMNR),最後使用 NetBIOS (NBNS)。如果禁用 LLMNR 和 NetBIOS 協議,則僅使用 DNS 搜索。

您可以檢查瀏覽器在訪問互聯網時是否使用PAC文件(對於基於Chromium的網絡瀏覽器:Google Chrome、Opera、Microsoft Edge):

  1. 打開瀏覽器並轉到chrome://net-export/
  2. 選擇剝離私人信息然後單擊開始記錄到磁盤;
  3. 然後指定保存數據的JSON文件名;
  4. 點擊停止記錄;
  5. 在任何文本編輯器中打開 JSON 文件並蒐索proxySettings。在此示例中,您可以看到瀏覽器正在使用 wpad.dat 中的代理設置:
    "proxySettings":{"effective":{"pac_url":"https://wpad/wpad.dat"},"original":{"auto_detect":true,"from_system":true}}

如果要拒絕在 Windows 計算機上使用 WPAD,請創建一個名為的 DWORD 參數禁用Wpad值為1在註冊表項 HKLMSOFTWAREMicrosoftWindowsCurrentVersionInternetSettingsWinHttp 中。

使用 WPAD (PAC) 文件配置代理設置提供了通過 Windows GPO 設置代理無法實現的額外靈活性。 Windows、Linux、MacOS 和其他操作系統以及移動設備也支持 WPAD。