私は、HAproxy の負荷分散ラボをシングルアーム モード (実際のフロントエンド IP とバックエンド サーバーが同じサブネットにあり、実際のクライアントが常にリモートである場合) でセットアップしようとしています。もう 1 つの要求は、クライアント ソース IP をバックエンド ノードに表示することです。カスタム TCP ベースのアプリを負荷分散するため、オプション 'source 0.0.0.0 usesrc clientip' が適切な選択であると思われます。また、バックエンドを構成して、HAproxy の IP アドレスを指すデフォルト ゲートウェイを持つようにしました。
ただし、このバックエンド オプションを有効にすると、奇妙なことが起こります。フロントエンド VIP への接続が適切に行われ、3 ウェイ ハンドシェイクが形成されたことがわかります。しかし、HAproxy サーバーがクライアントの偽装 IP を使用してバックエンド サーバーにアクセスするために 2 番目のセッションを構築しようとすると、まさに次のことが発生します。
- プロキシは、偽装されたクライアントの IP アドレスを含む SYN をバックエンドの 1 つに送信しています。
- バックエンドは通常、SYN-ACK パケットで応答します。
- プロキシは最後の ACK を送信せず、タイムアウト後に SYN パケットを盲目的に送信して同じ結果になります。
- プロキシでは、この接続が netstat 出力で SYN_SENT としてマークされていることがわかります。そのため、何らかの理由でプロキシ サーバーが実際には SYN-ACK パケットを受け入れていないようです。
どのような賞賛でもいただければ幸いです。