No nível do IP, não existe um nome de host. Um nome de host é uma abstração em nível de aplicativo de um endereço IP e, nas camadas Internet ou Transporte, não tem significado.
Na hospedagem compartilhada HTTP, esse truque é abstraído no processo de manipulação da conversa HTTP , que acontece após a conversa TCP é iniciada. É por esse motivo que a execução de um servidor SSL exigiu um endereço IP dedicado por tanto tempo, pois a conversação SSL ocorre antes do HTTP (isso já foi corrigido em versões mais recentes do TLS, onde o HOSTNAME agora pode ser incluído como parte da negociação SSL ).
Para uma instância HTTP de hospedagem compartilhada, os protocolos são negociados aproximadamente nesta ordem:
TCP -> SSL -> HTTP
Cada protocolo não pode ser iniciado até que os anteriores sejam concluídos. Até recentemente, apenas a última etapa da cadeia estava ciente dos nomes de host, e por isso dependia do software servidor da Web lidar com uma associação de muitos para um dos nomes de host ao IP.
Para um encaminhamento de porta dinâmico, isso só é possível se o protocolo de aplicação estiver de alguma forma ciente dos nomes de host. Algum dispositivo (seja software ou hardware) manipula a conexão TCP inicial com clientes e as primeiras etapas do protocolo de aplicativo (seja lá o que for) e encaminha a conexão para seu destino final com base no que recebeu.
As etapas exatas necessárias variam de acordo com o próprio protocolo de aplicativo. Alguns, como HTTP, incluem um cabeçalho HOSTNAME indicando o nome do host com o qual o cliente espera estar conversando. Outros, como alguns protocolos da Microsoft, utilizam registros SRV baseados em DNS para determinar uma combinação precisa de IP e . Como parece que você pode estar projetando seu próprio protocolo de aplicação a partir dos bolts out, sugiro seguir o exemplo do HTTP e incluir um cabeçalho HOSTNAME nas etapas iniciais de negociação do protocolo.