Isso pode ser feito para HTTP e HTTPS com um "proxy reverso" que examina as informações do cabeçalho do host em uma solicitação HTTP, obtém o conteúdo apropriado e o retorna. O ISA (Internet Security and Acceleration) da Microsoft pode fazer isso, assim pode apache / squid no Linux.
Para todas as outras portas, você tem mais dificuldade, porque a maioria do tráfego não inclui o nome do host desejado, apenas um IP de destino (por exemplo: "Eu quero SSH para 1.2.3.4" em vez de "Eu quero SSH para host1" .mydomain.com)
O mapeamento de portas externas específicas para portas internas é fácil (porta 22 - > host1: 22, porta 23 para host2: 22, porta 24 - > host3: 22 etc) e às vezes é tudo o que é necessário.
Se você realmente precisar mapear todas as portas para diferentes servidores internos, precisará de vários endereços IP externos, o que a maioria dos ISPs pode fornecer (pelo menos se você tiver uma conexão comercial)