人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

?事象
1つのURLに対して2つのIPアドレスをDNSサーバに登録し、httpsでURLに対して
アクセスすると、一部のフレームがタイムアウトする。

?構成
構成図
PC---モデム----LB---Webサーバ1
Webサーバ2
Webサーバ3
Webサーバ4

PCのOS:Windows7、IE8.0
URL:www.test.jp
IPアドレス:1.1.1.1、2.2.2.2
※1.1.1.1はLBのVIP?、2.2.2.2はLBのVIP?
LB:VIP?、?にWebサーバ1?4を組み込み。
Webサーバ1?4に対してラウンドロビンで振り分け。
Webサーバ:各サーバは単体で通信を処理。セッション動機は実施していない。

?質問事項
1.PCでhttpsの通信をキャプチャーすると、1回のアクセスでVIP?に行ったり
VIP?へ行ったりしております。
例えばVIP?のIPアドレスでhttpsの認証が完了した後に実施する5分間程度の通信内
で突然VIP?のIPアドレスを使用して通信することがありえるのでしょうか。
もしあるならトリガーをご教授頂きたく存じます。
以上よろしくお願い致します。


●質問者: hiroshit1234
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● JULY
ベストアンサー

1.PCでhttpsの通信をキャプチャーすると、1回のアクセスでVIP?に行ったり

VIP?へ行ったりしております。

例えばVIP?のIPアドレスでhttpsの認証が完了した後に実施する5分間程度の通信内

で突然VIP?のIPアドレスを使用して通信することがありえるのでしょうか。

普通に考えると、ちょっとあり得ません。


というのは、最近のアプリケーションの場合、名前解決の結果からどの IP アドレスを選択するかは、アプリケーション側の問題になるからです。


実際のアプリケーション側の作りとして、名前解決の部分は、古くは gethostbyname() というインタフェースが使われていましたが、この gethostbyname() では IPv6 に対応できないため、getaddrinfo() というインタフェースを使うようになってきています。


この getaddrinfo() の場合、IPv4、IPv6 を含めて、候補となる IP アドレスのリストが返ってきます。対応するアドレスが1つしか返ってこない gethostbyname() との大きな違いになります。


で、このリストの順序が RFC 3484 に従ってソートされるので、以前のような DNS によるラウンドロビンが有効ではない、という話があります。以前であれば、アプリケーション側は gethostbyname() の結果を使っていれば、結果的にラウンドロビンされていたのが、IPv6 に対応しようとすると、アプリケーションが対応しない限り、RFC 3484 の結果の順序で先になるアドレスが優先されることになります。この辺の話は、手前味噌ですが、以前にちょっと調べて書いたことがあります。

DNS でラウンドロビンは当てにならない。 - JULYの日記


ということで、途中で IP アドレスが変わるのは、OS 側の問題ではなく、意図的にアプリケーション側が変更しないと変わらないと考えられます。


パケットキャプチャをしているという事なので、その結果に関してちょっと確認してもらいたいのですが、IP アドレスが変わる時は、新たなコネクションが始まっている、つまり、TCP の 3 way handshake が開始されてますか? もし、3 way handshake が無く、TCP の通信として「途中」のパケットが送らているとしたら、かなり異常な現象で、私には理解できない現象になります。もちろん、そのパケットキャプチャは、すでにコネクションが張られていない、クリーンな状態から始めていることが前提です。


もし、新たな TCP 接続が別の IP アドレスとして始まっている場合、実は HTTP の中身で、直接 IP アドレスが書かれている URL が指定されていたりしてませんでしょうか? SSL/TLS 化した場合、普通にキャプチャすると中身が分かりませんが、wireshark の場合、サーバ側の秘密鍵を読み込ませて、中身を見る事ができます。


CTX116872 - WiresharkでSSL/TLSトラフィックを解読する方法 - Citrix Knowledge Center


もし、IP アドレスが変わるタイミングがいつも同じなら、この可能性が高いと思います。


もし、新たな TCP のコネクションが発生している訳でもなく、かつ、PC 側のポート番号が同じだとしたら... かなり謎です。PC 側のポート番号が違っていれば、3 way handshake を見逃しているか、キャプチャを始めた時点ではすでにコネクションが成立していた可能性が高いのですが...。


余談になりますが、はじめに書いたとおり、単純に複数のレコードを記述しただけの DNS によるラウンドロビンは、現在はあまり期待できません。DNS 側が対応(問い合わせごとに応答を変えるような仕掛)か、ロードバランサ同士でのクラスタ構成のような物が必要になると思います。アプリケーションによっては、条件によって、旧来のラウンドロビンと同様の動作をする場合もありますが、今後、IPv6 が普及し始めると、アドレスの優先順位は複雑になるので、アプリケーション側による旧来のラウンドロビンに期待するのは難しいと思います。

◎質問者からの返答

ご丁寧な返信ありがとうございます。

JULYさんの日記は読んでいたので本人様からコメント頂けるなんて感激です^^

ご質問の件、下記に回答します。

・TCPの3WayハンドシェイクがFinで終了してから異なるIPアドレスでの通信が始まる

可能性として一番高いのはhtmlのファイルに直接IPアドレスが記載されている

ファイルが存在するのでは、とのことですね。

こちらに関してお客様に確認してみます。

事象の詳細は

1.httpsでIEよりURLへアクセス

2.Topページよりログイン(3フレームに分割された画面が表示される)

3.その内1フレーム内のメニューURLをクリック

4.メニューの選択結果が表示されるはずのフレームに

「タイムアウトが発生しました」と表示される

となっております。

上記動作を実施したときに、2を実施して時間を空けて(1?30分程度)

3を行ったときはhttpsのコネクションがタイムアウトして

ラウンドロビンで異なるIPアドレスで再度コネクションを張りに行く、

ということは考えられますでしょうか。

2.のログインしたときの振り分けサーバがWebサーバ#1で、3.のメニューを

クリックするときの振り分けサーバがWebサーバ#2だった場合、このような

現象が起こりうるのかと考えております。

一度認証したhttpsのコネクションの保持時間はWindows7・Apacheで

決まっているのでしょうか。

※LBのセッションテーブルの保持時間は25分で設定してます

とりとめない質問で申し訳ないですが、お助け頂けると助かります。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ