Tips & Tricks. BranchCache, Windows Update Services, Internet Information Services y Firewall en Windows Server 2012

BranchCache es una tecnología implementada en Windows 2008 y Windows 7 para el manejo de datos en ubicaciones remotas. En este post vamos a hablar de su versión para Windows Server 2012 y Windows 8.
En concreto, vamos a implementar una solución de BranchCache distribuida, y sobre ella una instalación de WSUS.

Vamos a imaginar un típico escenario de una organización con servidores de ficheros, carpetas compartidas y documentos públicos. Tenemos alguna delegación con enlaces WAN de alta calidad, pero tenemos una delegación pequeña, una oficina regional, sin grandes estructuras de sistemas, es decir, una ADSL y unos cuantos PC sin servidor. Muy típico para pequeñas y medianas empresas.
BranchCache nos proporciona un método de caché de contenidos descentralizado entre pc´s clientes. Es decir. Un cliente en esa oficina remota accede al servidor de la empresa para trabajar con un recurso, un fichero Word, una aplicación web, etc. Dentro de esa pequeña sede, al rato otro usuario quiere acceder a ese mismo documento. Puede pasar que en ese momento la conexión hacia la sede principal, donde se encuentra el servidor de ficheros esté caído, o lento. Por qué no usar el documento descargado previamente por el primer usuario en la sede pequeña, para evitar el tráfico hacia la sede principal vía Internet? Eso es BranchCache. Sobre esto podemos montar WSUS para realizar lo mismo. Un cliente descarga una actualización de Windows, y está se "propaga" al resto de clientes de esa pequeña sede sin necesidad de ir cada pc cliente a la sede principal a buscar dicha actualización.
Como podéis imaginar, es una de las funcionas más interesantes en cuanto a experiencia de usuario que nos proporciona Windows Server 2012.


Hay dos maneras de implementar esta solución, de manera distribuida y/o hospedada ( Se puede implementar de las dos maneras al unísono). Cuando hablamos de distribuida nos referimos al escenario que comento más arriba. BranchCache hospedada requiere de un servidor de contenido en ese delegación pequeña para hacer de cache, y este distribuye hacia los clientes de esa red. Sería algo así como cuando configuramos BRIDGEHEADER o servidores de cabeza de puente "Inter Site" para optimizar la replicación de controladores de dominio( 1 a 1 entre Sites y no DC a DC).

Para poder utilizar dicha función, debemos contar con un parque de PC´s cliente Windows 7 o superior.
Para implementar un servidor de contenido, el que digamos estaría cacheando el contenido en la ubicación pequeña debe ser Windows 2008r2 ( no es posible con las versiones core enterprise y datacenter)o Windows 2012.


Branchcache emplea un método que divide la información, los datos en pequeños bloques. A estos bloques les aplica un algoritmo de HASH (SHA256) con el que se consigue reducir la información en un ratio aproximado de 1:2000. Esta es la información que se publica/consulta en la oficina remota para agilizar el proceso de búsqueda de un cliente, es decir, saber si está disponible ese contenido en la sede local o debe ir al servidor central. Importante saber que solo se "cachea" contenido mayor a 64kb. Importante a la hora de las pruebas con el típico txt etc.xD. Al HASH de la información se le añade un secreto compartido, una pre-shared key y le aplica al conjunto un algoritmo de cifrado AES128. De esta manera se evita que mediante la captura de paquetes, un atacante pueda interceptar las peticiones/envios de información y pueda averiguar los cambios atacando al cliente de BranchCache.
Desde el panel central de administración de Windows Server 2012 agregamos la función de BranchCache dentro del ROL de servidor de ficheros. Listo !!.


Fin del post xD.
Vamos a ver una serie de comandos PowerShell relativos a BranchCache. O mejor no, si luego se nos olvida. Mejor saber como buscar. Get-Command -Module BranchCache


 Lanzamos un Status para ver si todo ha ido bien.


Los hash de los ficheros se generan automaticamente en el servidor, no mediante una tarea programada. Si eres de los que sufre el sindrome de F5 puedes forzar el "hasheado" mediante hashgen -f C:\ruta compartida
Ahora toca la configuración, pero al estilo siguiente siguiente siguiente.
Lo primero que vamos a hacer es configurar una política de seguridad para el servidor que ejecuta los servicios de BranchCache respecto al firewall. Damos, por echo que está configurado el Firewall en el servidor, y damos por echo que vamos a hacer las cosas bien xD. Podríamos deshabilitar el firewall, podríamos configurar el firewall a pelo, pero NO. Aprovechando las capacidades de gestión centralizada de Active Directory y Windows Server 2012, vamos a preparar una Unidad organizativa para albergar nuestro servidor de contenido, y configurar las reglas del firewall desde ahí. Esto nos proporciona un mayor control de los elementos de configuración, y sobre todo, nos facilita el escalado horizontal en el caso de crecimiento de nuestra empresa. En este caso muestro como crear la UNO aunque la GPO de Firewall podría aplicarla a nivel de servidor local, pero la parte de BranchCache si la haría a nivel de UO.
La configuración sería crear una Unidad Organizativa, mover el servidor, crear una GPO mediante el editor de directivas, y vincularla a dicha UO.




Ahora tocamos la parte del Firewall.





Realizamos la misma acción para las reglas de salida para los dos elementos predefinidos.
Ahora configuramos la GPO de BranchCache que permite publicación de contenidos.


Configuramos la GPO de clientes para habilitar el uso de BranchCache, por ejemplo, si tenemos los equipos de esa ubicación agrupados en alguna UO.


Vamos a probarlo en funcionamiento.Para emular el comportamiento de varios pc conectados por un enlace lento, como podría ser una conexión wan vamos a usar una herramienta muy interesante, sobre todo para pruebas rendimiento, balanceo y demás.
Network Emulator Client. Lo podemos descargar en 32 y 62 bits desde este skydrive de un amable usuario.

Instalamos y configuramos un filtro de tarjetas, o incluso por direcciones ip, y configuramos opciones de red tan bonitas como las que veis en la pantalla.


Con el delay de 300ms creo que será suficiente. Si no lo es, podemos el BandWith.
Lo probamos con un ping desde un cliente.


El valor por defecto en ms de latencia entre servidor-pc para identificarlo como una oficina remota es 80 ms.
Podemos modificar este parámetro para ajustarlo a nuestra realidad dentro de la organización mediante netsh branchcache smb set latency 0

Ahora vamos a habilitar el BranchCache para una carpeta compartida en concreto. Desde el servicio de ficheros, nos ubicamos en la carpeta compartida ( o en el momento de compartirla por este procedimiento) y habilitamos BranchCache.


O podemos hacerlo desde el explorador de archivos desde las opciones de compartir clásicas.


Podemos apreciar como a medida que vamos recuperando contenido, ficheros de carpetas compartidas en el servidor en nuestro cliente "lento" Windows 8 va aumentando el tamaño de la cache. Si recuperamos el contenido en un segundo equipo veremos como esos mismos ficheros se recuperan a la velocidad del enlace PC-PC. Puedes analizar una captura de red para ver como va al servidor BranchCache a recuperar el hash pero que obtiene el fichero del PC cliente.




Podemos aprovechar esta función para despliegue de aplicaciones en oficinas remotas con enlaces lentos. Sin más configuración por parte de BranchCache.

El servidor WSUS usa los puertos 8530 y 8531 para comunicarse con los servicios de Windows Update, por lo que tenemos que tenerlo en cuenta en nuestro Firewall de servidor/perimetral.

No vamos a profundizar en las características avanzadas de WSUS, ya que requeriría no solo un post... ya que existen diferentes escenarios para su implantación (distribuido, desconectado,en NLB,etc) sino que vamos a instalar un servidor WSUS principal para toda la organización, que aproveche las características de BranchCache para nustra sede remota. Tampoco vamos a realizar una instalación de Sql Server para manejar los datos de WSUS, sino que nos vamos a contentar con los 10 gigas disponibles de la base de datos Internal de Windows Server 2012. En el caso de implementaciones de NLB necesitaríamos Sql Server ( en casi todas las implementaciones de servicios balanceados necesitaremos un sql server, sino dos...).

La instalación de WSUS comienza agregando un nuevo rol dentro del DASHBOARD de Windows Server 2012. agregamos el role, autorizamos las dependencias, elegimos el servidor de destino, autorizamos el reinicio en caso necesario y a correr.



 En la pantalla anterior debemos proporcionar una ruta válida en nuestro servidor o recurso de red para almacenar las actualizaciones.


 Una de las dependencias necesarias, ASP.NET 4.5 me ha dado problemas a la hora de instalarla desde el CD, por lo que si tienes ganas de pelea, puedes instalarla por separado desde la web.
Puestos a pedir, porque no mejor un solo PowerShell para la instlación? Install-WindowsFeature -Name UpdateServices, UpdateServices-Ui
Una vez instalado el Role, vamos a realizar los pasos post-intalación como indican las siguientes pantallas.










Con esto tenemos instalado el servidor Wsus básico, aunque aún no operativo al 100%.
***Al realizar la instalación de WSUS se nos instala el Role de Internet Informatión Services pero no la consola de administración, para ellos, debemos agregar la característica dentro del rol de IIS por el GUI o bien mediante Powershell, para poder trabajar con IIS.
Install-WindowsFeature Web-Server -IncludeManagementTools 
***
 Habría que registrar los clientes, y aprobar las actualizaciones.
Con esta configuración, se usará la característica de BranchCache tanto para Wsus, como para todo lo que corra sobre IIS sobre ese servidor.

Como siempre, espero que os guste el artículo y que lo probéis en algún laboratorio o penséis en implementar soluciones de este tipo de cache de contenidos para vuestras organizaciones.