Os endereços IP não apontam para portas ou aplicativos. Eles apontam para máquinas (virtuais) ou contêineres ou contextos.
Um aplicativo escuta em uma porta, que pode ser (dependendo do que passar para bind
) em todos os endereços IP da máquina ou em um endereço IP. Portanto, a melhor coisa a fazer seria fazer com que seu aplicativo chame bind com o IP correto. Você pode ter dois programas diferentes ouvindo na porta 80 (por exemplo), desde que eles estejam ouvindo em um endereço IP diferente. Muitos programas permitem que você especifique o IP para escutar, por vezes, usando a sintaxe 10.0.0.1:1234
, onde 10.0.0.1 é o IP e 1234 a porta. Quando você deixa de fora o IP, o padrão é 0.0.0.0, que é todos os endereços da máquina.
Se o seu aplicativo não puder fazer isso, você poderá, como sugerem os goldilocks, contorná-lo usando o NAT. Basicamente, você tem cada aplicativo ouvir em uma porta diferente, por exemplo, 8080 e 8081. Em seguida, você configura as regras NAT para redirecionar a porta 80:
iptables -t nat -A PREROUTING -d 10.0.0.1 -p tcp --dport 80 -j DNAT --to-destination 8080
iptables -t nat -A PREROUTING -d 10.0.0.2 -p tcp --dport 80 -j DNAT --to-destination 8081
Você pode adicionar outras regras de firewall para bloquear o acesso direto às portas 8080 e 8081, é claro.
Você também pode usar o ipvs para fazer isso. Ou um servidor proxy. Existem provavelmente várias outras maneiras.