Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> Proxy Auto Configuration

Proxy Auto Configuration (PAC)

Автор: Raven2000.


Возникла необходимость автоматически настраивать прокси для всех компьютеров и не бегать к ним, если, например, поменялось что-то на прокси сервере. Для этого существует технология Proxy Auto Configuration (PAC).

Содержание:

  • Создание файла автоконфигурации прокси
        Первый вариант
        Второй вариант
        Распостраниение PAC скрипта
  • Web Proxy Auto-Discovery protocol
        Подготовка Apache
        WPAD метод основанный на DNS
        WPAD метод второй основанный на DHCP
  • Настройка браузеров
  • Литература

  • Создание файла автоконфигурации прокси
    Большинство браузеров можно автоматически сконфигурировать для использование прокси. Данная возможность реализуется при помощи Proxy Auto Configuration (PAC). PAC - файл, в котором содержится только одна функция JavaScript - FindProxyForURL ().

    Создадим файл будущего скрипта:
    # touch wpad.dat
    

    И немного ознакомимся с основными понятиями:
    
    Переменная	 Описание
    DIRECT           Загрузить обьект непосредственно через указанный URL
    PROXY name:port  Загрузить обьект через указанный прокси сервер и порт 
    SOCKS name:port  Загрузить обьект через SOCKS сервер по указанному имени сервера и порту
    

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

    Первый вариант
    function FindProxyForURL(url, host) {
    	// Local/Internal Websites (.e.g Intranet)
    	if (shExpMatch(url,"*.example1.com/*"))		{return "DIRECT";}
    	if (shExpMatch(url,"*.example2.com:*/*"))	{return "DIRECT";}
         
    
    	// If client machine is on company network
    	// return proxy otherwise go direct 
    	if (isInNet(myIpAddress(), "10.10.1.0", "255.255.255.0"))
    			{return "PROXY 10.10.1.100:8080";} else return {"DIRECT";}
    				
    }
    


    Второй вариант
    function FindProxyForURL(url, host) 
    {
       if (isInNet(host, "192.168.1.0", "255.255.255.0")) {
          return "DIRECT";
       } else {
          if (shExpMatch(url, "http:*"))
             return "PROXY IP_proxy:3128; DIRECT";
          if (shExpMatch(url, "https:*"))
             return "PROXY IP_proxy:3128; DIRECT";
          if (shExpMatch(url, "ftp:*"))
             return "PROXY IP_proxy:2121; DIRECT";
          if (shExpMatch(url, "socks:*"))
             return "SOCKS IP_proxy:1080; DIRECT";
          return "DIRECT";
       }
    }
    


  • Web Proxy Auto-Discovery protocol

    Подготовка Apache
    Необходимо, чтобы Apache выдавал скрипт при запросе. Для этого надо разрешить обращаться к файлам типа .dat:

    1. Добавим в httpd.conf дерективу
    AddType application/x-ns-proxy-autoconfig .dat
    


    WPAD метод основанный на DNS
    Механизм WPAD просто строит цепочку известных URL, начинающихся с доменного имени машины и оканчивающего коротким суффиксом wpad.
    Например, доменое имя было example.com., то URL будет следующий:
    http://wpad.example.com./wpad.dat
    


    Таким образом, браузер будет пытатся загрузить PAC скрипт известного доменного URL.
    Для реализации данного метода сделаем следующее:

    1. Создим в DNS имя и присвоим ему IP
    Например, создаем запись wpad.example.com с IP адресом 192.168.1.12 или создаем alias на существующий хост (что удобнее).
    2. Создадим в Apache виртуальный хост с именем wpad.example.com
    3. Скопируем скрипт wpad.dat в директорию виртуального хоста

    Второй метод WPAD, основанный на DHCP
    WPAD просто выдает PAC скрипт с выбранный номером 252 в "аренду" запросившему IP. Браузер получает URL скрипта и просто качает его по ссылке.

    1. Добавим в /etc/dhcp/dhcpd.conf следующие строчки.
    option local-pac-server code 252 = text ;
    option local-pac-server "http://wpad.example.com:80/wpad.dat\000" ;
    

    2. Перезапустите DHCP сервер.

    Небольшой нюанс - у DHCP приоритет выше, чем у DNS, как следствие - гораздо быстрее. И можно вместо имени сайта указать его IP, в этом случае отсутствуют расходы времени на преобразование адреса в имя, что добавляет скорости.

  • Настройка браузеров

    Теперь настроим браузер. В параметрах программы нужно указать определение прокси-сервера:

    1) В браузере Explorer
    Сервис -> Свойства обозревателя -> Подключения -> Настройка сети
    поставим галочку напротив опции "Автоматическое определение параметров"
    или поставим галочку напротив опции "Использовать сценарий автоматической настройки" и в поле "Адрес" напишем http://wpad.example.com:80/wpad.dat

    2) В браузере Opera
    Настройки -> Дополнительно -> Сеть -> Прокси-серверы
    поставим галочку напротив опции "Автоматическая конфигурация прокси-сервера" и в поле "Адрес" написать http://wpad.example.com:80/wpad.dat

    3) В браузере Firefox
    Инструменты->Настройки->Дополнительно->Сеть->Соединение(Настроить)
    выберем опции "Автоматически определять настройки прокси для этой сети"
    или выберем опцию "URL автоматической настройки сервиса прокси" и в поле "Адрес" напишем http://wpad.example.com:80/wpad.dat
    Нажмите кнопку Обновить, чтобы загрузить настройки.
    В версии 3.0.1 нормально не работает "Автоматически определять настройки прокси для этой сети" или нужно дополнительно по гуглить =).

  • Литература
    1) Automatic proxy HTTP server configuration in web browsers
    2) WPAD Deployment Tutorial
    3) Proxy auto-config
    4) Automatic Discovery for Firewall and Web Proxy Clients

    Отдельное спасибо Andy за помощь в редактировании статьи =)



    размещено: 2008-07-31,
    последнее обновление: 2008-08-01,
    автор: Raven2000


    hsw, 2008-08-01 в 1:00:07

    Хорошо бы упомянуть про вариант fallback:
    "PROXY IP_proxy:3128; DIRECT"
    Помогает, если прокси лежит.

    www2, 2008-08-01 в 7:38:17

    Баян, но полезный. Почти всё в одном месте. Спасибо.

    Kolesya, 2008-08-01 в 8:25:55

    Если расширение файлу поставить wdat.pac апач перенастраивать не придется :)

    Sash, 2008-08-01 в 9:12:43

    Хм.. я вот не понимаю зачем это вообще нужно, если прокси как правило юзается в больших офисах, где 99% стоит AD. Используя GPO можно изменять адрес прокси не поднимая задницы со стула, да и правила ipfw fwd тоже никто не отменял на шлюзе из freebsd. нафига козе бойан? или я что-то не понимаю?

    lissyara, 2008-08-01 в 9:16:10

    Не зацикливайтесь на продуктах M$
    Во многих больших и крупных конторах за стандарт идёт Firefox

    Shemmy, 2008-08-01 в 10:11:06

    Есть уточнение. В автоконфигурирования по DHCP надо применять значение
    option local-pac-server "http://wpad.example.com:80/wpad.dat\000";

    Internet Explorer отрезает последний символ в строке.
    И как показала практика автоконфигурирование по DHCP работает только для Internet Explorer

    Antonio, 2008-08-01 в 10:16:24

    Как-то тоже настраивал, но не пошло, потому как только для IE, а это можно задать и в групповых политиках.

    Raven2000, 2008-08-01 в 11:16:31

    to hsw
    см в конце все на return "DIRECT"; разве не то?
    to Kolesya
    Самое интересное, что я при выпуске статьи это урезал
    А было в статье еще
    + AddType application/x-ns-proxy-autoconfig .pac
    + Redirect / wpad.dat / proxy.paс
    + ln -s wpad.dat proxy.paс
    to Sash
    У меня так и есть на работе =) НО в домашней сети, где каждый сам ПК по себе и нет серверов маздая то это самое то и без разговоров =) Да и не забудь, бывает и шлюзов с фри нет и прокси на маздае нет и бессмысленно ставить AD =)
    Да и у каждого от Сафари до Мозиллы
    to Shemmy
    пробовал с \000 и без разницы небыло замеченно тестил на IE, Firefox, Opera так что я это из статьи выкинул тк смысла не увидел (может не прав =) еще раз потестю).
    Да и на счет IE про автоконфиг по DHCP ты прав в самую точку, но я в статье это указал В Опере авто по DHCP нет, а в Firefox нормально не пашет, что и написал
    to Antonio
    Ты не прав это не только для IE, а для всех грамотных браузерах работает и на счет AD писал для Kolesya выше

    Shemmy, 2008-08-01 в 12:07:18

    to Raven2000
    IE кеширует настроки прокси. в Групповой политике есть настройка отключающая кеширование.

    hsw, 2008-08-01 в 12:15:42

    to Raven2000
    Нет, не то.
    Если сработает правило с "PROXY: ...", а прокси не ответит, браузер покажет ошибку.
    Если будет "PROXY: ...; DIRECT" - через таймаут пойдёт DIRECT-ом.
    Можно указать несколько проксей в порядке уменьшения приоритета.

    Raven2000, 2008-08-01 в 14:43:42

    to Shemmy & hsw
    Fixed
    Что еще можно добавить?

    hsw, 2008-08-01 в 20:12:46

    to Raven2000
    упс. retrurn "...";
    ";" в конце не хватает.

    Raven2000, 2008-08-01 в 20:43:23

    Блин фсе %0 сказывается последний день на работе и в отпуск =)

    savio, 2008-08-02 в 21:47:35

    а не проще сделать "прозрачный" прокси на серваке? на стороне юзера вообще ничего делать не нужно

    hsw, 2008-08-02 в 22:59:48

    С автонастройкой в IE тоже ничего делать не надо.
    Она включена по умолчанию.
    Да, и прозрачный прокси для https, ftp и socks сделать проблематично.
    Смотрите ширше. Включение wpad.<provider>.com позволяет загонять клиентов с реальными адресами на proxy провайдера.

    Dima, 2008-08-03 в 15:38:58

    Не зацикливайтесь на продуктах M$
    Во многих больших и крупных конторах за стандарт идёт Firefox

    Хотел бы я увидеть те большое компании которые используют Firefox за стандарт :)

    К сожаление, большинство прог заточенно как раз по ИЕ...

    ostrik, 2012-07-06 в 12:55:09

    Перед тем как пользоваться протоколом WPAD, обратите внимание на эту статью - http://www.securitylab.ru/analytics/379619.php

    ttys, 2012-12-27 в 8:29:01

    после добавления:
    AddType application/x-ns-proxy-autoconfig .dat
    файл не открывается а пытается скачиваться
    зато без неё всё намана ;)

    Юрий, 2013-11-08 в 21:17:48

    Ховди ttys, ты погляди на сам формат mime:

    # MIME type                    Extensions
    # application/3gpp-ims+xml
    # application/activemessage
    application/andrew-inset            ez
    # application/applefile
    application/applixware                aw
    application/atom+xml                atom
    application/atomcat+xml                atomcat

    Добавляй без точки:

       # Add WPAD type
       AddType application/x-ns-proxy-autoconfig dat

    и будет щастье.

    Врубаешься?

    ttys, 2013-11-09 в 12:10:33

    2 Юрий,
    я забил на это т.к. решил отказаться от прокси и потушил сквид ;)
    но спс за подсказку =)



  •  

      Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
      Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

    © lissyara 2006-10-24 08:47 MSK

    Время генерации страницы 0.0401 секунд
    Из них PHP: 27%; SQL: 73%; Число SQL-запросов: 77 шт.
    Исходный размер: 38238; Сжатая: 9330