(Linux) Vários processos podem ser ligados à mesma porta TCP em uma base por uso?

3

Como parte de um projeto piloto, estou tentando configurar um ambiente de thin client para uma equipe de desenvolvedores usando o NoMachine. Cada desenvolvedor fará o login na mesma caixa do Linux e fará o desenvolvimento através de uma sessão X. Atualmente, cada desenvolvedor executa seu próprio daemon HTTP em sua estação de trabalho local que atende em 127.0.0.1:5000. No entanto, se eu mover todos para a mesma máquina, isso obviamente cria um problema com conflitos de portas.

Idealmente, gostaria de manter o fluxo de trabalho igual. Se eu tiver que atribuir a todos uma porta única, isso criará muita dor e confusão. Existe uma maneira de fazer isso? Podem processos diferentes se ligarem à mesma porta por usuário? Eu descobri uma maneira de usar o iptables para fazer o redirecionamento de porta por usuário, mas isso resolve apenas parte do problema:

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

Esta solução ainda não permite que diferentes processos se liguem à mesma porta. E eu nem tenho certeza de que estou no caminho certo aqui procurando por uma solução de iptables. Alguma sugestão? Existe talvez um hack que seja aplicado na userland? Obrigado!

    
por jamieb 09.10.2011 / 05:30

4 respostas

3

Eles não podem se ligar à mesma porta.

Vincule cada processo à sua própria porta e despache a porta INPUT 5000 para 5001, 5002, 5003, dependendo de suas condições.

    
por 09.10.2011 / 05:40
1

Endereços do servidor TCP

O endereço de um servidor TCP de escuta consiste em (IP, porta) (para IP em IPv4 ou IPv6), onde o IP pode ser o curinga IP "*", ou seja, o endereço 0.

Um cliente TCP se conectará a um par específico (server_IP, server_port) (nenhum curinga aqui). Deve haver exatamente um soquete de escuta com:

  • este endereço exato (server_IP, server_port)
  • ou o IP do curinga e a mesma porta; ou seja, o socket de escuta terá o endereço (0, server_port)

A pilha TCP não quer ter que fazer escolhas arbitrárias entre soquetes, por isso não permitirá a criação de dois soquetes TCP de escuta diferentes ao mesmo tempo, o que poderia aceitar a mesma tentativa de conexão de um cliente TCP.

Espaço de endereço utilizável

A boa notícia é que o espaço para IPv4 endereços de host local é muito grande: exatamente 2 24 - 2 = ** 16777214 diferentes endereços IPv4 são reservados para este trabalho , de 127.0.0.1 para 127.255.255.254.

    
por 09.10.2011 / 06:01
1

Quantos desenvolvedores de pessoas você tem? Se não são muitos, que tal configurar o KVM (ou Xen / VMware) no servidor e fazer com que usem sua própria máquina virtual (cada um com seu próprio IP, é claro).

    
por 09.10.2011 / 06:22
0

Você pode usar um IP diferente para cada usuário. A maioria dos programas permite ligar diferentes IPs na mesma porta. Você precisará adicionar esses IPs a uma interface de rede.

    
por 09.10.2011 / 05:42