Автоматическое обнаружение параметров прокси с помощью 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.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";
}

пример синтаксиса файла wpad.dat

PAC файл обычно состоит из одной функции FindProxyForURL , которая возвращает клиенту адрес прокси в зависимости от запрошенного URL адреса. В данном случае директива return "DIRECT" указывает, что для данных адресов и доменов нужно использовать прямое подключение (без прокси). Если сайт, к которому обращается клиент не подходит ни под одно из правил в файле WPAD, для доступа к нему используется прокси сервер PROXY proxy.remontka.com:3128 .

В качестве прокси вы можете использовать любой из популярных прокси серверов, таких как squid или 3proxy .

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

добавить dat файлы в IIS

Перезапустите IIS.

Настройка WPAD записей в DHCP и DNS

Теперь нужно настроить сервера DHCP и DNS записи обнаружения PAC файла клиентами.

Если у вас используется сервер DHCP, можно задать адрес WPAD для клиентов с помощью опции 252.

В нашем примере для DHCP на Windows Server :

  1. Запустите консоль dhcpmgmt.msc , щелкните по разделу IPv4 и выберите опцию Set Predefined Options ;
  2. Нажмите кнопку Add и добавьте запись с параметрами:Name: WPAD
    Data type: string
    Code: 252
  3. Нажмите OK и укажите адрес вашего WPAD сервера (http://wpad.remontka.com); настройка WPAD в DHCP
  4. Затем откройте параметры DHCP области Scope Options и включите для нее опцию 252 WPAD (или настройте этот параметр в разделе Server Options ). настройка опции 252 wpad в dhcp

Теперь нужно создать DNS записи типа A или CNAME для имени wpad в вашем домене.

Если у вас используется Active Directory, обратите внимание, что сервер Microsoft DNS по умолчанию блокирует использование имен wpad и isatap . Можете проверить это, выполнив команду:

dnscmd msk-dc02 /info /globalqueryblocklist

microsoft dns блокирует записи wpad и isatap по умолчанию

Чтобы разрешить использование этих имен в 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 запись в dns

Использование 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.

Включить автоопределение прокси через GPO

Теперь браузеры на клиентских устройствах при загрузке будут искать 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):

  1. Откройте браузер и перейдите на chrome://net-export/
  2. Выберите опцию Strip private information и нажмите кнопку Start Logging to Disk ; включить логирование в браузере chrome
  3. Затем укажите имя json файла для сохранения данных;
  4. Нажмите Stop Logging ;
  5. Откройте полученный json файл с помощью любого текстового редактора и выполните поиск по ключу proxySettings . В нашем примере видно, что браузер использует настройки прокси из wpad.dat:
    "proxySettings":{"effective":{"pac_url":"http://wpad/wpad.dat"},"original":{"auto_detect":true,"from_system":true}}

проверить pac_url в proxysettings браузера

Если вы хотите запретить использовать WPAD на компьютере Windows, нужно создать параметр Dword параметр с именем DisableWpad и значением 1 в ветке HKLMSOFTWAREMicrosoftWindowsCurrentVersionInternet SettingsWinHttp .

Настройка параметров прокси через файл WPAD (PAC) позволяет добавить гибкость, недоступные при настройке параметров прокси в Windows через GPO. Кроме того, WPAD поддерживается не только на Windows, но и на Linux, MacOS и мобильных устройствах.

EnglishRussianUkrainian