Автоматическое обнаружение параметров прокси с помощью WPAD (Web Proxy Auto-Discovery Protocol)
Протокол 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.winitpro.ru:8080";
}
if (dnsDomainIs(host, "*.corp.winitpro.ru")) {return "DIRECT";}
// Локальные адреса с которыми нужно работать напрямую.
if (
shExpMatch(url,"http://*.winitpro.ru") ||
shExpMatch(url,"https://*.winitpro.ru") ||
shExpMatch(url,"ftp://*.winitpro.ru")
)
return "DIRECT";
// Если URL не содержит точек в адресе, то работаем напрямую.
if (isPlainHostName(host)) {return "DIRECT";}
if (shExpMatch(host,"bank.example.com")) {return "DIRECT";}
//используем отдельный прокси для одного домена
if (shExpMatch(url,"*.sbis.ru*")){return "PROXY prx2.winitpro.ru:8080";}
//адрес прокси-сервера по-умолчанию
return "PROXY proxy.winitpro.ru:3128";
}
PAC файл обычно состоит из одной функции
FindProxyForURL
, которая возвращает клиенту адрес прокси в зависимости от запрошенного URL адреса. В данном случае директива
return "DIRECT"
указывает, что для данных адресов и доменов нужно использовать прямое подключение (без прокси). Если сайт, к которому обращается клиент не подходит ни под одно из правил в файле WPAD, для доступа к нему используется прокси сервер
PROXY proxy.winitpro.ru: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; }
В различных версиях ОС есть ограничения на максимальный размер PAC-файла. Для Windows – не превышайте размер 1 Мб.
Нужно разместить файл wpad.dat на HTTP веб сервере в локальной сети, который будет доступен для чтения всем пользователям. Можно использовать веб сервер на Linux (nginx, apache, lighttpd) или Windows (IIS, или даже простейший веб сервер на PowerShell).
В нашем примере я опубликую файл wpad.dat на веб сервере IIS на контроллере домена. Скопируйте файл wpad.dat в каталог C:inetpubwwwroot.
Если в вашей сети используются недоменные клиенты, нужно предоставить права на чтение каталога в IIS для «IUSR» и «IIS APPPOOLDefaultAppPool.
Запустите консоли 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.winitpro.ru);
- Затем откройте параметры 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 winitpro.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 и мобильных устройствах.
Windows 10
Автоматическое обнаружение параметров прокси с помощью WPAD (Web Proxy Auto-Discovery Protocol)