Имеется апдейт!
Как прокси мы используем Usergate (будь он неладен. На человеческие прокси пока не могу уломать начальство). В нем есть свой DHCP сервер с нужной нам функцией. Но в качестве DHCP мы используем стандартные средства Windows Server, поэтому простой вариант с одной галочкой нам не подходит.
Тут нам на помощь приходит протокол автонастройки прокси (WPAD). Смысл его работы в следующем:
- Клиент ищет в сети сервер с именем wpad.domain.local (domain.local тут - имя нашего домена), если такой сервер не находится клиент идет выше - wpad.local (в этом кстати заключается брешь этого протокола, о которой говорили на одной из blackhat-конференций).
- Если сервер найден, клиент пытается прочитать файл wpad.dat, лежащий в корневом каталоге.
- Из этого файла берутся настройки, исходя из которых клиент понимает, в каких случаях нужно идти в сеть через прокси, а в каких напрямую.
function FindProxyForURL(url, host)
{
return "PROXY 192.168.0.254:3128";
}
Здесь мы видим, что в качестве адреса прокси-сервера клиенты получают 192.168.0.254:3128. Настройки можно кастомизировать, у файла может быть огромное количество опций. Их вы можете найти в поисковике.
Итак, будем считать, что файл настроек создан. Нужно положить его в корневую директорию веб-сервера и настроить сам веб-сервер, чтобы он умел отдавать этот файл. У нас используется Apache под виндой, поэтому привожу его конфигурацию: в httpd.conf в секции <IfModule mime_module> нужно добавить строку AddType application/x-ns-proxy-autoconfig .dat .
Следующий этап - настройка DNS-сервера. Нужно внести запись типа CNAME в зону прямого просмотра, указывающую, что под именем wpad.domain.local будет пониматься ваш веб-сервер. На этом натыкаемся на проблему - винда не разрешает использовать имя wpad. Об этом вам ничего не скажет, но найти сервер по имени wpad в сети вы не сможете. Нужно выполнить в командной строке dnscmd /config /enableglobalqueryblocklist 0 (подробнее здесь).
Очищаем кэш ДНС или просто идем
Спасибо ит-бложику за наводку.
UPD 24.12.2013
Описание параметров в файле wpad.dat производится на языке JavaScript, т.е. можно построить довольно сложную конфигурацию. Вот пример моего файла, проверяющего соответствие IP-адресов и закомментированными сообщениями для дебага (строки, начинающиеся с var и ниже проверяют, находится ли адрес в диапазоне 192.168.100.65 - 192.168.100.240):
function FindProxyForURL(url, host)
{
// If specific URL needs to bypass proxy, send traffic direct.
if (shExpMatch(host,"*subd.domain.local*") ||
shExpMatch(host,"*subd.domain1.local*") ||
shExpMatch(host,"192.168.*") ||
shExpMatch(host,"127.*") ||
dnsDomainIs(host,".subd.domain.local") ||
dnsDomainIs(host,".subd.domain1.local") ||
isPlainHostName(host))
return "DIRECT";
// All other traffic uses below proxies, in fail-over order.
//debug="host=" + host + "\n" + "url=" + url + "\n" + "MyIP=" + myIpAddress() + "\n";
var myip = myIpAddress(); // Set a variable for the local IP address.
var myAddrArray = myip.split("."); // Split that IP address var into an array.
var mysubnet3=parseInt(myAddrArray[2]); // Convert array element #2 into a number and store it in a new variable
var mysubnet4=parseInt(myAddrArray[3]);
//debug += "Subnet=" + mysubnet3 + "." + mysubnet4 + "\n";
if ((mysubnet3 == 100) && (mysubnet4 >=65) && (mysubnet4 <= 240)) {
return "PROXY 192.168.100.14:8080";}
else {
return "DIRECT";}
}
В качестве веб-сервера для этой системы очень удобно использовать tinyhttpd, если нет уже работающих серверов. tynihttpd очень маленький и удобный, не нужно делать ничего лишнего - только index.html, wpad.dat и запустить экзешник из cmd.
Ещё DNS сервер Windows не дает разрешить доменные имена wpad и isatap, поэтому с ним нужно поколдовать: в командной строке пишем
dnscmd /config /globalqueryblocklist и будет счастье.
UPD 01.09.2014
Здесь интересная статейка по этой теме.
UPD 08.08.2016
О безопасности при использовании WPAD
Комментариев нет:
Отправить комментарий
Примечание. Отправлять комментарии могут только участники этого блога.