Estou criando um aplicativo da web (Servidor A) que se comunica com um servidor remoto (Servidor B) conectado à Internet.
O servidor B fica atrás de um NAT e está ouvindo a comunicação em três portas não padrão.
Em um cenário típico, para implantar vários servidores remotos em diferentes redes e fazer com que ele se comunique com o aplicativo Web pai (Servidor A), cada um desses servidores precisa ter os roteadores configurados manualmente para encaminhar os respectivos servidores. portas para um ip estático no qual o Servidor B está configurado.
Estou procurando uma maneira de resolver esse problema de ter que configurar cada roteador individualmente e manualmente para cada implantação. O encaminhamento de porta deve ser feito porque o Servidor A precisa se comunicar com o Servidor B e precisa iniciar a conversa.
Estou perguntando se existe uma maneira de o Servidor B iniciar a comunicação, e não o contrário, para que o encaminhamento de porta não precise ocorrer.
O servidor B só precisaria chamar de casa, abrir o que sempre sockets / portas necessariamente (é aqui que eu preciso da sua ajuda para obter informações) e toda a comunicação seria feita através dessas portas abertas sem que o Server A precisasse saber o ip do Servidor B, e ter que falar com o roteador para lidar com o encaminhamento.
Este cenário é possível?
Editar:
Adicionou mais alguns detalhes:
Basicamente eu criei um webapp (Servidor A) que fala com vários servidores de impressão 3D que tem uma API REST exposta. Os servidores de API do servidor de impressão estão todos escutando em uma porta não padrão de 8721.
Agora, manualmente no meu webapp eu estou configurando manualmente para apontar para cada servidor de impressão através do seu endereço IP externo e porta encaminhada pela porta. Como você provavelmente pode dizer, isso criará um monte de problemas, já que a maioria desses endereços IP externos vai mudar devido à maioria das redes domésticas / consumidoras que não possuem um IP estático.
Isso significa que tenho que descobrir toda vez que o endereço IP é alterado e modificar manualmente meus registros na minha webapp.
Eu imagino (e suponho) que uma das melhores maneiras de resolver isso é não deixar o webapp se preocupar com onde cada um desses servidores de impressão está localizado, mas deixar que os próprios servidores de impressão digam ao servidor onde eles estão.
Estou tentando resolver 2 problemas:
- Os endereços IP externos são dinâmicos e não estáticos (como mencionado acima)
- Encaminhamento de porta / firewall imposto pelas redes domésticas. No caso de haver vários servidores de impressão em uma rede doméstica, isso significa que, para alcançar cada servidor individualmente, o roteador doméstico precisa saber como rotear cada porta exclusiva que precisa ser configurada no aplicativo Web e no roteador doméstico. lado do servidor de impressão correto (já que todos eles estão ouvindo em 8721).
Desculpe pelo longo post. Eu ainda sou relativamente novo em toda parte de programação de socket e espero que alguém seja capaz de me indicar onde eu deveria procurar mais informações sobre como fazer o que foi dito acima.