作为试点项目的一部分,我正尝试使用 NoMachine 为开发人员团队设置一个瘦客户端环境。每个开发人员都将登录到同一个 Linux 机器并通过 X 会话进行开发。目前,每个开发人员都在本地工作站上运行自己的 HTTP 守护程序,该守护程序监听 127.0.0.1:5000。但是,如果我将每个人都移动到同一台机器上,这显然会产生端口冲突问题。
理想情况下,我希望保持他们的工作流程相同。如果我必须为每个人分配一个唯一的端口,那只会造成很多麻烦和混乱。有办法吗?不同的进程可以根据每个用户绑定到同一个端口吗?我发现了一种使用 iptables 根据每个用户进行端口重定向的方法,但这只能解决部分问题:
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
此解决方案仍然不允许不同的进程绑定到同一端口。我甚至不确定我在这里寻找 iptables 解决方案是否正确。有什么建议吗?是否有可以在用户空间应用的 hack?谢谢!
答案1
它们不能绑定到同一个端口。
将每个进程绑定到它自己的端口,然后根据您的情况将 INPUT 端口 5000 调度到 5001、5002、5003。
答案2
TCP 服务器地址
这监听 TCP 服务器的地址由(IP,端口)组成(针对 IPv4 或 IPv6 中的 IP),其中 IP 可以是通配符 IP“*”,即地址 0。
TCP 客户端将连接到特定的 (server_IP, server_port) 对(这里没有通配符)。必须正好有一个监听套接字使用以下任一方式:
- 这个精确的(server_IP,server_port)地址
- 或通配符 IP 和相同端口;即监听套接字将具有地址 (0, server_port)
TCP 堆栈不希望在套接字之间做出任意选择,因此它不允许同时创建两个不同的监听 TCP 套接字来接受来自 TCP 客户端的相同连接尝试。
可用地址空间
好消息是 IPv4 的空间本地主机地址相当大:正好是 224 - 2 = **16777214 个不同的 IPv4 地址为此作业保留,从 127.0.0.1 到 127.255.255.254。
答案3
您有多少名开发人员?如果没有那么多,如何在服务器上设置 KVM(或 Xen/VMware)并让他们使用自己的虚拟机(当然,每个虚拟机都有自己的 IP)。
答案4
您可以为每个用户使用不同的 IP。大多数程序允许在同一端口上绑定不同的 IP。您需要将这些 IP 添加到网络接口。