私の問題は、Fuchsia GreenとOrangeコンピュータが実際にハードコードされた産業用システムであるため、そのコンピュータの設定を変更できないことです。
ブロックPCを追加してUDPパケットをブロックして操作する必要があります。
例 – Red PC 192.168.0.20 は、UDP パケットを Purple PC に送信します。これは実際にパケットを受信して応答する傍受コンピュータ(Ubuntu 16.04)に到達します。その後、他のメッセージを設定して紫色のPCに送信します。
問題は、ネットワークがすべて同じサブネット上にあり、転送するIPがすでにあるため、カーネルが発信するパケットを送信するNICを知らないことです。
NICSを持つために別々の名前空間を作成しようとしましたが、通信できないことに気づく前に、名前空間間でDbusを介して通信するために複数の別々のプロセスを作成しました。必要に応じてさらにハードウェアを購入できますが、この結果を得る方法についてのアドバイスを探しています。
答え1
はい、ネットワーク名前空間を使用して2つの「同じ」ネットワークを分離できます。
たとえば、右側には、3つのインターフェイスすべてが配置されているネットワーク名前空間と、トラフィックをブロックおよび転送するためのブリッジとタブがあります。ブリッジにタブと3つのNICを追加し、タブに192.168.0.10のみを割り当てます。したがって、タブだけにNICにIPが割り当てられません。ブリッジは、右側の192.168.0.10にすべてのトラフィックを転送し、そのNICを介してすべてのトラフィックを192.168.0。{20、21、22}に転送する役割を果たします。
[読み取り/書き込み]タブ(レベル2)用のインターセプタを作成し、stdin / stdout(バッファリングされていない)を介してパケットを転送します。また、stdin / stdoutパケットをTap(別のTap)に送信し、左側のグローバルネームスペースに配置する同様の単純なトランスポートプログラムを作成します。プログラムはすべてのパケットを転送し、その一部にブロックを適用する必要があります。
左側のネームスペース(グローバルネームスペース)は、ネットワークカードのブリッジとタブに合わせて配置されているため、タブにIPアドレス192.168.0。{20、21、22}がすべて追加されます。
dpipe
次に、パッケージ内のプログラムを使用するvde2
か、直接作成して2つのTapコネクタを起動してstdin / stdoutが互いに接続されるようにします。これを行うコマンドはdpipe
次のとおりです。
# dpipe program1 tap1 = ip netns exec RHS program2 tap2
その効果は、program1のstdoutがprogram2のstdinに行き、program2のstdinがprogram1のstdinに行くことです。 (説明の便宜上、理論的にはプログラムのタブ名パラメータを含めました。)
全体として、これはIP変換を中断することなく2つの名前空間間のパケットを傍受して転送する方法です。
この設定は、両側にNICがあり、右側にスイッチがある場合でもうまく機能します。したがって、2つのトリプルNICは必要ありませんが、2つだけが必要です。左側に1つ、右側に1つ、もちろん4つの物理ホストを持つ右側のネットワーク用のスイッチもあります。
答え2
コメントできないので、別の回答を追加します。私は私の経験に基づいて書いています。ネットワーク名前空間の場合、これは確かに機能しますが、普遍的な解決策はありません。したがって、要件と実際のネットワークトポロジに近いです。ほとんどの場合、これらのネットワークの初期化と構成を自動化するには、いくつかのスクリプトも必要です。
しかし、繰り返しますが、確かに可能です