Problema: Es posible experimentar un rendimiento lento cuando se utilizan los BITS y autenticación Kerberos en Puntos de Distribución de ConfigMgr 2007

Por: Guillermo Vargas

Si está utilizando IIS 7 o IIS 6 con la autenticación Kerberos, puede que vea un aumento en el tráfico de red y de rendimiento lento en general si se envía paquetes grandes a los Puntos de Distribución de System Center Configuration Manager 2007. Esto ocurre porque el comportamiento predeterminado de éste tipo de configuración es autenticar cada solicitud HTTP, por lo tanto, de forma predeterminada se verá a continuación una petición HTTP GET y, a continuación, una solicitud de autenticación 401 desde el servidor, y luego otra petición HTTP GET con autenticación. En ConfigMgr 2007, si está utilizando una cuenta de acceso de red, esto podría aumentar también el tráfico de Kerberos al controlador de dominio, así, que en algunos casos podría afectar el rendimiento global del sistema.

¿Cuál es la solución? Autenticación basada en el período de sesiones. A continuación voy a demostrar lo que el comportamiento parece con autenticación de Kerberos, seguido, mostraré cómo realizar los cambios en IIS para que en su lugar utilice autenticación de sesión. Esto significa que sólo pediremos por autenticación solo una vez siempre y cuando esté dentro de la misma sesión de TCP/IP.

Observaremos a continuación en la traza de monitoreo de red cada respuesta 401 pidiendo autenticación seguida por una respuesta de paquetes de KerberosV5. Primero se envía la petición inicial de autenticación anónima que solicita el servidor a lo que responde con un paquete 401 requiriendo autenticación, y, a continuación, se envía una nueva solicitud con autenticación y que provoca que el servidor envíe una respuesta 206 de regreso en forma exitosa. Por lo tanto el problema se presenta cuando tenemos que procesar una gran cantidad de solicitudes que requiere ser re-autenticada en la misma sesión de TCP:

image

A continuación se detalla la actividad del paquete de KerberosV5 que ves más arriba para mostrar que es en realidad la respuesta del estado actual del código HTTP 206

image

Nota: Para obtener más información sobre este comportamiento, consulte el siguiente artículo de Knowledge Base:

KB954873 - Puede experimentar un rendimiento lento cuando se utiliza la autenticación de Windows integrada con el Protocolo de autenticación Kerberos en IIS 7.0

 

Para resolver este problema al utilizar IIS 7.0 establezca el valor de la propiedad authPersistNonNTLM en True en el nivel de servidor. Para ello, siga estos pasos:

  1. Haga clic en Inicio, haga clic en Ejecutar, escriba cmd y, a continuación, haga clic en Aceptar.
  2. En el símbolo del sistema, escriba los comandos siguientes y, a continuación, presione ENTRAR:
    CD %SystemRoot%\System32\inetsrv
    appcmd set config /section:windowsAuthentication /authPersistNonNTLM:true

Nota: La propiedad de authPersistNonNTLM controla la exigencia de una re- autenticación de la autenticación de Kerberos. De forma predeterminada, esta propiedad está en false.

Después de establecer la propiedad authPersistNonNTLM en true, no se requerirá autenticación para cada solicitud que se hace sobre la misma conexión keep-alive. Usted deberá autenticarse de nuevo si utiliza un puerto diferente TCP de cliente para hacer otra solicitud HTTP. Esta situación se produce cuando debe establecerse una nueva sesión de keep-alive de HTTP.

Para obtener más información acerca de las sesiones de keep-alive de HTTP, visite el siguiente sitio Web de Internet Engineering Task Force (IETF):  RFC2616

La propiedad de configuración de authPersistNonNTLM en IIS 7.0 sustituye a la clave de registro de EnableKerbAuthPersist que se utiliza en IIS 6.0:

KB917557 REVISIÓN: Puede experimentar un rendimiento lento cuando se utiliza la autenticación de Windows integrada junto con el Protocolo de autenticación Kerberos en IIS 6.0

Para resolver este problema cuando se utiliza IIS 6, establezca el valor de la propiedad de EnableKerbAuthPersist a 1 a nivel de servidor. Para ello, siga estos pasos:

  1. Haga clic en Inicio, haga clic en ejecutar, escriba regedit y, a continuación, haga clic en Aceptar.
  2. Busque y, a continuación, haga clic en la siguiente subclave del registro:
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\Parameters
  3. En el menú Edición, elija Nuevo y, a continuación, haga clic en valor DWORD.
  4. Escriba EnableKerbAuthPersist para el nombre de la entrada y, a continuación, presione ENTRAR.
  5. Haga clic en EnableKerbAuthPersist y, a continuación, haga clic en modificar.
  6. En el cuadro de datos de valor, escriba 1 o cualquier valor distinto de cero para activar la revisión y, a continuación, haga clic en Aceptar.
    Nota: Para devolver el servicio de IIS para el comportamiento predeterminado, defina el valor a 0.
  7. Salga del editor del registro.
  8. Reinicie el servicio IIS. Para ello, siga estos pasos:
    a. Haga clic en Inicio, haga clic en ejecutar, escriba cmd y, a continuación, haga clic en Aceptar.
    b. Escriba los siguientes comandos. Presione ENTRAR después de cada comando:
    net stop iisadmin
    net start iisadmin

Una vez que se realice el cambio en IIS se observará en la captura de pantalla siguiente la respuesta HTTP 401 seguida por Kerberos y luego ya no vemos el más 401 hasta que se realicen nuevos cambios de sesión TCP. Esto reducirá la cantidad de solicitudes y respuestas en la mitad y también mejorará el rendimiento:

image

La última vez que observé ésta situación, se comprobó que el rendimiento más pobre fue en el controlador de dominios. Cuando un paquete de distribución de software grande fue lanzado a más de 5000 clientes vimos un problema de rendimiento significativo en el controlador de dominio. Tomando la traza de Netmon, encontramos que apuntaba a la cuenta de red que se utiliza en SCCM. Para todas y cada una de las solicitudes de 401 vimos que el cliente envió Kerberos AS_REQ y KRB_TGS_REQ para la cuenta de red (en el laboratorio se usó 'smsuser'). Durante el período que enviamos el paquete grande a los 5000 clientes, observamos que se producían 180 solicitudes por segundo en los controladores de dominio.

Una vez que hemos cambiado a la sesión de base de seguridad el problema de rendimiento se alivió considerablemente.