NTLM プロキシ経由の Perl パッケージ マネージャー

NTLM プロキシ経由の Perl パッケージ マネージャー

ActivePerlとinclude PPMを職場にインストールしましたが、プロキシ経由でモジュールリポジトリに接続できません。環境変数を設定しました

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

しかしPPMは依然として407エラーを表示しますプロキシ認証が必要NTLM プロキシだと思いますが、よく分かりません。

やった後これ、私はエラー 500: ホスト名が間違っていますのためにppm4.activestate.comPPM は DNS サーバーにその名前を解決するように要求しますが、ローカル DNS サーバーはそのような外部ドメイン名を解決できません。プロキシだけがそのようなことを実行し、HTTP トラフィックに対してのみ実行します...

以下は、Wireshark (同じ Windows XP ボックス上の BackTrack VM で実行) が表示するスクリーンショットです。

私のWindowsボックスは10.75.82.221 DNSサーバーは10.7.3.110

Wiresharkスニフ

これは Windows から TraceRoute が表示する内容です。

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

つまり、

ppm4.activestate.com を解決できません

予想通り。

コメントで述べたように、ブラウザは DNS クエリを開始しないようです。以下は、Firefox (WXP から) から www.google.es へのアクセスを示す Wireshark のスクリーンショット (BT から) です。

私のWindowsボックスは10.75.82.221 プロキシは10.7.8.46

Wiresharkスニフ

ご覧のとおり、ブラウザからアクセスすると DNS クエリはまったく発生しません...

私にとっては、これは単なるセキュリティ機能であり、ActiveState の PPM ツールを使用するには許可を求める必要があるように思えます... ここで作成するスクリプトのほとんど (99%) が作業を高速化するためのものであるとしても、これはあり得ません。

答え1

エラー407の解決方法はperl.orgに記載されています。質問と回答:

質問:http_proxy が適切な資格情報(ユーザー名の規則を使用)を持つ正しいサーバーに設定されている場合でも、[メールアドレス]:port) まだ cpan 経由でパッケージをインストールできません。「LWP がコード [407] で失敗しました。メッセージ [プロキシ認証が必要です (ISA Server は要求を満たすために認証が必要です。Web プロキシ サービスへのアクセスが拒否されました。)]」

答え:CPAN は NTLM 認証をサポートしていないため、Authen::NTLM を CPAN で動作させることは困難です。結局、NTLM 認証のローカル プロキシとして ntlmaps を使用することになりました。

まず最初に、NTLMAPS の最新バージョンを svn リポジトリから取得し、どこかに解凍する必要があります。次に、最新バージョンの python を取得してインストールする必要があります。NTLMAPS の server.cfg を開き、PARENT_PROXY をプロキシのアドレスまたは IP に、PARENT_PROXY_PORT をプロキシが実行されるポート (通常は 80 または 8080) に、NT_DOMAIN をドメインに、USER をユーザー名に設定します。

runserver.batを実行します。パスワードを尋ねられるので、入力してEnterを押します。次に、NTLMAPSをプロキシとして使用するようにcpanを設定する必要があります。strawberry\perl\lib\CPANに移動し、Config.pmを開きます。http_proxyを次のように設定します。 http://localhost:5865CPAN を実行して、通常どおり使用します。これで、CPAN を実行する前に NTLMAPS を起動するだけで、正常に動作するようになります。

簡単に説明しますが、LM ではなく LM + NT 認証を強制する必要がある場合があります。これを行うには、NTLMAPS server.cfg を開き、NT_PART を 1 に、NTLM_FLAGS を 07820000 に設定します。

HTTP_PROXY を削除し、CPAN/Config.pm を記載どおりに変更すると、問題が解決する可能性があります。

以下のコメントの要約:

Wireshark ダンプの調査により、ActivePerl が DNS 要求を発行し、DNS サーバーによって不明として返されることが判明しました。考えられる解決策は次の 2 つだけです。

  1. DNSサーバーの再構成(投稿者には不可能)
  2. リクエストを開始するActiveState コミュニティ サイトこれらの無駄な要求を止めること(迅速な救済の保証はない)
  3. 手動でダウンロードしてインストールモジュール(残された唯一の実用的な解決策)。

答え2

NTLMの場合は、Perlモジュールが必要です。ActiveState PPMのドキュメントによると、パッケージは次の場所からNTLM入手できます。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 ドメインに属している場合は、資格情報を明示的に指定する必要がないことに注意してください。NTLM http://proxy.full.name:port/Kerberos では十分なだけでなく、安全性も高まります。


最近、マイクロソフトのソフトウェアはNTLMからKerberosに切り替えています。通常、プロキシは両方をサポートしていますが、できるNTLM が無効になっている可能性があります。PPM を使用した Kerberos プロキシに関するドキュメントはあまりありませんが、HTTP-NegotiateNTLM が動作しない場合は試してみる価値があるかもしれません。

答え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 の 2 つのオプションがあります。サーバーに問題がある場合は、問題のあるページ (またはリソース) を要求する直前に、これらのオプションを DEBUG:1 と BIN_DEBUG:1 に設定してください。server.cfg を再読み込みするには、プロキシ サーバーを再起動する必要があります。これにより、127.0.0.1-1048、127.0.0.1-1048.bin.client、127.0.0.1-1048.bin.rserver のように、http 要求ごとに (正確には接続ごとに) 3 つのログ ファイルが作成されます。最初のファイルには APS が行った処理に関する情報があり、他の 2 つにはクライアントとプロキシからの生のトラフィックが含まれます。

http://ntlmaps.sourceforge.net/

答え4

set http_proxy = を実行する代わりにhttp://ユーザー:[メールアドレス]:ポートユーザー名とパスワードなしでプロキシを設定してみてください。

ただこうしてください:

http_proxy を設定する =http://proxy.full.name:ポート

理由: Perl 5.22 の最新バージョンではプロキシ認証は不要であるとどこかで読みました。私の場合は魔法のようにうまくいきました。

問題が解決することを祈っています。

関連情報