受信パケットの送信元IPを変更する

受信パケットの送信元IPを変更する

受信パケットが実行中のサービスに到達する前に、その送信元 IP を変更するにはどうすればよいでしょうか。

マネージャーとサーバーの 2 つのアプライアンスがあり、VPN 経由で接続され、その間に NAT があります。

マネージャーインターフェース IP: A サーバーインターフェース IP: B

マネージャーはNAT IP Yを使用してサーバーに接続し、マネージャーが接続するとサーバーはIP Xを認識します。

パケットが送信元 IP X で到着したときにそれを IP に変更するように、サーバー上で iptables を設定するにはどうすればよいでしょうか。

適切に設計されたネットワークと製品ではこれが問題にならないことはわかっていますが、ソフトウェア側で修正されるまで当面は回避策が必要です。

これまでのところ、以下の iptables ルールは役に立ちませんでした。

iptables -t nat -A POSTROUTING -s <X> -o eth0 -j SNAT --to <A>

ご協力いただければ幸いです。

答え1

NATは「要求」されたサービスに依存しますiptablesそして、接続トラックサブシステム。SNATはルーティング決定が行われる前には利用できませんが、パケットがホストにルーティングされるように選択された後は利用可能です。nat/入力チェーンは、マニュアルページ:

SNAT

このターゲットは、NATテーブル、POSTROUTINGおよび INPUTチェーンと、それらのチェーンからのみ呼び出されるユーザー定義チェーン。 [...]

したがって、サーバーがトラフィックを受信して​​いる限り(それ以上ルーティングしていない場合)、サーバーのIP宛先アドレス<B>のIP送信元アドレス<X>からインターフェイスを介してパケットを受信すると、eth0代わりに、次のように SNAT して送信元アドレス <A> (元の IP 送信元アドレスですが、この情報は失われます) として表示することができます。

iptables -t nat -A INPUT -s <X> -d <B> -i eth0 -j SNAT --to <A>

または、よりシンプルなバージョンを使用します。

iptables -t nat -A INPUT -s <X> -j SNAT --to <A>

(実際に到達したサービスの場合は XXXX)などの制限を追加することもできます-p tcp --dport XXXXし、おそらくそうすべきでしょう。以下に説明する問題が発生した場合は、VPN 経由でシステムにアクセスできなくなる可能性があります。バックアップ アクセス方法を用意するか、確実でない限りリモートでアクセスしないでください。

上記のルールは、ルーティングのせいで十分ではないかもしれません。IPアドレス<A>がサーバーへの既知のルート上にない場合(サーバーにデフォルトルート)。システムはこの宛先にパケット (IP または ARP) を返送することはありません (応答は SNAT されません) が、SNAT が発生したことを認識しないルーティング スタックによる正しい処理には、この宛先へのルートが必要です。

だから、もしiptables上記のルールだけでは不十分な場合は (おそらくサーバーにデフォルト ルートがない場合)、以下を追加できます。

  ip route add <A>/32 dev eth0

関連情報