diferencia de equilibrio de carga entre DNS e IP: reenvío vs redireccionamiento

9

Me he encontrado con una situación que no puedo entender. Tenemos un cortafuegos Fortigate que hemos habilitado para equilibrar la carga en dos servidores web Apache de back-end. Luego se asigna un nombre DNS a la IP virtual en Load Balancer.

Como se esperaba, cuando navega hasta el nombre / URL de DNS (por ejemplo, www.something.com), Load Balancer sirve una página desde uno de los servidores web Apache de back-end. La URL en el navegador permanece en www.something.com . Por lo que entiendo, el Load Balancer en este caso es simplemente reenviar paquetes entre el navegador y Apache mientras permanece siempre en la ruta.

Sin embargo, si busco la dirección IP a la que está asignado el DNS, entonces Load Balancer devuelve un HTTP 302 encontrado, con el encabezado de ubicación establecido en la URL DNS de uno de los Apaches. La URL en el navegador cambia al DNS del servidor de fondo.

¿Por qué el equilibrador de carga redirige cuando se consulta a través de IP, pero reenvía correctamente en la ruta cuando se consulta a través del nombre DNS?

Yusuf
fuente

Respuestas:

10

No he usado un Fortigate FW para equilibrar la carga, por lo que responderé algunas de las preguntas de manera más general.

Primero, en cuanto a su problema, el equilibrador de carga está haciendo exactamente lo que se supone que debe hacer y creo que sus servidores pueden no estar configurados correctamente para responder a una solicitud en su dirección IP. Si tuviera que probar esto detrás del equilibrio de carga, podría establecer el nombre de dominio en el archivo de hosts de un cliente local, detrás del firewall con el servidor y acceder a ambos con el nombre de dominio y la IP interna. Probablemente obtendrá el mismo resultado que está viendo ahora.

Supongo que tiene activado el alojamiento virtual (para admitir múltiples dominios en un solo servidor) y el "valor predeterminado" no está sirviendo las mismas páginas que su dominio. Obtendrá una página web del servidor en ambos casos. Si necesita ayuda para configurar su servidor web, puede probar ServerFault .

En segundo lugar, para entrar en un poco más de detalle. Un equilibrador de carga generalmente opera en L7 para al menos clústeres HTTP y HTTPS. Esto significa que no solo miran la dirección IP y la reenvían, ni "redirigen" la página.

Cuando reciben una solicitud, la analizan y la reenvían a un servidor después de procesarla. Hay muchas cosas que pueden hacer en este momento, como reescribir los encabezados en ambas direcciones, potencialmente agregar cookies (para persistencia) en los datos que regresan al cliente, finalizar sesiones SSL, coincidencias basadas en la URL, etc.

Le recomiendo que pase un tiempo leyendo completamente los documentos del proveedor para comprender mejor cómo funciona el equilibrio de carga (con Fortigate puede leer tanto el suyo como Coyote Point, otra compañía de equilibrio de carga que adquirió Fortigate). Comprender lo que está haciendo lo ayudará en casos como este y le permitirá desbloquear capacidades que no sabía que existían.

YLearn
fuente
El problema era una configuración en el servidor web Apache de back-end. El nuevo nombre DNS debía agregarse como un alias.
Yusuf
3

Después de leer el equilibrio de carga basado en el host HTTP en el documento Fortigate Load Balancing , puedo ver cómo puede tener una configuración de equilibrio de carga atípica que podría resultar en lo que usted describe. Sin embargo, sin parte de su configuración, no podemos estar seguros de si este es el caso para usted.

Fortigate FortiOS permite la creación de un servidor virtual que está vinculado a servidores reales que tienen una configuración de encabezado de host diferente . Si alguna solicitud coincide con el VIP de su servidor virtual, las solicitudes de carga equilibrada solo irán a los servidores reales que coincidan con eso host header. La parte más importante que explica muy bien sus síntomas es que uno de los servidores reales puede omitir el encabezado del host para que coincida con cualquier encabezado del host.

El servidor real sin un encabezado de host podría haberse configurado como una especie de "captura general" que aterriza en un sitio que realiza la redirección.

Usando el ejemplo a continuación, solo el primer y segundo servidor manejan el tráfico que coincide con su nombre DNS preferido a través del encabezado del host, pero el tercer servidor toma cualquier cosa que coincida con todos los otros encabezados del host que incluye el DNS VIP y lo envía a un sitio que podría hacer una redirección .

config firewall vip
 editar "http-host-ldb"
  establecer tipo servidor-carga-equilibrio
  establecer extip 192.0.2.1
  establecer extintf "lan"
  establecer http de tipo servidor
  establecer el método ldb http-host
  establecer extport 80
  config realservers
    editar 1
      establezca http-host "www.example.com"
      establecer ip 192.168.2.1
      establecer puerto 80
      siguiente
    editar 2
      establezca http-host "www.example.com"
      establecer ip 192.168.2.2
      establecer puerto 80
      siguiente
    editar 3
      establecer ip 192.168.2.3
      establecer puerto 80
      siguiente
    final
 final

Supongo que el equilibrio de carga del firewall podría estar haciendo la redirección en sí, pero no podemos decirlo con la información limitada proporcionada.

generalnetworkerror
fuente
En esta configuración, se establece en coincidencia basada en nombre. Y ese es el problema. Si va al VIP por dirección, no sabrá qué hacer con él. (entonces se aplicarán las reglas NAT normales)
Ricky Beam
La razón principal por la que no creía que esta fuera la respuesta es que ningún equilibrador de carga / FW que conozca devolverá un 302 con la ubicación establecida en el nombre de host / dominio del recurso interno (al menos sin configurarlo específicamente para hacerlo). entonces, lo que no pareció ser el caso basado en la pregunta).
YLearn
@RickyBeam, solo los primeros en rservers coinciden con el nombre de host. El último servidor coincidiría con la dirección VIP como el host.
generalnetworkerror
@YLearn, estoy de acuerdo en que esto sería extraño; Estaba diciendo que el servidor, no el LB, habría hecho el 302 y se habría configurado para hacerlo. No sé de LB tampoco que hubiera hecho eso.
generalnetworkerror