(Linux)可以将多个进程绑定到同一个TCP端口上吗?

作为试验项目的一部分,我正在尝试为使用NoMachine的开发团队设置瘦客户端环境。 每个开发人员都将login到同一个Linux机器上,并通过X会话进行开发。 目前,每个开发人员在他们的本地工作站上运行他们自己的HTTP守护进程,在127.0.0.1:5000上侦听。 但是,如果我把每个人都搬到同一台机器上,这显然会造成港口冲突的问题。

理想情况下,我想保持他们的工作stream程相同。 如果我不得不为每个人分配一个独特的端口,这只会造成很多的悲伤和困惑。 有没有办法做到这一点? 不同的进程可以在每个用户的基础上绑定到相同的端口吗? 我发现了一种方法来使用iptables做每个用户的端口redirect,但这只能解决部分问题:

iptables -t nat -I OUTPUT --src 0/0 --dst 127.0.0.1 -p tcp --dport 5000 -m owner --uid-owner userA -j REDIRECT --to-ports 5001 

该解决scheme仍然不允许不同的进程绑定到相同的端口。 我甚至不知道我是通过寻找一个iptables解决scheme来find正确的方向。 有什么build议么? 有没有可能在用户级应用的黑客? 谢谢!

他们不能绑定到同一个端口。

将每个进程绑定到自己的端口,然后根据您的条件将INPUT端口5000分派到5001,5002,5003。

TCP服务器地址

侦听的TCP服务器地址由(IP,端口) (对于IPv4或IPv6中的IP)组成,其中IP可以是通配符IP“*”,即地址0。

TCP客户端将连接到特定的(server_IP,server_port)对 (这里没有通配符)。 一定有一个监听套接字

  • 确切的(server_IP,server_port)地址
  • 或通配符IP,以及相同的端口; 即侦听套接字将具有地址(0,server_port)

TCP堆栈不希望在套接字之间进行任意的select,所以它不会允许同时创build两个不同的侦听TCP套接字,它们可以接受来自TCP客户端的相同的连接尝试。

可用的地址空间

好的新function是,IPv4 本地主机地址的空间非常大:正好有2 24 – 2 = ** 16777214个不同的IPv4地址被保留给这个作业 ,从127.0.0.1到127.255.255.254。

您可以为每个用户使用不同的IP。 大多数程序允许绑定在同一端口上的不同IP上。 您将需要将这些IP添加到networking接口。

你有几个开发人员? 如果不是那么多,那么在服务器上设置KVM(或Xen / VMware),让他们使用自己的虚拟机(当然每个都有自己的IP)。