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

1

Eu tenho um servidor web debian (nginx) rodando atrás de um firewall usando NAT. O servidor da web está hospedando vários sites que exigem SSL e seu próprio endereço IP. Eu 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 caractere curinga * para todos os domínios, o que, presumo, significa que ele está ouvindo um único endereço da 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 correto de ação? É 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á uma maneira melhor? Existe alguma maneira de transmitir o IP público e agir com base nisso? Obrigado.

    
por Matt Mombrea 03.09.2013 / 21:29

2 respostas

3

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

Vou usar 192.0.2.0/24 como seu bloco de IP externo e 198.51.100.0/24 como seu interno (veja 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 depois 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 pelos serviços apropriados. Certifique-se de escolher as portas que não estão em uso para mais nada e verifique as configurações do seu firewall.
  • Aloque IPs adicionais dentro do servidor da web. Por exemplo, aloque o servidor da web 198.51.100.1 e 198.51.100.2. NAT pares de IP / portas externos apropriados para os correspondentes pares IP / porta internos (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 ligar os serviços apropriados aos IPs internos apropriados.

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

Dito isto, se você não tem qualquer razão para colocar o servidor web atrás de um NAT (NAT não é um firewall), apenas ouça os IPs externos (isso também exigiria uma mudança de topologia). / p>     

por 03.09.2013 / 21:51
2

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

Exatamente como você configura isso depende do seu firewall. Por exemplo, usando o 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 as solicitações recebidas no endereço IP EXTIPJMN (50.60.70.80) e a porta 8081 para o servidor interno no endereço IP KINCAID (192.168.1.112) e na porta 8080

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

    
por 03.09.2013 / 21:51