By the Shade of the Tree

В тени электронного дерева

20090905

Автоконфигурация прокси

Задача:

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

Решение:

Исследование показывает что не все браузеры адекватно отрабатывают определение собственного ip-адреса при исполнении .pac файла. Написано серверное решение, cgi-скрипт на языке perl, который в зависимости от адреса узла определяет какую версию файла выдать. Файл автонастройки прописан в свойствах MacOS и в настройках Opera. В Firefox выставлена настройка "Автоматически определять настройки прокси для этой сети", в сети настроен wpad, как по dhcp, так и по dns. Поддержка в IE не проверялась, но теоретически должно работать.

Исходный код скрипта:

!/usr/bin/perl
print "Content-type: application/x-ns-proxy-autoconfig\n\n";

my $remote = $ENV{'REMOTE_ADDR'};

if ($remote =~ /^192\.168\./) {
print <<EOF;
function FindProxyForURL(url, host) {
if (shExpMatch(url, "*.mydomain.ru/*")) {return "DIRECT";}
if (shExpMatch(url, "*.mydomain.ru/*:*")) {return "DIRECT";}
return "PROXY 192.168.1.2:3128";
}
EOF
} else {
print <<EOF;
function FindProxyForURL(url, host) {
return "DIRECT";
}
EOF
}

Добавлено в настройка apache (не совсем верно с точки зрения MIME):

AddType proxy/pac .dat
AddType proxy/pac .da
...
Action proxy/pac /cgi-bin/pac.cgi

Созданы пустые файлы в корне http-сервера:

wpad.dat
wpad.da

Создана запись cname в DNS где wpad.ms45.edu.ru указывает на сервер отдающий wpad.dat.