sábado, 26 de septiembre de 2009

Hyper-V administrado de Windows 7 estando ó no en el dominio.

Introducción:
Una de las cosas que se echaban de menos en Hyper-V es la capacidad que teníamos en Virtual Server de Administrarlo remotamente y mediante VMRC el poder arrancar maquinas virtuales con la consola en nuestro equipo.

Hyper-V hasta este momento no daba esa capacidad y teníamos que conectarnos al server a través de un escritorio remoto, arrancar las maquinas virtuales, las cuales debían estar configuradas a su vez para escritorio remoto, y ahora desde el cliente acceder vía escritorio remoto a las maquinas virtuales.

Este escenario ha cambiado ya que Microsoft ha liberado una utilidad para administrar remotamente servidores con Hyper-V.

Para 64 bits:

http://www.microsoft.com/downloads/details.aspx?familyid=88208468-0AD6-47DE-8580-085CBA42C0C2&displaylang=en



Para 32 bits:
http://www.microsoft.com/downloads/details.aspx?familyid=BF909242-2125-4D06-A968-C8A3D75FF2AA&displaylang=en


Los problemas de conectividad, comienzan en este momento.


Problemas de conectividad:

· Si nuestra máquina pertenece a un Dominio y en ese server de Dominio tenemos instalado
Hyper-V (o bien en otro server perteneciente al Dominio) y tenemos una cuenta administradora, entonces no tenemos ningún problema.

· Los problemas surgen en estos escenarios:

1 - Estación de trabajo no unida al Dominio desde la cual queremos administrar Hyper-V el
cual está en el Dominio.


2 - Hyper-V en un server Standalone y queremos acceder desde una estación de trabajo.

3 - Hyper-V instalado en un Core Server y queremos administrarlo desde remoto.

En cualquiera de estos casos, nos será imposible: veremos una pantalla que nos
indica que no tenemos permisos, que contactemos con el Administrador para que
active las políticas. Pero ¿qué políticas?... no hay tales políticas ni en
dominio, ni como configuración local cuando el server es standalone.


Veamos cada caso:

1. Estación de trabajo no unida al Dominio desde la cual queremos administrar Hyper-V el cual está en el Dominio.

Ejecutar los pasos 1) 2) 3) y 4) de la sección SERVER inferior.

Ejecutar los pasos 1) 2) 3) y 4) de la sección CLIENTE inferior.

Si en algún momento solicita credenciales, usar User/Pass del Dominio.

2. Hyper-V en un server Standalone y queremos acceder desde una estación de trabajo.

Ejecutar los pasos 1) 2) 3) y 4) de la sección SERVER inferior.

Ejecutar los pasos 1) 2) y 3) de la sección CLIENTE inferior.

3. Hyper-V instalado en un Core Server y queremos administrarlo desde remoto

SERVER:

Ejecutar paso 1)

El paso 2) no es posible al estar en un Core Server, pero este contiene un grupo “builtin”
llamado “Distributed COM Users”. Por tanto, añadimos el usuario que va a acceder
a este grupo:

net localgroup “Distributed COM Users” /add servidor\usuario

El paso 3) debemos ejecutarlo desde remoto. Por tanto en la maquina remota (cliente)
abrimos la Administración del Equipo y com boton derecho en Computer Management,
seleccionamos “Connect to another computer …”

De esta manera podemos cambiar Root\CIMV2 y Root\virtualization tal y como se describe
en el punto 3)

El paso 4) debemos hacerlo igualmente desde remoto. Para ello, desde la maquina remota:

net use * file://server/c$

y a continuación con azman.msc manejamos el XML del server remoto tal y como se
describe en dicho paso.. Únicamente tenemos un problema: azmna.msc no funciona
correctamente en remoto y no encuentra ningún usuario (suponiendo que queramos
dar de alta uno en particular).

Como workaround: ahora pasamos a editar (previa copia de seguridad) el
InitialStore.xml y necesitamos incorporar el SID del usuario. Para conocerlo,
este script puede servirnos:

strComputer = "."

Set objWMIService = _

GetObject("winmgmts:\\servidor\root\cimv2")

Set objAccount = objWMIService.Get _

("Win32_UserAccount.Name='nombreusuario', Domain='servidor'")

Wscript.Echo objAccount.SID



Notepad no es un editor XML y en este caso, sería conveniente usar un editor XML freeware
de los muchos que existen en la red.

EN EL SERVER

1. Configurar firewall en el server.


En una consola ejecutar:

netsh advfirewall firewall set rule group=”Windows Management Instrumentation (WMI)” new enable=yes

Es necesario asegurarse que el comando es correcto y su respuesta debe ser que ha
actualizado 4 reglas.

NOTA: El string entrecomillado debe coincidir con el nombre del grupo definido en el
propio firewall. Por tanto, si se está ejecutando un Windows en un idioma
diferente del inglés hay que verificar previamente en las reglas del firewall su
nombre. (Herramientas Administrativas, Firewall con seguridad avanzada).

2. Configurar DCOM en el Server.
Para configurar el DCOM debemos ejecutar el comando “dcomcnfg” (sin las
comillas). Esto configura los permisos y debe ser coherente con el resto de
actuaciones en los puntos siguientes en seguridad. Podemos dar permisos a un
usuario, a un grupo de usuarios, o bien a cualquier usuario autenticado.

Botón derecho en “My Computer”, propiedades, y seleccionamos la pestaña “COM
Security”.

Seleccionamos “Edit Limits” en la parte inferior. “Launch and Activation Permissions”. No confundirse con el botón superior de “Edit Limits”. Nos mostrará una pantalla con los grupos / usuarios y sus permisos. Pinchamos el botón de “Add” (Añadir):

y añadimos el usuario o el grupo al cual vamos a dar permisos. En este ejmplo, vamos a
añadir al grupo de “Usuarios Autenticados” y en la pantalla siguiente, marcamos
“Remote Launch” y “Remote Activation”:

3. Asignar permisos en WMI en el Server.
Boton derecho en Computer (Equipo) y Administrar. Localizamos el “WMI Control”,
boton derecho sobre él, propiedades y pestaña “seguridad”.

Fijemonos en la estructura superior: debemos actualizar dos claves de identica forma: “CIMV2
y “virtualization

Seleccionamos la clave, y pinchamos en el boton “Security” inferior.

Seleccionamos el usuario o grupo, o bien lo añadimos (Add). Una vez seleccionado
pinchamos el botón de “Avanzado” y le asignamos “Remote Enable”.

Debemos realizar aquí tres puntos:

1. En “Apply to:” debemos seleccionar “This namespace and subnamespaces”

2. En la columna de permisos, seleccionar “Remote Enable”.

3. Marcar el checkbox inferior. “Apply these permissions to objects and/or containers within this container only”

Repetir todo lo anterior para la otra clave: Root\virtualization.

4. Configurar “Authorization Manager” en el server.
Ejecutamos: “azman.msc” (sin las comillas).

Botón derecho en Authorizacion Manager y Open Authorization Store. Seleccionamos “XML
File” y le añadimos:

%programdata%\Microsoft\Windows\Hyper-V\InitialStore.xml

Al abrirse, aunque permite asignar roles especificos, en este caso vamos a dar
todos los permisos al grupo de “Usuarios autenticados” que es con el que estamos
trabajando. Para ello, navegamos hasta “Role Assignments” y en la zona derecha,
boton derecho al “Administrator” -> “Assign Users and Gropus” -> For Windows ans
Active Directory” y añadimos al grupo de “Authenticated Users”. Debe quedar:

EN EL CLIENTE

1. Configurar firewall en el cliente.
En una consola ejecutar:

netsh advfirewall firewall set rule group=”Windows Management Instrumentation (WMI)”
new enable=yes

Revisar los comentario del punto 1) en el Server con respecto al idioma y el contenido
del string superior.


2.
Permitir la consola (mmc) al firewall en el cliente:
Crear una excepción en el firewall para la consola:

Netsh firewall add allowedprogram program=%windir%\system32\mmc.exe name=”Microsoft Management Console”

3. Dar permisos al WMI en el cliente.
WMI realiza un callback del server al cliente. Es normal y no es especifico de
Hyper-V. Si el server estuviese en un grupo de trabajo el DCOM desde el server
al cliente es “anomina”.

Por tanto ejecutamos “dcomcnfg” , localizamos “My Computer”, propiedades, pestaña de “COM
Security” y en este caso pinchamos en “Edit Limit” en la zona superior
“Access Permissions”.

Añadimos “ANONYMOUS LOGON” de la lista de usuarios y marcamos los permisos en el area de
“Remote Access/Allow”

4. Establecer las credenciales en el cliente.
En una consola arrancada en modo normal (no hacerlo en modo
elevado: esto es importante!) ejecutar:

cmdkey /add remoteserver /user:remoteserver\username /pass

La opción pasada en /user debe ser remoteserver\username siendo username el usuario en la
máquina remota.

Juan Barrios y Carlos Rovira.

1 comentario: