Servidor Web por trás do NAT, como escutar o endereço IP público

Servidor Web por trás do NAT, como escutar o endereço IP público

Eu tenho um servidor web debian (nginx) rodando atrás de um firewall usando NAT. O servidor web hospeda vários sites que requerem SSL e seu próprio endereço IP. Gostaria que os sites SSL ouvissem apenas o endereço IP específico e os sites compartilhados ouvissem apenas o IP compartilhado.

No momento, estou ouvindo um curinga * para todos os domínios, o que, presumo, significa que ele está ouvindo um único endereço LAN e servindo o conteúdo do site com base no nome do host e não no endereço IP. Eu gostaria de corrigir isso.

Qual é o curso de ação adequado? É para criar um NAT 1:1 para cada endereço IP e adicionar os IPs da LAN à interface de rede para escutar e, em seguida, atribuir os IPs da LAN a domínios específicos? Ou há um jeito melhor? Existe alguma maneira de repassar o IP público e agir com base nele? Obrigado.

Responder1

Não, você não pode passar pelo endereço IP de destino original depois de fazer o NAT, pelo menos não diretamente.

Usarei 192.0.2.0/24 como seu bloco IP externo e 198.51.100.0/24 como seu bloco interno (consulte RFC5737).

Algumas coisas que você pode fazer incluem:

  • NAT as portas de destino em cada IP externo para um conjunto diferente de portas no IP interno. Por exemplo, NAT 192.0.2.1:80 e 192.0.2.1:443 a 198.51.100.1:80 e 198.51.100.1:443 e, em seguida, NAT 192.0.2.2:80 e 192.0.2.2:443 a 198.51.100.1:81 e 198 .51 .100.1:444. Configure o servidor da web para escutar nas portas diferenciadas os serviços apropriados. Certifique-se de escolher portas que não estão em uso para mais nada e verifique as configurações do firewall.
  • Aloque IPs internos adicionais para o servidor web. Por exemplo, aloque o servidor web 198.51.100.1 e 198.51.100.2. NAT os pares IP/porta externos apropriados para os pares IP/porta internos correspondentes (por exemplo, 192.0.2.1 a 198.51.100.1 e 192.0.2.2 a 198.51.100.2). Direcione o nginx para vincular os serviços apropriados aos IPs internos apropriados.

Se você optar pela última solução, seu ambiente será mais simples e mais compatível com os padrões, porque você não lidará com números de porta incomuns e tradução de portas, mas precisará alocar vários IPs internos para cada servidor da Web (suponho que você tenha apenas um). Além disso, se você usar a última solução, poderá usar NAT 1:1.

Dito isto, se você não tiver nenhum motivo para colocar o servidor web atrás de um NAT (NAT não é um firewall), apenas escute os IPs externos (isso também exigiria uma mudança de topologia).

Responder2

Parece que você deseja um endereço IP público diferente para cada um dos sites. Isso significa que o firewall deve apresentar os diferentes endereços IP públicos. O firewall pode então encaminhar as solicitações para diferentes endereços IP para o servidor nginx ou encaminhar essas solicitações para portas diferentes no mesmo endereço IP. Você pode então fazer com que o servidor nginx responda adequadamente.

Exatamente como você configura isso depende do seu firewall. Por exemplo, usando iptables, você poderia fazer algo assim em um script:

KINCAID=192.168.1.112
EXTIPJMN=50.60.70.80
iptables -t nat -A PREROUTING -d $EXTIPJMN -p tcp -i $EXT --dport 8081 -j DNAT --to-destination $KINCAID:8080

Isso encaminharia solicitações provenientes do endereço IP EXTIPJMN (50.60.70.80) e da porta 8081 para o seu servidor interno no endereço IP KINCAID (192.168.1.112) e porta 8080

É possível servir sites diferentes a partir do mesmo endereço IP, mesmo através de https, e isso é suportado pela maioria dos clientes modernos, mas não por todos.

informação relacionada