Менеджер пакетов Perl через прокси-сервер NTLM

Менеджер пакетов Perl через прокси-сервер NTLM

Я установил ActivePerl и включил PPM на работе, но не могу подключиться к репозиторию модулей через прокси. Я настроил переменную окружения

HTTP_PROXY = http://user:[email protected]:port

но PPM все еще показывает ошибку 407Требуется аутентификация прокси-сервера. Я думаю, что это NTLM-прокси, но я не уверен.

После того как сделалэтот, я получаюОшибка 500: Неверное имя хостадляppm4.activestate.com. Оказывается, PPM просит мой DNS-сервер разрешить это имя, но мой локальный DNS-сервер не может разрешить такие внешние доменные имена. Только прокси делает это и только для HTTP-трафика...

Вот снимок экрана, на котором видно, что показывает Wireshark (запущенный на виртуальной машине BackTrack на том же компьютере с Windows XP):

Мой Windows-бокс10.75.82.221 DNS-сервер — это10.7.3.110

Wireshark обнюхивать

Вот что показывает TraceRoute из Windows:

G:\>tracert ppm4.activestate.com
No se puede resolver el nombre de destino ppm4.activestate.com.

Что значит:

Невозможно разрешить ppm4.activestate.com

как и ожидалось.

Как я уже сказал в комментариях, браузер, похоже, не запускает никаких DNS-запросов. Вот скриншот Wireshark (из BT), который показывает доступ к www.google.es из Firefox (из WXP):

Мой Windows-бокс10.75.82.221 Прокси-сервер - это10.7.8.46

Wireshark обнюхивать

Как видите, при доступе через браузер никаких DNS-запросов не происходит...

Мне кажется, что это просто функция безопасности, и мне придется спрашивать разрешения на использование инструмента PPM ActiveState... что неправдоподобно, даже если большинство (99%) скриптов, которые я здесь создаю, предназначены для ускорения работы.

решение1

Решение ошибки 407 описано на perl.orgВопросы и ответы:

В:Даже если http_proxy настроен на правильный сервер с правильными учетными данными (используется общепринятое имя пользователя:[email protected]:port) Я все еще не могу установить пакеты через cpan. "LWP завершился с кодом [407] сообщение [Требуется аутентификация прокси-сервера (сервер ISA требует авторизации для выполнения запроса. Доступ к службе веб-прокси запрещен. )]"

А:CPAN не поддерживает аутентификацию NTLM, и трудно заставить Authen::NTLM работать с CPAN. В итоге я использовал ntlmaps в качестве локального прокси для аутентификации NTLM.

Первое, что вам нужно сделать, это получить последнюю версию NTLMAPS из их репозитория svn, извлечь ее куда-нибудь. Затем вам нужно будет получить последнюю версию python и установить ее. Откройте server.cfg NTLMAPS, установите PARENT_PROXY на адрес или IP вашего прокси-сервера, PARENT_PROXY_PORT на порт, на котором работает прокси-сервер (обычно 80 или 8080), NT_DOMAIN на ваш домен и USER на ваше имя пользователя.

Запустите runserver.bat. Он запросит ваш пароль, введите его и нажмите Enter. Далее вам нужно настроить cpan для использования NTLMAPS в качестве прокси. Перейдите в strawberry\perl\lib\CPAN и откройте Config.pm. Установите http_proxy на http://localhost:5865. Запустите CPAN и используйте его как обычно. Теперь вам нужно будет только запустить NTLMAPS перед запуском CPAN, чтобы он заработал правильно.

Небольшое замечание: вам может потребоваться принудительно использовать аутентификацию LM + NT вместо LM. Для этого откройте файл NTLMAPS server.cfg, установите NT_PART на 1, а NTLM_FLAGS на 07820000.

Удаление HTTP_PROXY и изменение CPAN/Config.pm, как указано, могут решить проблему.

Краткое изложение комментариев ниже:

Изучение дампов Wireshark показывает, что ActivePerl выдает DNS-запросы, которые возвращаются DNS-сервером как неизвестные. Возможны только следующие решения:

  1. Перенастройка DNS-сервера (невозможно для автора)
  2. Запуск запроса наСайт сообщества ActiveStateпрекратить эти бесполезные просьбы (нет гарантии быстрого решения)
  3. Загрузите вручную иустановитьмодули (осталось единственное практическое решение).

решение2

Если это NTLM, вам понадобится NTLMмодуль Perl. В документации ActiveState PPM говорится, что вы можете получить ppmxпакет изрепозиторий, но я не смог найти такую ​​ссылку. Вы все еще можете, однако, скачатьppdиtar.gzфайлы и установите их:

wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.ppd
wget http://ppm4.activestate.com/MSWin32-x86/5.12/1205/N/NB/NBEBOUT/NTLM-1.09.tar.gz
ppm install NTLM-1.09.ppd

Также обратите внимание, что если ваш компьютер принадлежит домену Windows, вам не нужно явно указывать учетные данные — этого http://proxy.full.name:portдолжно быть достаточно для NTLM/Kerberos, к тому же это более безопасно.


Недавно программное обеспечение Microsoft перешло с NTLM на Kerberos — хотя обычно прокси-серверы поддерживают оба протокола,можетслучиться так, что NTLM будет отключен в вашем. Документации по прокси Kerberos с PPM не так много, но HTTP-Negotiateстоит попробовать, если вы не можете заставить работать NTLM.

решение3

Это выстрел вслепую... никто не упоминал, что попробует это сделать, но, похоже, у всех закончились идеи... если это правда:

"Turns out PPM asks my DNS server to resolve that name, but my local DNS server cannot resolve such external domain names."

Затем отредактируйте:

C:\Windows\System32\Drivers\etc\hosts

добавьте строку:

204.244.102.19  ppm4.activestate.com

Посмотрим, будет ли разница.


Для устранения неполадок ntlmaps:

В server.cfg есть две опции DEBUG и BIN_DEBUG, если у вас возникли проблемы с сервером, установите эти опции на DEBUG:1 и BIN_DEBUG:1 непосредственно перед запросом проблемной страницы (или ресурса). Вам нужно перезапустить прокси-сервер, чтобы перечитать server.cfg. Это даст вам 3 файла журнала на каждый http-запрос (точнее, на каждое соединение), например, 127.0.0.1-1048, 127.0.0.1-1048.bin.client и 127.0.0.1-1048.bin.rserver. В первой есть информация о том, что сделал APS, две другие содержат необработанный трафик от клиента и от прокси.

http://ntlmaps.sourceforge.net/

решение4

Вместо того, чтобы делать set http_proxy =http://пользователь:[email protected]:порт, просто попробуйте настроить прокси без имени пользователя и пароля.

Просто делать:

установить http_proxy =http://proxy.full.name:port

Причина: Я где-то читал, что для последней версии Perl 5.22 прокси-аутентификация не нужна. У меня это сработало как по волшебству.

Надеюсь, это решит вашу проблему.

Связанный контент