在 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。