受信パケットが実行中のサービスに到達する前に、その送信元 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