Exponer varios serveres detrás de NAT mediante una única dirección IP pública

Esta es una pregunta canónica sobre NAT y DNS

Actualmente estoy intentando establecer una networking con una DMZ que contenga un server web y un server de correo electrónico separados de Internet por un firewall de traducción de la dirección de networking (NAT).

He instalado el firewall NAT con las siguientes interfaces:

WAN - xxxx (networkingacted public IP address) DMZ - 192.168.124.5/24 LAN - 192.168.123.5/24 

En mi DMZ tengo mis dos anfitriones:

 Web server - 192.168.124.30 E-mail server - 192.168.124.32 

Sé que necesitaré configurar el DNS para el dominio de example.com para resolver example.com y mail.example.com a mi dirección IP pública.

Quisiera que mi cortafuego del NAT remita todas las peticiones entrantes a example.com al server de la tela en 192.168.124.30, y todas las peticiones entrantes a mail.example.com al server del email en 192.168.124.32. Veo una característica de "reenvío de puertos" en la configuration de mi firewall NAT pero no puedo lograr lo que estoy buscando.

3 Solutions collect form web for “Exponer varios serveres detrás de NAT mediante una única dirección IP pública”

Usted está consiguiendo confuso en su pensamiento sobre cómo la información fluye entre las capas de la stack del protocolo TCP / IP – entre DNS y protocolos de la capa de la aplicación, específicamente.

Tiene una dirección IP pública. Su DNS puede ciertamente resolver tanto mail.example.com como example.com a la misma dirección IP pública.

En general, los datagtwigs IP que contienen peticiones a su dirección IP pública, que serán recibidos por la interfaz externa de su firewall, no contienen el nombre del host al que el cliente remoto está intentando acceder. Su firewall no puede "saber" mágicamente qué nombre de host el cliente remoto resolvió, ya que ambos nombres de host se resuelven con la misma dirección IP. La capa IP no tiene conocimiento del nombre de host utilizado en la capa de aplicación.

Los protocolos TCP y UDP diferencian los services específicos ofrecidos por un host utilizando numbers de puerto. En el caso de su ejemplo, puede ser posible utilizar la function de reenvío de puertos (también denominada traducción de dirección de puerto o PAT) de su firewall NAT para enviar requestes entrantes al puerto TCP 80 (HTTP) al server web mientras envía puerto TCP entrante 25 (SMTP) a su server de correo electrónico.

Sin embargo, si planea alojar el mismo service en ambas máquinas, esta estrategia se vuelve problemática. Supongamos que va a alojar un website seguro en su server web (para acceso al cliente) y un website seguro en su server de correo electrónico (para webmail). Las requestes que lleguen a la dirección IP pública de su firewall NAT al puerto TCP 443 (HTTPS) sólo se pueden encaminar a un server u otro.

La solución generalizada a esta situación es tener más direcciones IP públicas. Debido a que las direcciones IPv4 se están convirtiendo en escasos que también pueden ser problemáticos.

Terminamos trabajando alnetworkingedor de la escasez de direcciones IP públicas en algunos protocolos en la capa de aplicación. Por ejemplo, HTTP / 1.1 agregó el encabezado Host: específicamente para permitir que un server web albergue varios sitios web en la misma dirección IP pública. TLS agrega la extensión de indicación de nombre de server (SNI) para permitir la selección del certificate apropiado basado en el nombre de host introducido por el cliente remoto.

Hacer este tipo de solución en la capa de aplicación significa que cada protocolo de capa de aplicación necesitaría su propia "corrección" (y entonces todo el software del server y del cliente tendría que implementar esa "corrección"). Es una tarea difícil.

En lugar de modificar el protocolo de la capa de aplicación, algunos protocolos son fácilmente susceptibles de ser "multiplexados" entre varios hosts utilizando un software que puede "encaminar" las requestes. Esto probablemente va más allá de lo que es un firewall NAT simple porque los packages necesitan ser inspeccionados en la capa de aplicación. El uso de un proxy inverso como nginx es un buen ejemplo de este tipo de "multiplexing" (o reglas de publicación Web en Forefront TMG o ISA Server en un entorno Microsoft) para el protocolo HTTP. En teoría, cualquier protocolo podría ser multiplexado a través de un proxy inverso, pero cuanto más esotérico sea el protocolo, más probable es que esté hablando de tener código personalizado escrito.

Cuando necesita ofrecer el mismo service desde dos hosts distintos en una única dirección IP pública siempre tiene la opción de mover uno de los hosts a un puerto no estándar. Esto requerirá que los clientes sean conscientes del puerto no estándar, sin embargo. En el caso de HTTP (S) esto resulta en URL con la notación http://example.com:XXX (donde XXX es el número de puerto no estándar). Si esto sería problemático en su situación es algo que sólo usted puede decidir. (Mi experiencia ha demostrado que prácticamente ningún usuario final es capaz de manejar :XXX notación de puerto en cualquier URL que tienen que introducir a mano).

Su function de "reenvío de puertos" le permite enviar tráfico destinado a: 80 y: 443 a 192.168.124.30 y los puertos restantes (o sólo los que su server de correo electrónico está configurado para usar) a 192.168.124.32. Si por alguna razón necesitas cualquiera de esos dos puertos para el server de correo electrónico, así como para el server web, estás en problemas. Para que este método funcione, cualquier acceso web a su server de correo electrónico tendría que estar en un puerto diferente (probablemente no estándar). Probablemente también configuraría el server web para networkingirigir cualquier cosa que diga " mail.example.com " para usar https://mail.example.com : other_port en https://mail.example.com : other_port lugar, para los usuarios que no saben cómo anexar el número de puerto y / o especificar la connection segura. (Vas a utilizar sólo conexiones web seguras al server de correo, ¿verdad?)

Esto es en la capa de transporte en lugar de la capa de aplicación, lo que significa que no tiene que depender de la inspección profunda de packages. En su lugar, puede search una location fácil de encontrar en el encabezado TCP para el puerto.

Si sus "peticiones entrantes" son cosas diferentes, es decir, tráfico web (HTTP) para el server web y el tráfico de correo (SMTP) para el server de correo, de hecho puede hacerse: HTTP utiliza el puerto TCP 80 (443 para HTTPS) utiliza el puerto TCP 25; por lo tanto, desde la misma dirección IP pública, puede reenviar tráfico HTTP a su server web y tráfico SMTP a su server de correo; esto es lo que significa "reenvío de puertos". Cualquier firewall decente es capaz de esto.

Sin embargo, si por casualidad los dos serveres deben ser capaces de aceptar el mismo tipo de tráfico, fe si su server de correo también alberga un service de correo web, entonces usted está en problemas, ya que puede reenviar puertos específicos (80 y / o 443) sólo a un solo server; para separar el tráfico web basado en el nombre que el cliente utilizó para solicitarlo, necesita algo que funcione a un nivel superior al TCP / IP, como un proxy inverso.

  • Establecimiento de un server DNS estático (Debian Squeeze)
  • ¿Cómo puedo configurar una networking de pequeñas empresas completamente equipada?
  • nslookup sobre openvpn no funciona, mientras que otros services son funcionales
  • ¿Qué es "Host IP 2" en Goddady, director de loggings de pegamento?
  • ¿Cómo obtener ** todas las ** direcciones IP de un dominio?
  • Mapeo automatizado de subnetworking DNS
  • Un Alias ​​para señalar varias direcciones IP
  • Round Robin con una sola fuente
  • El linux y los temas del servidor de Windows, como ubuntu, centos, apache, nginx, debian y consejos de red.