IPTABLES:ローカルでパケットを処理し、コピーを別のホストに送信します。

IPTABLES:ローカルでパケットを処理し、コピーを別のホストに送信します。

これを行うためにiptablesを設定するのに問題があります。一部のクライアントはサーバーにメッセージを送信します。ホストサーバーはメッセージをローカル(通常はホストA)として処理したいが、追加で各メッセージ(tcpパケット)に対してパケットコピーを別のホスト(変更されたバージョンのサーバーを実行しているホストB)に送信し、2つのサーバーを比較します。同じメッセージがどのように機能するかを確認したいと思います。)これはiptablesを使用して行う必要があります。次のコマンドを試しました。これらはBにパケットを送信しますが、ホストAはメッセージを処理しません(2番目のコマンドで実行する必要がありますか?)。

iptables -t nat -A PREROUTING -p tcp --dport 31090 -j DNAT --to-destination IP_HOST_B:32090
iptables -t nat -A POSTROUTING -p tcp --dport 32090 -j SNAT --to-source IP_HOST_A:31090

私の目標を達成するために私の構成から欠けているものは何ですか?

ありがとうございます。

ベストアンサー1

いくつかの注意:

  • SNATは、説明に記載されている方法では機能しません。 SNAT は送信元 IP を交換しますが、宛先 IP は変更しません。パケットが2つのルールを通過した後、次の結果が発生します。
    • ソース: IP_HOST_A:31090
    • 宛先: IP_HOST_B:32090
  • DNAT または SNAT 宛先の両方でパケットをコピーできません。

パケットをコピーするには、TEE 宛先を使用できます。 cf man iptables-extensions:

ティー

   The TEE target will clone a packet and redirect this clone
   to another machine on the local network segment. In  other
   words, the nexthop must be the target, or you will have to
   configure the nexthop to forward it further if so desired.

   --gateway ipaddr
          Send the cloned packet to the host reachable at the
          given  IP  address.  Use of 0.0.0.0 (for IPv4 pack‐
          ets) or :: (IPv6) is invalid.

あなたの場合は、以下が提供されます。

iptables -t mangle -A POSTROUTING -p tcp --dport 31900 -j TEE --gateway IP_HOST_B

ただし、TCPが使用されるため、このパケット複製がお客様のケースに適しているかどうか疑問に思われます。 TCPは、クライアントとサーバー間の接続を確立するように設計されています。ここでは、1つのクライアントと2つのサーバーの状況があります。問題があるでしょう。

おすすめ記事