Eu tenho uma situação em que estou tentando hospedar meu próprio servidor web porque eu preciso de algum software personalizado, incluindo telefonia, WebRTC, node.js, etc. No entanto, minha conexão de rede na cidade e país onde será hospedado , ao longo de uma linha de fibra óptica não é muito confiável (fisicamente falando - propensos a cortes - raros, mas já aconteceu algumas vezes).
Para contornar isso, pensei em ter o servidor interno acessível por dois ISPs através de duas mídias físicas diferentes e, claro, dois IPs públicos diferentes. O registrador de domínio normalmente terá apenas um IP na configuração de DNS (registro A), assim como um mecanismo de tolerância a falhas, isso não servirá para nada. Mesmo se eu fosse alterar manualmente o registro A do domínio, quando uma das conexões físicas estiver inativa, levará tempo para se propagar, sem mencionar o cache de DNS, etc. Tudo isso é básico, presumo.
Para contornar o problema descrito, posso usar um proxy reverso no servidor hospedado cujo único propósito é redirecionar as solicitações recebidas para uma determinada sessão para um endereço IP específico, como uma maneira round-robin, conforme usado em balanceamento de carga, embora tecnicamente seja o mesmo servidor com dois IPs diferentes. O registro DNS A apontará para o servidor hospedado. Se uma das conexões do ISP estiver inativa, o servidor hospedado encaminhará automaticamente apenas para o outro IP.
Eu olhei para servidores proxy reversos comuns (APache, Nginx, Squid), mas não consegui entender claramente como ele gerencia o redirecionamento a partir de uma perspectiva de sessão. Ou seja, várias solicitações na mesma sessão são redirecionadas para o mesmo IP? Servidor proxy reverso chamado Pound parece fornecer tal serviço, mas também não estou claro.
O proxy reverso controla o gerenciamento de sessões? Se não, como ele sabe que uma determinada solicitação deve ser encaminhada para o mesmo IP dentro de uma sessão? Ou isso tem mais a ver com conexão TCP, em vez de uma sessão em nível de aplicativo? Observe que, nesse uso de proxy reverso, os IPs encaminhados não estão na mesma rede local que o proxy em si, mas sim em endereços IP públicos de servidores remotos de ISPs totalmente diferentes. Talvez não importa como o servidor remoto é o mesmo no meu caso, embora com diferentes interfaces IP com endereço IP diferente. O gerenciamento de sessão cuidará de si mesmo, embora as solicitações sejam provenientes de dois IPs diferentes no mesmo servidor, na mesma sessão (resultante de uma interrupção física de um cabo a meio de uma sessão)?
Eu só preciso de um esclarecimento antes de avançar com a implementação. Ou há uma abordagem melhor para resolver esse problema? Eu acho que muitos países do terceiro mundo enfrentarão esse problema, particularmente se quiserem hospedar o node.js e os serviços de nova geração associados, internamente, e não precisarem ser muito preocupado com os problemas aqui levantados.
Em um assunto relacionado, o NAT de destino Iptables pode ser usado como um servidor proxy reverso. Essa é apenas uma questão teórica porque não poderei definir regras de IPtables no servidor compartilhado hospedado.