
Я установил 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
Вот что показывает 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
Как видите, при доступе через браузер никаких 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-сервером как неизвестные. Возможны только следующие решения:
- Перенастройка DNS-сервера (невозможно для автора)
- Запуск запроса наСайт сообщества ActiveStateпрекратить эти бесполезные просьбы (нет гарантии быстрого решения)
- Загрузите вручную иустановитьмодули (осталось единственное практическое решение).
решение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, две другие содержат необработанный трафик от клиента и от прокси.
решение4
Вместо того, чтобы делать set http_proxy =http://пользователь:[email protected]:порт, просто попробуйте настроить прокси без имени пользователя и пароля.
Просто делать:
установить http_proxy =http://proxy.full.name:port
Причина: Я где-то читал, что для последней версии Perl 5.22 прокси-аутентификация не нужна. У меня это сработало как по волшебству.
Надеюсь, это решит вашу проблему.