Preciso configurar um servidor Linux (provavelmente CentOS) para executar uma aplicação web online.
Elementos no fluxo:
- mywebapp , acessível no URL
https://mywebapp.example.org
- thirdpartwebserv , acessível na URL
https://thirdpartwebserv.example.org
e deve ser encapsulado via VPN - user , o usuário típico do mywebapp , ele não tem VPN em seu computador, mas apenas acesso à sua conta mywebapp
- operação A que consulta thirdpartwebserv e solicita VPN
- operação B que não requer VPN e usa apenas funções mywebapp
Fluxo típico:
- acessos do usuário
https://mywebapp.example.org
- usuário realiza a operação B
- mywebapp processa a operação B
- o resultado da operação B é mostrado ao usuário .
- o usuário executa outra operação, desta vez uma operação A
- mywebapp se comunica com o thirdpartwebserv através de uma VPN, processa a operação A e retorna um resultado
- o resultado da operação A é mostrado ao usuário .
O que me interessa é permitir que qualquer pessoa tenha uma conta no mywebapp e, ao mesmo tempo, garantir o tunelamento para comunicações com thirdpartwebserv .
Posso usar o OpenVPN no servidor mywebapp para me comunicar com o servidor thirdpartwebserv protegido por VPN e obter uma infraestrutura semelhante?
O uso de VPN é ditado por thirdpartwebserv .
Sim você pode. Esta é a funcionalidade básica da VPN, que OpenVPN, WireGuard ou suspeito que qualquer VPN por aí implemente.
Coisas a considerar:
tun
modo, túnel L3, pois é mais eficiente (tem menos sobrecarga)tunX
interfaces. Normalmente, endereços RFC 1918 privados são usados para isso. Para garantir que a comunicação ocorra através do túnel VPN, seu aplicativo mywebapp deve usar o endereço IP encapsulado ou o endereço roteado através do túnel. Pode não ser o mesmo endereço público que você usará para estabelecer a VPN.Host
cabeçalhos, ou seja, ele pode não responder adequadamente se você usar um endereço IP quádruplo pontilhado para se comunicar com ele. Dado que você conhece o nome configurado no host virtual do thirdpartwebservthirdpartwebserv.example.org
que executa o serviço back-end (por exemplo , como na pergunta), pode ser necessário associar esse nome ao endereço IP do túnel usandohosts
o arquivo local. Você também pode publicar esse endereço IP encapsulado (privado) no DNS público com esse nome (sei que algumas pessoas vão discordar de mim, mas não vejo nada de errado nisso).thirdpartwebserv.example.org
que você deseja usar para VPN. Caso o servidor web interno utilize o mesmo nome para seu host virtual, você pode acabar em conflito, onde o cliente VPN tenta restabelecer a conexão através da própria conexão, o que fará com que tudo falhe. Para evitar tais conflitos de resolução de nomes, para VPN use IP público literal ou um nome de host diferente (comothirdpartvpn.example.org
) que aponte para o IP público do par VPN. (Se você publicasse um endereço privado, isso estaria fora de questão.)