在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 Bcast :51.51.1.255 掩码:255.255.255.0

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.0

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.255.255.0

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.255.255.0

所以我有一个使用 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.10 vlan-id第522章

我在不同的命名空间下运行脚本: ip netns exec eng51 python client.py 51.51.2.10 ip netns exec eng511 python client.py 51.51.2.10

在 client.py 内部,我将源端口绑定为始终 63999,并且我有一个 HTTPserver 在端口 8000 上运行,用于命名空间 eng52 和 eng522 sock.bind(('0.0.0.0',63999))

我将源端口绑定到 63999 的原因是我需要源地址、目标、地址、源端口、目标端口和协议在两个流量会话中相同

我面临的问题是,即使我在不​​同的命名空间下运行此脚本,源端口也不被认为是唯一的。我无法同时在不同的命名空间下运行脚本[由于使用相同的端口 63999]

答案1

因此,我通过简单地使用多个接口,将虚拟机的每个接口映射到一个命名空间来实现此目的。然后我可以在 2 个并发会话中同时使用源端口 63999

ip netns eng51 ifconfig eth1.51 链路 encap:以太网 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.0

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.255.255.0

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.255.255.0

相关内容