Автоматическая настройка прокси через DHCP (WPAD)

Прокси для доступа в интернет на базе SQUID всем хорошо, кроме того, что на каждом клиенте приходится прописывать его настройки. В какой-то момент было решено сделать все это централизованно.

Для этого была использована технология Web Proxy Autodiscovery Protocol (сокращенно WPAD).

Сначала настраиваем (если ранее не был настроен) DHCP сервер. И настраиваем Proxy сервер (SQUID)
После этого в файле /etc/dhcp/dhcpd.conf дополним конфигурацию DHCP сервера и зоны.

Для начала в основную часть конфигурации (основная часть идет до строчки начинающейся на subnet) добавим описание параметра wpad

И в описании области добавим параметр

который отвечает за то, откуда будет браться файл конфигурации.
(http://192.168.xxx.xxx/wpad.dat -это адрес файла конфигурации прокси)

В итоге описание зоны будет выглядеть примерно так:

Теперь остается только создать файл конфигурации и опубликовать его по протоколу HTTP.

для этого создадим простейший файл wpad.dat и запишем в него параметры Proxy сервера

где 192.168.xxx.xxx:3128 это адрес и порт Proxy сервера.

Далее разместим wpad.dat на веб-сервере и перезапустим DHCP командой

С этого момента все свежеподключившиеся клиенты будут получать конфигурацию прокси через DHCP.

В дальнейшем можно провести более тонкую настройку проксирования в файле wpad.dat.

Немного опишу базовый синтаксис:

Так же можно построить обратную конфигурацию. Если адрес такой-то, то используем такой прокси, а в остальных случаях соединяемся напрямую.

Вот пример, когда yandex и mail.ru работают через прокси, а остальные — напрямую:

Или использовать несколько прокси. Тут уже все зависит от фантазии и потребностей, ведь этот файл это всего-лишь javascript.

Доступные функции:

isResolvable(host) — запрос имени хоста (прверка существования) на DNS-сервере
пример:

dnsResolve(host) — запрос DNS-сервера для перевода имени в IP
пример:

myIpAddress() — возвращает IP-адрес (состоящий из целых чисел и точек) узла, на котором запущен браузер
пример:

isPlainHostName(host) — проверяет, содержатся ли точки в имени узла. Если точка найдена, то возвращается значение false; если нет, возвращается значение true
пример:

dnsDomainLevels(host) — возвращает целое число, равное количеству точек в имени узла
пример:

dnsDomainIs(host,».company.com») — возвращает значение true, если домен из имени узла совпадает с заданным доменом
пример:

localHostOrDomainIs(host, «www.company.com») — возвращает значение true, если домен из имени узла совпадает с заданным доменом. Выполняется только для URL-адресов, относящихся к локальному домену.
пример:

shExpMatch(str, shexp) — возвращает значение true, если str соответствует шаблону оболочки shexp
пример:

isInNet(host, pattern, mask) — возвращает значение true, если IP-адрес узла соответствует указанному шаблону (например, 127.0.0.0). mask указывает, какую часть IP-адреса следует сопоставлять (255=сопоставлять, 0=игнорировать)
пример:

url.substring(0, ) извлекает указанное количество знаков с начала строки
пример:

weekdayRange( day1 [, day2] [,»GMT»] ) — возвращает значение true, если текущее время системы попадает в диапазон, заданный с использованием параметров и (необязательный). Необязательный параметр GMT указывает, что задано не местное время, а время по Гринвичу.
пример:

dateRange(day1 [,month1] [,year1] [,day2] [,month2] [,year2] [,gmt] )
day — число дня месяца между 1 и 31
month — строка: JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
year — полный (четырёхзначный) год
gmt — зона «GMT» (по Гринвичу)
примеры:

timeRange(hour1 [,min1] [,sec1] [,hour2] [,min2] [,sec2] [,gmt] )
hour — число часа от 0 до 23
min — число минут от 0 до 59
sec — число секунд от 0 до 59
gmt — зона «GMT» (по Гринвичу)
примеры:

Так же еще поддерживаются переменные:
примеры:

Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности

Быть уверенным в своей IT-инфраструктуре — это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Заполните форму обратной связи и мы обязательно с вам свяжемся:
Форма обратной связи
Позвоните нам по телефону:
+7(909)952-44-33
Напишите нам на электронную почту:
order@blackdiver.net
Напишите нам в Telegram:
Telegram
Другие способы связи Вы сможете найти в разделе Контакты.