pfSense + Nginxプロキシと実際のユーザーIP

pfSense + Nginxプロキシと実際のユーザーIP

さて、pfSenseを含む1つのサーバーと多くの仮想サーバーがあります。私は同じパブリックIPで複数のWebサーバーを実行するためにNginxアップストリーム機能を使用しています。もちろん、Nginxプロキシである192.168.2.2ではなく、実際のユーザーのIPを知る必要がありますが、pfSense(最近単純なコンシューマールーターがある)に切り替えた後、Webサーバーは実際のユーザーのIPを見ることができません。

システム/詳細/ファイアウォールとNATで、次のようなさまざまな設定を変更してみました。ポート転送用のNAT反射モード反射が有効な自動アウトバウンドNAT

また、ファイアウォール/ NAT /アウトバウンドですべてのモードを試しましたが、役に立ちませんでしたが、すべてのユーザーはまだ私のプロキシサーバーのIPを持っています。

それでは、マスカレーディングを無効にしたり、実際のクライアントIPを転送したりできますか?

修正する

問題はドメインではなくサブドメインにあるようです。現状:

クライアントがdomain.comにアクセスしている場合、すべてが正常であり、バックエンドサーバーは実際のクライアントIPを表示できます。

クライアントがsubdomain.domain.comにアクセスすると、バックエンドサーバーはプロキシサーバーのIPを確認します。

すべてのドメインAレコードは外部IPを指し、pfSenseはポート80をプロキシに転送し、プロキシはドメインに基づいてその内部サーバーに転送します。

2つの物理サーバーがあります。 1 つは pfSense ルーターで、もう 1 つは多くの仮想マシンを実行している virtualbox があるサーバーです。この場合、4つの仮想マシンがあります。

ここに画像の説明を入力してください。

もう一つの興味深い点は、ローカルネットワーク内で問題のあるsubdomain.domain1.comにアクセスしようとすると、次のような結果が出ることです。

ここに画像の説明を入力してください。

同様に、domain1.com、domain2.comなども問題ありません...

答え1

デフォルトでは、ポートを転送する方法は2つあります。 1つは、pfSenseが現在行っていることです(Linuxの「フル」NAT、conntrack)。クライアントが新しい接続を開始すると、pfSense は NAT テーブルに新しいマッピングを作成し、ソース出力を切り替えます。アドレスを自分のアドレスに変更し、送信元ポート(該当する場合)を変更して、変更されたパケットをWebサーバーに送信します。 Webサーバーは自動的にpfSenseシステムに応答を送信します。その後、フィールドを交換し、パケットをクライアントに送信できます。このアプローチの利点は、Webサーバーが機能するためにこれを認識する必要がないことです。私が覚えている限り、NATモードを「AON」(webserverip、targetport)に切り替えてNATを無効にすると、pfSenseでこの機能を無効にできます。

コンシューマルータは単純なポート転送(LinuxのDNAT)を実行します。つまり、パケットが到着すると、宛先アドレスを交換し、パケットをウェブサーバに送信する。パケットには実際のソースアドレスがあるので、Webサーバーはクライアントの物理アドレスを見ることができます。残念ながら、応答を送信するときは、ルータは自分の(プライベート)アドレスをソースフィールドに入力し、ルータは発信中にパブリックIP(LinuxのSNAT)と交換する必要があります。 Webサーバーはパケットをクライアントに直接アドレス指定するため、ルーターはデフォルトゲートウェイの場合にのみこれを実行できます。 (またはWebサーバーにかなりクールなルーティングポリシーを設定するとき)

答え2

問題はpfSenseやプロキシにはありません。特定のバックエンドサーバー(緑色の四角形)構成に問題があります。誤って「ヘッダーにクライアントIPを使用」オプションを無効にしました。このオプションが有効になっていて、このオプションについて知っているため、バックエンドサーバー構成エラーです。バックエンドサーバーはLitespeedです。

関連情報