Linux VMの異なる名前空間でTCPアプリケーションで同じポートを再利用する

Linux VMの異なる名前空間でTCPアプリケーションで同じポートを再利用する

2つのインターフェースを持つLinux仮想マシンがあり、eth0にはmgmt IPがあり、eth1は次のように構成されています。 ip netns exec eng51 ifconfig eth1.51 Link encap:Ethernet HWaddr 52:54:00:bd:68:c3 inet addr:51.51 .1.10 非キャスト: 51.51.1.255 マスク: 255.255.25.

ip netns exec eng52 ifconfig eth1.52 リンク encap: イーサネット HWaddr 52:54:00:bd:68:c3 inet addr:51.51.2.10 ブロードキャスト: 51.51.2.255 マスク: 255.255.255

ip netns exec eng522 ifconfig eth1.522 リンク encap: イーサネット HWaddr 52:54:00:bd:68:c3 inet addr:51.51.2.10 ブロードキャスト: 51.51.2.255 マスク: 255.205.25

ip netns exec eng511 ifconfig eth1.511 リンク encap: イーサネット HWaddr 52:54:00:bd:68:c3 inet addr:51.51.1.10 ブロードキャスト: 51.51.1.255 マスク: 255.205.25

したがって、TCPプロトコルを使用するスクリプトがあり、同時にトラフィックを送信する必要があります。

eng51 [51.51.1.10 vlan-id 51]からeng52 [51.51.2.10 vlan-id 52]まで同じスクリプトを使用してeng52 [51.51.1.10 vlan-id 511]からeng522 [51.51.2.12 vlan-

私は別の名前空間でスクリプトを実行しています。

client.pyの内部では、ソースポートを常に63999にバインドし、名前空間eng52およびeng522 sock.bind(('0.0.0.0',63999))に対してポート8000​​で実行されるHTTPserverを持っています。

送信元ポートを63999にバインドした理由は、両方のトラフィックセッションで送信元アドレス、宛先、アドレス、送信元ポート、宛先ポート、およびプロトコルが同じである必要があるためです。

私が直面している問題は、別の名前空間でこのスクリプトを実行してもソースポートが一意であるとは見なされないことです。 [同じポート63999を使用しているため]同時に他の名前空間でスクリプトを実行することはできません。

答え1

だから私は単純に複数のインターフェイスを使って仮想マシンの各インターフェイスを名前空間にマッピングすることでこれを達成しました。その後、同時に2つの同時セッションでソースポート63999を使用できます。

ip netns eng51 ifconfig eth1.51 link encap: Ethernet HWaddr 52:54:00:bd:68:c3 inet addr:51.51.1.10 ブロードキャスト: 51.51.1.255 マスク: 255.255.255.0

ip netns exec eng52 ifconfig eth2.52 リンク encap: イーサネット HWaddr 52:54:00:bd:68:c3 inet addr:51.51.2.10 ブロードキャスト: 51.51.2.255 マスク: 255.255.255

ip netns exec eng522 ifconfig eth3.522 リンク encap: イーサネット HWaddr 52:54:00:bd:68:c3 inet addr:51.51.2.10 ブロードキャスト: 51.51.2.255 マスク: 255.205.2

ip netns exec eng511 ifconfig eth4.511 リンク encap: イーサネット HWaddr 52:54:00:bd:68:c3 inet addr:51.51.1.10 ブロードキャスト: 51.51.1.255 マスク: 255.205.25

関連情報