Proxyを超えての接続

[戻る]
ys 2007/09/07(金) 11:53:30
YGG様こんにちは。
有用なソフトをご提供いただき感謝しています。

早速ですが不具合の報告をさせていただきます。現在、携帯(SoftBank 912SH)から
自宅のWebサーバにHttpsで接続し、Cgiタイプのプロキシサーバを介してVPN越しの
会社PCに導入したPinkにHttpでアクセスしています。携帯-自宅間をHttpsで、
自宅-会社間をVPNで接続することによりほぼ全ての経路を暗号化して通信させる
ことに成功、しかもプロキシサーバから先は自宅サーバからのリクエストになるので
ソフトバンクの不便なポート規制も回避できるという嬉しい副作用もあります。
ただし、現在起こっている不具合はそのプロキシサーバからPinkへのアクセスで
発生しています。プロキシサーバにはCgiプロキシの大御所CgiProxyを使って
VPN用のIPアドレスとPinkのポート番号を指定してアクセスしていますが、
ページは正しく読み込まれるのに画像は読込不良のマークが出て読み込みされません。
この現象は携帯以外、PCで実行しても起こりますし、プロキシサーバにhttpで
アクセスしても発生します。当然プロキシを介さないでアクセスすると何の問題も
なくアクセスできます。ちなみにアクセスURLは以下のような形になっています。
https://www.homesrv.com/cgiproxy/nph-proxy.cgi/000000A/http/172.21.1.150:10090/o06l1nclpk64
ちなみに、Cgiタイプのプロキシサーバを採用した理由は自宅のグローバルIPが一つなので
443ポートのみでWebサービスとプロキシサービスを同時に立ち上げる必要があったためです。
(ソフトバンクのWebサービスはhttpは80のみ、httpsは443ポート以外アクセスできない)
検証にはCgiが稼動するWebサーバが必要なのでお手数をかけてしまいますが、私の運用している
サーバでよければ検証スペースも用意できますので何卒対応をお願いいたします。

あと別の案件になりますが、受信メールアドレスをPinkのリクエストのためだけに使うのは
勿体無いので本文か件名に特定の文字を指定したときだけメールを認識させることは可能でしょうか。
具体的にはメールの件名に"PINK"、本文が空の場合(iniで変更可?)のみPINKはそのメールを
サーバーから受信・削除して接続待機状態になるという動作です。それが可能になると、
既存のメールアドレスをPINKに使いまわしができるので助かります。
(現在だと携帯から届いたメールはPINKが片っ端から受信して削除してしまう)

以上の2件、ご対応いただければ幸いです。

ys 2007/09/07(金) 12:03:34
書き忘れていたことがありましたので追加投稿させていただきます。
プロキシを介すると画像は読込不良になってしまうと書きましたが、実は読み込める場合もありますし、
読込途中で切れてしまう場合もあります。何らかの原因で画像のサイズの取得に失敗しているのでしょうか。

なお、発生する頻度は以下のようになります。
・読込エラー 80%
・一部読込(画像切れ) 15%
・正しく表示 5%
※当然ですが、何百回もリロードを行って検証したわけではありません。

あと、iniの設定でCommand_Delayを大きくしたり小さくしたりImage_Format/JPEG_Quality/サイズを
色々変更してみましたが全く現象に変化はありませんでした。

YGG [E-Mail] [HomePage] 2007/09/09(日) 03:01:46

こんばんは。YGGです。

pink を活用してくださっているようで、大変嬉しいです。
通信経路を暗号化する工夫も素晴らしいですね。
この方法はhttpサーバの設置、cgiプロキシの設置、ゲートウェイ(プロキシ)に
なるサーバのセキュリティの確保、VPNの設置など、なかなか研究のし甲斐が
ありそうですね。大変興味深いです。

さて、まず事象についてです。
検証はしていないので想像なのですが、原因は pink がシングルスレッドで
サービスしているためだと思われます。

pink はhttpサーバとして動作するアプリケーションですが、通常のhttpサーバと
違って同時に1クライアント(しかもケータイのような非力なクライアント)からしか
アクセスされません。そのため、通常はシングルスレッドでサービスしていても
あまり影響を受けることはありません。

しかしPCやプロキシを経由したアクセスは、1つのhttpサーバに対して
静的なコンテンツのリクエストを同時に行うことがあります。
通常これは豊富な帯域を活用する有効な方法なのですが、pink においては
同時に複数のリクエストを捌くことができないため、特に画像などの大きなデータは
レスポンスに失敗する可能性があります。画像が正しく表示されたりエラーになったり
するのはこれが原因だと考えます。発生が不定なのは、 pink をインストールしている
PCの状態、pink が動作する VM の状態、ネットワーク状態、リクエストの間隔などの
複合的な要因によるものと考えています。

そもそもシングルスレッドでサービスするという設計に合理的な理由は無く、
単純に pink 作成当時の私の技術と知識が不足していただけなのですが、
作り込み自体が複数のリクエストを捌くことを前提にしていないため
改修は時間がかかると思います。
「いつ直す」とお約束はできないのですが、修正が完了しましたら是非
検証スペースをお借りして確認させて頂きたいです。

当面の対応方法についてですが、cgiの設定(または改造)でリクエストの
シリアル化が可能ならば、それで対応ができるかもしれません(勿論上記の想定が
正解だったとして、ですが)。または同一サーバに対する連続するリクエストが
あるとき、リクエストの間にwaitを入れることができれば解決するかもしれません。
# どちらの方法もcgiの性能は著しく下がると思われます


次に特定のメールだけを認識させる件ですが、現状の pink の設定でこれを
実現することはできません。技術的には比較的簡単ですし、有用そうなので
実装する方向で考えてみます。

当初の思いでは、誤認識や pink のバグ、その他不測の事態で必要なメールまで
消してしまう危険性があるため、可能な限り pink には専用のメールアドレスを
設定して欲しいと考えていました。これとの折り合いも考えつつ、実装を考えてみます。

★---------------------------------------------------------------------------------★
上記の方法でもまだ未解決の場合は、下記の「追加発言」で再度お知らせください。
解決(納得)した場合は「←解決時は質問者本人がここをチェックしてください。」に
チェックを入れ、解決した旨を投稿していただけるとありがたいです(^^
★---------------------------------------------------------------------------------★

YGG [E-Mail] [HomePage] 2007/11/03(土) 20:56:27

こんばんは。YGGです。

>ysさん
大変遅くなりましたが、解析に着手しました。
下記について情報を教えていただけないでしょうか。

・お使いの pink のバージョン
・ご自宅のWebサーバに立てているhttpサーバは何か
・Cgiタイプのプロキシサーバ(CgiProxy)の入手先(サイトのURLなど)

また、可能ならば当該事象が発生したタイミングの pink のログも頂きたいです。
解析は時間がかかるかもしれませんが、この類の問題は当方としても
解決してしまいたいと思っていますので、ご助力頂けるとありがたいです。

ys 2007/11/15(木) 18:10:05
YGG様こんばんは。

あのあとPerlやhttpdの設定をいろいろ変更してみましたが状況は変化せずでした。
そうこうしてる時にPCのHDDが飛んでしまい修復作業に追われている最中に返信を失念してしまい
返事が遅くなって申し訳ございませんでした。
しかしレスを疎かにしていた私のスレッドに真摯な対応をしていただいて言葉もありません。
もちろんできる限り協力させていただきますのでこちらこそよろしくお願いいたします。

まずPINKのバージョンですが、version 0.16.24.94(2007/04/08)つまり最新版です。
httpサーバはWinSv2003に標準装備のIIS(InternetInformationServer)6.0です。
(SSLはIIS標準のSSLプロトコルを使用しています。)なお、別ポートでhttpdを
稼動させておりますが、ヤフーからはアクセスできないため今回の件には関与させていません。
Perlは、ActivePerl v8.8.6811(perl58.dll/perl5.8.8.exe)を使用しております。
http://www.activestate.com/store/activeperl/download/
CGIはCGIProxy(nph-proxy.cgi)2.1b15を使用しておりますが、それ以外を使用しても
基本的に症状はかわらず。PINKと相性の良い別のcgiを使用しても全然かまいません。
http://www.jmarshall.com/tools/cgiproxy/

とりあえずここまでで一旦投稿させていただきます。
アクセスログは明日にでも作成してアップさせていただきます。
最後になりましたが、詳細な考察及び分かりやすい説明に感謝いたします。
お手を煩わせて恐縮ですが、お時間のあるときにでも対応をお待ちしております。

以上、よろしくお願いいたします。

ys 2007/11/17(土) 19:24:30
すみません、ログは明日か明後日くらいになりそうです。

ys [HomePage] 2007/11/20(火) 22:00:05
お待たせいたしました。とりあえずログを作成しましたのでレスします。

サイズが大きくなってしまったのでサーバにてダウンロードする形にさせていただきます。
各ログの結果は先頭に書いてありますがそれ以外に説明が必要なら都度問い合わせてください。
各種ホスト名やIPは説明文に置き換えてありますが解析に必要なら本来のログもお渡しできます。

ほかにテストしてほしいこと等ございましたら気軽にご指示ください。
以上、よろしくお願いいたします。

※実は固定IP契約ではないため、IPアドレスが変動する場合があります。
 その場合はもう一度URIを貼りますのでお手数ですが問い合わせをお願いします。

YGG [E-Mail] [HomePage] 2007/11/22(木) 01:33:55

こんばんは。YGGです。

情報及びログの提供、ありがとうございました。

本格的な解析や再現試験は休日に実施するつもりですが、ざっとログを見た限りでは
想像していたようなエラーは出ていませんでした。

当初想像していたパターンですと、ログ中に
「ファイルの送信中にクライアント側のポートがクローズしました」などの
エラーメッセージが出力されていると踏んでいたのですが、そのような動作では
ないようです。その他のエラーを示唆するような挙動も見つかりませんでした。

pink はレスポンス時の挙動についてあまり多くのバリエーションを
持っていませんが、今回の事象では pink に対する操作は一定であるにもかかわらず
タイミングによって結果が異なっています。さらにログを見る限り、
レスポンスは正常に行えているようです。
事象の発生が不安定であることから、pink そのもののトラブルなのか
proxyによるものなのかその他ネットワーク機器や環境によるものなのかが
いまひとつ掴めていないところです。

これらの動作からまた想像ですが、proxyサーバを通った pink からの
レスポンスが、複数の経路を通ったり何らかの機器から再送されたりして
クライアント(ケータイやPCのWebブラウザ)に複数回返信される、
などのネットワーク障害は考えられないでしょうか。

可能ならば、現在 pink を導入している会社PCにhttpサーバ
(BlackJumboDog http://homepage2.nifty.com/spw/software/bjd/ などの
 導入の簡単なもの)を立てて頂き、そのサーバからproxy経由で
適当なサイズの画像を含んだhtmlを取得する、という動作を
試してみて頂けないでしょうか。
これで同事象が発生すればネットワークまたはproxyの、発生しなければ pink が起因の
問題であることが切り分けられると考えます。

これとは別に、当方でも再現環境を構築して試験してみます。
結果が出ましたらまたこの場で報告致します。

YGG [E-Mail] [HomePage] 2007/11/25(日) 02:23:55

こんばんは。YGGです。

ひとまず中間報告です。
当該事象について、再現させることができました。
プロキシサーバは Vine Linux 3.2 + Apache + CGIProxy で構築しました。
VPNは用意できなかったので、プロキシ-pink間は単純にLAN内でhttp接続し、
クライアント-プロキシ間はSSL(https)としました。

進展がありましたらまたここで報告致します。

YGG [E-Mail] [HomePage] 2007/11/25(日) 15:17:31

こんにちは。YGGです。

再度中間報告です。

クライアント-プロキシ間の通信をhttpにしても事象が再現したため、
httpにて接続し、いくつか実験を行いました。

まず、プロキシ-pink間、クライアント-プロキシ間それぞれでパケットを
キャプチャして比較したところ、クライアント-プロキシ間で画像データが正しい
httpレスポンスになっていないことが判りました。
このことから、エラーを発生させる直接の原因(データを破壊している犯人)は
プロキシであると考えられます。

次に pink の代わりにhttpサーバ(BlackJumboDog)を設置し、 pink 相当の
htmlを作成して同様の操作を行ったところ異常は発生しませんでした。
また、プロキシサーバを経由せずにクライアントから直接 pink に接続した場合も
レスポンスの破壊は発生しませんでした。
このことからこの事象はネットワークなどの問題ではなく、
pink とプロキシの組み合わせで発生すると考えられます。

さらに pink から画像データのみを取得してみたところ、直接 pink に接続する場合は
メッセージヘッダの Content-Length で示された通りのサイズでメッセージボディが
返されていますが、プロキシ経由だとメッセージボディが
壊れた(一部が欠けている)状態になるようです。

以上の結果から、pink のレスポンスの返し方が何か間違っており、プロキシが
レスポンスを正しく解釈できないためこれを壊してしまい、結果クライアントにも
正しくないレスポンスを返しているのではないかと考えています。

今後の進め方ですが、pink が RFC に準拠しているか(というか実際、
あまり従っていないのですが)、httpより下位のレイヤーについても
適切な実装になっているかを pink のソース及び CGIProxy のソースから
調べていこうと考えています。

YGG [E-Mail] [HomePage] 2007/11/27(火) 01:21:07

こんばんは。YGGです。

修正版モジュールを作成しました。
再現環境での動作確認と簡単な試験、1日程度の連続運転試験は行いました。
現在ご利用の pink.jar と差し替えて試してみてください。

http://www5d.biglobe.ne.jp/~yggsoft/software/pink0test.zip


YGG [E-Mail] [HomePage] 2008/01/23(水) 17:35:57

こんばんは。YGGです。

大変お待たせ致しました。
本問題を改修したバージョン「0.16.31.106」をリリースしましたのでお試しください。

また、ご要望にあったキーワードの入っているメールだけを pink に
認識させる機能ですが、今回は取り込んでおりません。理由は設定が難解/複雑に
なるという懸念と、やはり当初からの思いで可能な限り pink には
専用のメールアドレスを設定して欲しいと考えているためです。
将来的には実装したいと考えていますが、時期はまだ未定です。

★---------------------------------------------------------------------------------★
上記の方法でもまだ未解決の場合は、下記の「追加発言」で再度お知らせください。
解決(納得)した場合は「←解決時は質問者本人がここをチェックしてください。」に
チェックを入れ、解決した旨や解決方法などを投稿していただけるとありがたいです(^^
★---------------------------------------------------------------------------------★

ys 2008/02/05(火) 09:11:48
[[解決]]
YGG様 こんにちは。

またまたPCが不調になったり仕事が忙しくなったりと(本当に言い訳ですが)返信が滞ってて本当にすみませんでした。

たった今動作確認してみましたところ問題の件は完全に解消されており動作は完璧です。今回はソフトウェアの解析・修正作業にはかなりの時間を要したと思います。本当に手間を取らせて申し訳ございませんでした。

便乗案件(フィルタの実装)についてはPINKの開発ポリシーに従いますので今回の件はこれで解決とさせていただきます。長々とお付き合いいただき感謝しきりです。また、結局あまり協力できなくて本当に申し訳ございませんでした。

改めて有用なソフトをありがとうございます。これからも利用させていただきますのでよろしくお願いいたします。

追加発言
■ お名前(ペンネーム可)
  
■ メールアドレス(省略可、半角で入力)
  
■ ホームページアドレス(省略可、半角で入力)
  
■ 発言(エラー時再送信禁止)
  ←解決時は質問者本人がここをチェックしてください。
  
  

WwwLounge Ver2.16