Протокол WPAD ( Web Proxy Auto-Discovery Protocol ) позволяет упростить настройку параметров прокси сервера в браузерах на клиентах в вашей сети. Идея WPAD в том, что клиент сам обнаруживает (через DHCP или DNS) в вашей сети веб-сервер, где хранится конфигурационный файл с настройками прокси ( http://yourdomain/ wpad.dat
).
Настройка параметров прокси в файле wpad.dat
Правила использования прокси описываются в специальном файле PAC-файле (Proxy Auto Configuration). PAC файл имеет предопределенное имя wpad.dat . В этом файле указываются правила, в которых указано, нужно ли клиенту использовать прокси сервер при подключении или обращаться к запрошенному ресурсу (HTTP, HTTPS или FTP) напрямую.
В файле wpad.dat использует синтаксис Java-script. Вы можете задать адрес прокси сервера по-умолчанию, а также различные исключения и правила, когда клиент должен использовать (или не использовать) подключение через прокси.
Рассмотрим простой примера синтаксиса файла 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";}
//отдельный прокси для одной подсети:
if (isInNet(myIpAddress(), "172.10.30.0", "255.255.255.0"))
{return "PROXY prx2.remontka.com:8080";
}
if (dnsDomainIs(host, "*.corp.remontka.com")) {return "DIRECT";}
// Локальные адреса с которыми нужно работать напрямую.
if (
shExpMatch(url,"http://*.remontka.com") ||
shExpMatch(url,"https://*.remontka.com") ||
shExpMatch(url,"ftp://*.remontka.com")
)
return "DIRECT";
// Если URL не содержит точек в адресе, то работаем напрямую.
if (isPlainHostName(host)) {return "DIRECT";}
if (shExpMatch(host,"bank.example.com")) {return "DIRECT";}
//используем отдельный прокси для одного домена
if (shExpMatch(url,"*.sbis.ru*")){return "PROXY prx2.remontka.com:8080";}
//адрес прокси-сервера по-умолчанию
return "PROXY proxy.remontka.com:3128";
}
PAC файл обычно состоит из одной функции FindProxyForURL
, которая возвращает клиенту адрес прокси в зависимости от запрошенного URL адреса. В данном случае директива return "DIRECT"
указывает, что для данных адресов и доменов нужно использовать прямое подключение (без прокси). Если сайт, к которому обращается клиент не подходит ни под одно из правил в файле WPAD, для доступа к нему используется прокси сервер PROXY proxy.remontka.com:3128
.
PAC файл можно использовать в качестве средства простейшей фильтрации контента, чтобы запретить пользователям доступ к определенным сайтам или запретить обращаться к доменам с рекламой.
proxy_empty = "PROXY 127.0.0.1:3128"; // ссылка на несуществующий прокси
if ( shExpMatch(url,"*://twitter.com/*")) { return proxy_empty; }
if ( shExpMatch(url,"*://spam.*")) { return proxy_empty; }
if ( shExpMatch(url,"*doubleclick.net/*")) { return proxy_empty; }
Нужно разместить файл wpad.dat на HTTP веб сервере в локальной сети, который будет доступен для чтения всем пользователям. Можно использовать веб сервер на Linux (nginx, apache, lighttpd) или Windows (IIS, или даже простейший веб сервер на PowerShell ).
В нашем примере я опубликую файл wpad.dat на веб сервере IIS на контроллере домена. Скопируйте файл wpad.dat в каталог C:inetpubwwwroot.
Запустите консоли IIS Manager, в настройках сайта IIS выберите раздел MIME Types и добавьте новый тип:
- File name extension:
.dat
- MIME type:
application/x-ns-proxy-autoconfig
Перезапустите IIS.
Настройка WPAD записей в DHCP и DNS
Теперь нужно настроить сервера DHCP и DNS записи обнаружения PAC файла клиентами.
Если у вас используется сервер DHCP, можно задать адрес WPAD для клиентов с помощью опции 252.
В нашем примере для DHCP на Windows Server :
- Запустите консоль
dhcpmgmt.msc
, щелкните по разделу IPv4 и выберите опцию Set Predefined Options ; - Нажмите кнопку Add и добавьте запись с параметрами:Name:
WPAD
Data type:string
Code:252
- Нажмите OK и укажите адрес вашего WPAD сервера (http://wpad.remontka.com);
- Затем откройте параметры DHCP области Scope Options и включите для нее опцию 252 WPAD (или настройте этот параметр в разделе Server Options ).
Теперь нужно создать DNS записи типа A или CNAME для имени wpad в вашем домене.
Если у вас используется Active Directory, обратите внимание, что сервер Microsoft DNS по умолчанию блокирует использование имен wpad и isatap . Можете проверить это, выполнив команду:
dnscmd msk-dc02 /info /globalqueryblocklist
Чтобы разрешить использование этих имен в DNS, нужно выполнить команду:
dnscmd msk-dc02 /config /enableglobalqueryblocklist 0
dnscmd /config /globalqueryblocklist
И добавить запись для isatap:
dnscmd /config /globalqueryblocklist isatap
Эти изменения нужно внести на всех DNS серверах.
Теперь создайте A запись с именем wpad, которая указывает на ваш веб-сервер, где находится WPAD файл. Можно создать A запись вручную через консоль DNS Manager ( dnsmgmt.msc
) или воспользоваться PowerShell командлетом Add-DnsServerResourceRecordA :
Add-DnsServerResourceRecordA -Name wpad -IPv4Address 192.168.13.10 -ZoneName remontka.loc -TimeToLive 01:00:00
Использование WPAD с настройками прокси в браузерах
Теперь нужно настроить браузеры, чтобы при старте они автоматически получали PAC файл с настройками. Для этого в параметрах IE или в настройках прокси в Windows в панели Параметры ( команда быстрого доступа ms-settings:network-proxy
) должна быть включена опцию Automatic Detect Settings (Tools > Internet Options > Connections > LAN Settings).
Можно централизованно включи эту опцию с помощью групповой политики User Configuration -> Preferences -> Control Panel Settings -> Internet Settings –> New -> Internet Explorer 10.
Теперь браузеры на клиентских устройствах при загрузке будут искать wpad запись в DNS (или получат ее от DHCP). Если в сети найдет сервер с WPAD, браузер клиента скачает файл http://wpad.%domain%/wpad.dat
, выполнит код JavaScript и применит правила прокси-сервера из PAC файла.
Windows например выполняет поиск имени wpad сначала по DNS, затем через Link-Local Multicast Name Resolution (LLMNR) и затем через NetBIOS (NBNS). Если LLMNR и NetBIOS отключены , используется только DNS поиск.
Вы можете проверить, что браузер использует PAC файл при доступе в интернет (для веб браузеров на движке Chromium: Google Chrome, Opera, Microsoft Edge):
- Откройте браузер и перейдите на
chrome://net-export/
- Выберите опцию Strip private information и нажмите кнопку Start Logging to Disk ;
- Затем укажите имя json файла для сохранения данных;
- Нажмите Stop Logging ;
- Откройте полученный json файл с помощью любого текстового редактора и выполните поиск по ключу
proxySettings
. В нашем примере видно, что браузер использует настройки прокси из wpad.dat:"proxySettings":{"effective":{"pac_url":"http://wpad/wpad.dat"},"original":{"auto_detect":true,"from_system":true}}
Если вы хотите запретить использовать WPAD на компьютере Windows, нужно создать параметр Dword параметр с именем DisableWpad и значением 1 в ветке HKLMSOFTWAREMicrosoftWindowsCurrentVersionInternet SettingsWinHttp
.
Настройка параметров прокси через файл WPAD (PAC) позволяет добавить гибкость, недоступные при настройке параметров прокси в Windows через GPO. Кроме того, WPAD поддерживается не только на Windows, но и на Linux, MacOS и мобильных устройствах.