Windows 2008 Serverでのデッドゲートウェイの検出


9

私たちは最近、stackoverflow.comにHAProxyを実装しました。TProxyを使用して、接続するクライアントのソースアドレスを維持することを決定したため、クライアントのIPアドレスに依存するログやその他のIISモジュールを変更する必要はありません。したがって、パケットは外部インターネットIPアドレスから送信されたかのようになりすまし、実際にはローカルネットワークのローカル192.168.xx HAProxy IPから送信されます。

どちらのウェブサーバーにも2つのNICがあります。1つは静的IP、DNS、デフォルトゲートウェイを備えたパブリックインターネット上のルーティング可能なクラスBアドレスで、もう1つはHAProxyのプライベートIPでポイントされるデフォルトゲートウェイで構成された1つのプライベートなルーティングできないクラスCアドレスです。HAProxyには2つのインターフェース(1つはパブリック、もう1つはプライベート)があり、インターフェース間でパケットを透過的にルーティングし、適切なWebサーバーにトラフィックを転送するジョブを実行します。

イーサネットアダプターインターネット:

   説明。。。。。。。。。。。:ネットワークカード#1
   DHCP有効。。。。。。。。。。。: 番号
   自動構成が有効。。。。: はい
   IPv4アドレス。。。。。。。。。。。:69.59.196.217(推奨)
   サブネットマスク 。。。。。。。。。。。:255.255.255.240
   デフォルトゲートウェイ 。。。。。。。。。:69.59.196.209
   DNSサーバー。。。。。。。。。。。:208.67.222.222
                                       208.67.220.220
   NetBIOS over Tcpip。。。。。。。。:有効

イーサネットアダプタープライベートローカル:

   説明。。。。。。。。。。。:ネットワークカード#2
   DHCP有効。。。。。。。。。。。: 番号
   自動構成が有効。。。。: はい
   IPv4アドレス。。。。。。。。。。。:192.168.0.2(推奨)
   サブネットマスク 。。。。。。。。。。。:255.255.255.0
   デフォルトゲートウェイ 。。。。。。。。。:192.168.0.50
   NetBIOS over Tcpip。。。。。。。。:有効

各Webサーバーの自動メトリックを無効にし、ルーティング可能なパブリッククラスBにメトリック10、プライベートインターフェイスにメトリック20を割り当てました。

また、これらのレジストリキーの両方を設定しました。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"DeadGWDetectDefault"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"EnableDeadGWDetect"=dword:00000000

1日に約2回、Webサーバーの1つがDNSに接続できない、またはパブリックインターネット上の他のサーバーに接続できないという問題が発生します。

デッドゲートウェイの検出により、パブリックゲートウェイの停止が誤って検出され、すべてのトラフィックが、現時点でDNSアクセスがなく、これを確認する方法がないプライベートゲートウェイに切り替えられていると考えられます。

  1. デッドゲートウェイの検出が実行されているかどうか、またはWindows 2008サーバーのオプションであるかどうかを確認する方法はありますか?

  2. もしそうなら、Windows 2008サーバーでデッドゲートウェイ検出を無効にする方法はありますか?

  3. DNSを解決できない、または短時間接続できないという他の理由がないのでしょうか。


1
この設定はときどき眉をひそめていますが(blogs.technet.com/timmcmic/archive/2009/04/26/…を参照)、私たちにとってはうまく機能しています。HAProxyからIISサイトへのすべてのトラフィックは、元のIPアドレス。これにより、HTTP_X_FORWARDED_FORヘッダーを使用するようにIISとその無数のプラグインを構成する(方法を見つける)必要があるため、時間を節約できます。
ジャロッドディクソン

1
192.168.0.2インターフェースにゲートウェイが構成されているのはなぜですか?空のデフォルトゲートウェイを構成できます(実際には、これは、2つのインターフェイスがある場合にWindowsが要求するプロンプトです)。
ポートマン、

@Portman-私たちのWebボックスは元のクライアントIPがそのままのトラフィックを参照しているため、応答はネットワークに送信されません-そのため、HAProxyボックスへのデフォルトゲートウェイが必要です。
ジャロッドディクソン

@Jarrod-その構成は疑わしいようです。そのWebサーバーでバランスのとれていないWebサイトを実行する場合はどうでしょうか。応答はHAProxy経由でルーティングされますか?リモートデスクトップのようなものをどのように処理しますか?これで問題が解決されないことに気づきましたが、daivdsmalleyが(丁寧に)言っているとおり、これは間違っているということのようです。
ポートマン

4
@ Jeff / Geoff / Jarrod-私は明白なことを述べるのは嫌いですが、あなたたちはソフトウェア開発者です。修正するための専門家である誰かに雇ってみませんか?手を汚すのはとても素晴らしいことですが、ここには明らかな知識のギャップがあり、断続的にビジネスに影響を与えており、開発であるコアスキルを活用しないでかなりの貴重な時間を費やしていることは明らかです。私を信じて、誰かに修正を依頼して、それが機能するようになったら、その人の頭脳を選んでください。地獄、ウェブホスティング業者としても、ミッションクリティカル/サービスに影響を与える場合は、これらのギャップを埋める必要があります。
Kev

回答:


5

これらのデッドゲートウェイ検出DWORDは、Windows Server 2008では役に立ちません。存在する唯一の理由は、互換性の理由です。TCP / IPドライバーとWindowsルーターコンポーネントは、これらの値を検索しなくなりました。

この機能はWindows Vistaでデビューした自動チューニングに組み込まれたのではないかと思います。管理者特権のコマンドプロンプト(および再起動)で次のコマンドを実行してください。

netsh int tcp set global autotuninglevel = disabled


更新(2009年9月13日@ 7:58PM ESTに追加

それでもうまくいかない場合は、さらに診断出力が必要になります。NetConnectionまたはLANシナリオのいずれかで(循環)トレースを開始し、問題が発生するまで実行を続けます。

netshトレース開始シナリオ= NetConnection maxSize = 512

(例:最大トレースログサイズが512MBのNetConnectionトレースシナリオを開始します)

結果のトレースをネットワークモニター3.3で開くことができます。最新のパーサーをインストールしていることを確認してください。


良いアイデアですが、どちらも機能しないようでした。発信トラフィックが5分間停止しただけで、不思議なことにそれ自体が修正されました。
Jeff Atwood、

@ジェフ:うーん、もっとデータが必要です!上記の編集を参照してください。
Rafael Rivera

5

Dead Gateway Detectionの動作を制御できなかった理由について、最終的な結果に到達できませんでした。

この問題のトラブルシューティングに多くの時間を費やすのではなく、HAProxyインスタンスがトラフィックをゲートウェイにルーティングし、両方のWebサーバーのデフォルトゲートウェイをhaproxyのIPに設定し、内部ゲートウェイアドレスを削除することを選択しました。

  [ soweb1 ] 69.59.196.220, GW=69.59.196.211 [haproxy]
       |
       +---- [haproxy] 69.59.196.211, GW 69.59.196.209
       |
    [ gw ] 69.59.196.209

これで、デフォルトゲートウェイの検出が使用されなくなったため、デフォルトゲートウェイは1つだけになり、問題が解消されます。


4

デフォルトゲートウェイをHAproxyに変更する必要があるのはなぜでしょうか。一般に、デフォルトのゲートウェイを変更しないでください。問題が発生した場合にゲートウェイIPが別のルーター/マシンにフェイルオーバーできる高可用性N + 1設定を指さない限り、変更しないでください。HAproxyマシンに何かが発生し、帯域外アクセスがなかった場合、Webサーバーはインターネットから切断されます。

これを行う理由は、セットアップでTproxyを使用して、クライアントのIPアドレスをプロキシサーバーのIPではなくログに表示するためです。代わりにこれを実行することをお勧めします

  1. HAproxy構成に「option forwardfor ...」を追加します
  2. x-forwarded-for ISAPIフィルターをインストールする
  3. セットアップからtproxyを削除します
  4. デフォルトゲートウェイを、インターネットに直接接続して以前使用していたものと同じゲートウェイに戻します。

私はこれをテストするWindowsマシンを持っていませんが、接続の望ましくない損失なしに望ましい効果が得られるはずだと思います。


この設定に関する元の質問に対するコメントを見つけただけです。ただし、サーバーがインターネット接続を失っている場合は、「私たちにとってそれは素晴らしい働きをする」とは思えません:)
davidsmalley 2009

3
あるいは、カーネルレベルでトラフィックをリダイレクトするだけのldirectord + heartbeatなど、はるかに堅牢なソリューションを検討することもできます。そのため、プロキシはまったく関与していません。私はこのセットアップを広範囲に使用しており、うまく機能します。linuxvirtualserver.org/docs/ha/heartbeat_ldirectord.html
davidsmalley 09/09/13

このx-forwarded-forヘッダーとIISフィルターを使用してログを変更する方法を検討しましたが、他のオプションのIISモジュールもその操作でヘッダーを使用する方法(またはその場合)がわかりません。
ジャロッドディクソン

そのlinuxvirtualserver.org/HighAvailability.htmlリンクをありがとう-そこにある情報は素晴らしいです!私はこれらの問題については無知です(だからこそ、私はこれをすべて設定しているわけではありません!)できるだけ早く学ぼうとしています。おそらく、linuxvirtualserver.org / docs / ha / ultramonkey.htmlがお気に入りのHAProxyでそれを行うのと同じように、heartbeat + ldirectordを使用できます。
ジャロッドディクソン

-1

インターネットアクセスが関与する場合(通常)、デフォルトゲートウェイは、インターネットへのパスを示すためにのみ使用する必要があります。複数のデフォルトゲートウェイが定義されている場合、OSルーターは使用するゲートウェイを決定できません。1つのデフォルトゲートウェイが袋小路(たとえば、マルチセグメントLAN)を指す場合、インターネットに転送されるパケットはそれを作るつもりはない。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.