Professional Documents
Culture Documents
aplicando tecnología de
escritorios remotos con
NOMACHINE NX / FREENX
• Usos y aplicaciones
COLINUX
• ¿Cómo funciona?
− Colinux es una modificación de un kernel y otras utilidades Linux (un
driver que debe precargarse), que proporciona los medios
necesarios para poder ejecutar una distribución Linux (la que
deseemos) en el contexto de drivers de un Sistema Operativo Host
(dentro de un S.O. Microsoft Windows 2K, 2K3 o XP)
− El kernel linux que se ejecuta dentro de Windows, lo hace en el
mismo nivel de privilegios que el kernel envolvente, es decir,
Windows.
− El Kernel linux huésped, se ejecuta con una cantidad de memoria
prefijada antes de lanzarse, que puede variar, siempre dentro del
límite REAL de la máquina envolvente.
− El kernel huésped, dispone de sus propias tablas de páginas y
control absoluto de la MMU (memory management unit), con un
límite de direccionamiento de 4GB.
COLINUX
• Resumen:
Host Userspace
colinux-serial-daemon
process Host Kernel Guest Kernel
colinux-daemon coLinux
IPC using process Kernel Normal
named pipes driver Linux
Main Run Userspace
Loop ioctl() Passage
entry page entry
colinux-console-nt
(unmodified
process
binaries)
colinux-net-daemon
process
colinux-bridged-net-daemon
process
COLINUX
• En el S.O. envolvente, un proceso del espacio de
usuario windows, colinux-daemon, ejecuta de forma
constante llamadas a ioctl (es una función que controla
parámetros de dispositivos subyacentes, descritos
como ficheros, en sistemas UNIX).
• El driver colinux, conecta el kernel host o envolvente
con el huésped usando un código de bajo nivel i386, de
modo que el estado de la CPU siempre se preserva
(registros generales y registros de control).
• Cuando el huésped requiere datos del host, o cuando
se eleva una interrupción, se produce una conexión con
el driver colinux del S.O. envolvente.
COLINUX
• Resumen del Kernel Space
Host Kernel Guest Kernel
Interrupt
coLinux forwarding
host kernel cob
driver cobd
d
(linux.sys)
entry
Passage entry conet
Run
ioctl()
Page
cocon
Etc..
COLINUX
• Resumen del canal de paso de páginas (4KB)
COLINUX
• Control de interrupciones y excepciones
ISR YY
Internal
IDE0 entry
Passage entry handling
handling Page
code
IDE0
(external)
ISR XX ISR XX
COLINUX
• Gestión de la memoria y mapping:
Guest Kernel
Physical Memory FFFFFFFF Virtual Address Space
fixmaps
page tables that
map this address
space
Reverse address
translation tables
pseudo
physical
ram
bss
data
C0000000 text
COLINUX
• ¿Qué otros cambios incorpora el kernel modificado
colinux?
− Añade un método que actúa de interfaz con el driver colinux
que está cargado en el host envolvente.
− Añade unos dispositivos virtuales que implementan el control
con dispositivos de bloques (disco), salida de vídeo (consola)
e interfaces de red. Entre ellos está el driver cofs, un
dispositivo que conecta el disco de la máquina envolvente
para poder ser montado en la máquina huésped. Acceso en
lectura y escritura.
− El acceso al hardware está denegado (se ha modificado la
función ioperm() y la función iopl() para que fallen).
− El acceso al hardware, debe pasar por lo tanto por la capa de
abstracción implementada, es decir, usando los dispositivos
virtuales mencionados.
COLINUX
• ¿Qué versión tenemos ahora disponible y en qué
estado se encuentra?
− colinux 0.6.4: Estable hasta Noviembre. Es necesario algunos
cambios para obtener total fiabilidad (ver problemas y
soluciones).
− Colinux 0.7.1: Estable desde el 2 de Noviembre de 2007. Aún
reciente, aunque corrige:
• Rendimiento de interfaces slirp
• Nuevo driver TAP Win32, lo que mejora el rendimiento de estos
interfaces
• Bugs con ciertos tipos de micros P4 y Xeon
• Bug con Vista.
• Mejora en el tratamiento de la memoria.
COLINUX
• Problemas y soluciones
− 1.- En algunas versiones de XP puede provocar una BSD
(blue screen of death), fácilmente corregible modificando un
parámetro en en archivo boot.ini de windows.
• El motivo: una protección que windows incorpora para evitar los
ataques de desbordamiento de buffer.
• Ejemplo de boot.ini que puede derivar en una BSD:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=Optln /fastdetect
− No tenemos sonido
• El kernel de colinux tampoco permite acceder a tarjetas de sonido.
• Gracias a la función de streaming de audio de freenx, conseguimos
que sea la tarjeta de sonido de la máquina envolvente la que realice
esta función, con lo que disponemos de sonido.
− No tenemos acceso al CDROM/DVD-ROM, grabadora.
• Podemos montar el contenido en forma de fichero .ISO
− Podemos acceder a través de windows.
COLINUX
• Problemas y soluciones (III)
− La instalación de guadalinex necesita un mínimo de 4GB de
archivo de imagen para ejecutarse. Pero grabar archivos de
más de 2GB en un DVD sin fraccionarlos puede acarrear
dificultades.
• Solución: Usamos UnxUtils,
− split -b => Dividimos en trozos de 1 GB
− cat -B => Unimos los trozos
− El disco se me ha quedado pequeño. Necesitamos más
espacio
• Un archivo de imagen de 10GB comprimido con bzip2 puede alcanzar
un espacio disponible de 10GB para linux una vez descomprimido.
− Aunque algunos antivirus tienden a descomprimir estos archivos para
comprobar si almacenan virus; por ejemplo, OfficeScan, de TrendMicro.
• Bastaría crear un nuevo archivo y montarlo, si bien es posible un
traspaso completo de los datos a un nuevo archivo que representa un
sistema de ficheros para colinux.
COLINUX
• Problemas y soluciones (IV)
− ¿Por qué no me funciona el eye candy (por ejemplo, compiz o
beryl)
• Porque usan drivers nativos de las tarjetas gráficas con aceleración,
como ATI o nVIDIA, y colinux tan sólo contempla acceso a una consola
en texto.
• La única posibilidad gráfica con la que contamos es usar un servidor X
como XMING (o compilarlo desde cygwin), o usar FREENX (que ya
incluye un servidor X de cygwin, además de otras mejoras).
− ¿Puedo ver TDT con mi sintonizador USB o TV analógica
desde mi Linux?
• Por la misma razón anterior, no será posible.
− ¿Puedo ver vídeo en demanda desde mi Linux?
• Eso sí es posible; freenx se comporta de manera adecuada en
streaming.
COLINUX
• Usos y aplicaciones
− Migración progresiva desde Windows
• Colinux es muy veloz (es un proceso; no una capa global de
abstracción como vmware, con reparto de CPU), y proporciona todo el
software disponible en linux sin recompilar.
− Colinux puede arrancar múltiples instancias
• Ideal para simulación y estudio de un cluster de supercomputación.
− Colinux puede arrancar DESDE WINDOWS un sistema linux
que tengamos en nuestra máquina sin necesidad de disponer
de un arranque dual con grub o lilo. o bien tener ambas
posibilidades disponibles.
− Colinux puede acceder al disco de la máquina envolvente sin
usar artificios como samba.
COLINUX
• Usos y aplicaciones (II)
− Colinux puede ser la forma de probar guadalinex sin miedo
particionar nuestro disco, sino simplemente copiar unas
carpetas a nuestro disco, y empezar a ejecutar..
− Colinux trae todas las aplicaciones linux al escritorio windows.
− Colinux puede lanzarse como un servicio windows
• Esto permite disponer de un linux preparado para el uso requerido, SIN
NECESIDAD DE QUE EL USUARIO INICIE UNA SESIÓN.
− Colinux puede crecer en espacio de disco sin provocar
“tragedias”.
− Colinux es tan ágil y rápido como un proceso más de los que
estén ejecutándose en Windows.
COLINUX
NOMACHINE NX / FREENX
NOMACHINE NX
• NOMACHINE NX: ¿Qué es?
− NOMACHINE NX es una solución para proporcionar
aplicaciones centralizadas a clientes ligeros o trabajadores
remotos sobre cualquier tipo de conexión de red. El software
de NX es capaz de transportar sesiones de escritorios X-
Window, RDP y RFB con sorprendente velocidad y facilidad
de uso.
− El Servidor NX se ejecuta sobre cualquier sistema operativo
Linux, o Solaris
− Hay clientes NX para una gran variedad de plataformas y
sistemas operativos, incluso dispositivos embebidos como
HP/Compaq iPAQ y Sharp Zaurus.
Introd. a la tecnología
• Detrás de NX de NoMachine está la arquitectura NX
Distributed Computing Architecture (NXDCA), que usa
dos conocidos y ampliamente utilizados estándares
abiertos: ssh (encriptación) y el sistema X-Window.
• NXDCA es un conjunto de tecnologías que conforman
una capa en el servidor que habilita a cualquier UNIX
para prestar los servicios de un servidor de terminales,
existiendo importantes diferencias entre alternativas
similares como RFB y RDP
Introd. a la tecnología
• VNC (RFB) y Microsoft Terminal Server (RDP), son protocolos
mucho más simples que las X.
− Su simplicidad no compensa su falta de eficiencia y prestaciones.
− Estos protocolos, dibujan para pantalla remota transfiriendo cantidades
enormes de datos de imagen que se envían a través de la red.
− Incluso aceptando que RDP es de mayor nivel y eficiencia que RFB, no ha
sido diseñado para el uso diario de recursos de cómputo, sino cono un
“añadido” al sistema operativo subyacente.
• NXVIEWER:
− Permite actuar de proxy para conectar por VNC a otra máquina, mejorando
el rendimiento con la caché NX.
• NXDESKTOP:
− Idem nxviewer, pero para conexiones RDP.
• NXESD
− Permite encapsular el sonido en la conexión NX, y reproducirlo en la
máquina local.
Componentes NX
• NXNODE (I):
− Es el core de la arquitectura distribuída NX.
− Se encarga de:
• Lanzar el proceso nxagent
• Lanzar las aplicaciones con el DISPLAY adecuado (cuando acaban, envía un
SIGTERM a NXAGENT), donde el DISPLAY lo enlaza NXPROXY.
• Lanzar un proceso de monitorización.
− Se encarga de exportar el entorno a los usuarios, de manera que las
sesiones se ejecutan en computadoras con NXNODE’s en una especie de
Cluster Virtual
• Es decir, cientos de NXNODE’s pueden estar conectados con uno o más
servidores para controlar miles de sesiones concurrentes.
− Esto garantiza la escalabilidad.
− Cualquier computadora puede ser un NXNODE de la arquitectura NXDCA.
Una red NX es muy similar a una red p2p, en el sentido de que en p2p, si
buscamos una canción, los motores de búsqueda nos redirigen al servidor
apropiado, proporcionando la credencial de autorización necesaria, para
permitir que el otro nodo acepte la conexión.
Componentes NX
• NXNODE (II):
− No sólo distribuye la carga de red distribuyendo sesiones, sino
que puede distribuir las aplicaciones que se ejecuten en una
sesión entre diferentes servidores.
− Esto puede ser necesario cuando, por ejemplo, un recurso o
aplicación no está disponible en el nodo original, o bien porque
un recurso esté más “próximo” al usuario siguiendo el camino
más corto a través de la red.
− Esto garantiza un mejor rendimiento.
Componentes NX
• NXPROXY:
− Comprime (remoto) y descomprime (local) el tráfico de red.
− Cachea.
− Encapsula en un túnel el tráfico SMB y multimedia
• Ejemplo; un túnel entre dos hosts puede crearse así:
− En la máquina remota:
» nxproxy –C :1200
− En la local:
» nxproxy –S <host_remoto>:1200
• Directivas de logging:
− En node.cfg: SessionLogLevel. En node.conf: NX_LOG_LEVEL.
• 0: No Logging
• 1: Errors
• 2: Warnings
• 3: Important Informatión
• 4: Server- Client Comunication
• 5: Informatión
• 6: Debugging Informatión
Directivas de configuración
más importantes
(node.conf)
• NX_LOG_LEVEL=6
− Es recomendable poner el logging en 1, cuando el servicio
funciona bien. Cuando tengamos algún problema que
queramos depurar tendríamos que poner el logging en 6 para
poder ver en tiempo real el log del demonio.
• NX_LOG_SECURE=1
− Con esta opción a 1 no se muestran las contraseñas en el log,
de lo contrario se mostrarían en claro. Es muy recomendable
dejar esta opción a 1.
• NX_LOGFILE=/var/log/nxserver
− Aquí especificamos donde de ubica el fichero de log y como
se llamará.
Directivas de configuración
más importantes
(node.conf)
• SESSION_LIMIT=200
− Este parámetro limita la cantidad de sesiones que soporta el
servidor, por defecto el servidor está limitado a unas 200
conexiones simultaneas.
• SESSION_USER_LIMIT=200
− Con este parámetro limitamos las conexiones por usuario, es
decir, cuantas veces un usuario puede conectarse
simultaneamente. Por defecto 200 conexiones simultaneas por
usuario.
Comandos de administración
del Servidor NX/FREENX
• Comandos más útiles:
− ¿Cómo obtener la lista de usuarios NX?
nxserver --userlist
− ¿Cómo enviar un mensaje a todos los usuarios
conectados?
nxserver --broadcast “El servidor se reiniciará para XXX en 15
minutos”
− Obtener el estado del servicio
nxserver --status
− Terminar/suspender una sesión desde el servidor
nxserver --list
nxserver --terminate [sid] / --suspend [sid]
Instalación de un servidor
FREENX
• Repositorios principales de paquetes de FREENX:
− Berlios (http://www.berlios.de)
− Seveas (http://free.linux.hp.com/~brett/seveas/freenx/)
• Contiene sólo paquetes para Ubuntu.
• Mantiene los más recientes; los últimos son para Feisty Fawn 7.04 (aún no para
Gutsy Gibbon 7.10)
• Opciones de instalación:
− NoMachine Keys: Se utilizarán las claves que vienen por defecto y que
hará que a nuestro servidor se puede conectar cualquier cliente. Muy
inseguro ya que no tenemos control de quien se esta conectando. Es mas
fácil de instalar.
− Custom Keys: Se crearán unas claves personalizadas que habría que
copiar a cada cliente en el directorio /usr/NX/share
− Remove freenx keys: Borra las claves ya existentes.
• Para iniciar o para el servicio utilizaremos los siguientes
comandos:
− #nxserver --stop
− #nxserver --start
Uso de claves propias en
FREENX
• La clave se almacena en el fichero client.id_dsa.key en
el subdirectorio .ssh del home de nx (por defecto, en
freenx,
en /var/lib/nx/nxserver/home/.ssh/client.id_dsa.key).
• Se tiene que compartir esta clave con todos los clientes
que se quieran autorizar. Esto lo hacemos importando
la clave en las máquinas clientes.
• Para importar la clave en el cliente haremos lo
siguiente:
Uso de claves propias en
FREENX
• Copiamos el fichero client.id_dsa.key a la estación de
trabajo del cliente, por scp o con un pendrive, cd, etc.
• Una vez que la clave este copiada, abrimos el cliente nx
y pinchamos en el boton configure...
Uso de claves propias en
FREENX
• Pinchamos en el botón KEY
Uso de claves propias en
FREENX
• Se abre el cuadro para el import:
Uso de claves propias en
FREENX
• Buscamos el fichero con la clave:
Uso de claves propias en
FREENX
• Una vez aplicados los cambios, podremos logarnos en
el servidor:
Uso de claves propias en
FREENX
• Consejos de seguridad:
− En el directorio por defecto del home del usuario nx,
encontraremos un directorio oculto /var/lib/nxserver/home/.ssh.
• En este directorio encontraremos el fichero de claves permitidas
authorized_key o authorized_key2, client.id_dsa.key y known_hosts.
− El fichero authorized_key o authorized_key2 varía su nombre
únicamente para indicarle al demonio de ssh si las conexiones
entrantes son del tipo protocolo 1 ó 2.
− En vez de utilizar los fichero hosts.allow y hosts.deny para
restringir la entrada a determinada direcciones ip, podemos
utilizar el archivo authorized_key2 para restringir por ip's.
• Con la clausula form=”ip,ip,ip,....” al comienzo de cada clave podemos
restringir el acceso a la máquina desde el exterior.
Instalación del cliente
Instalación del cliente
Instalación del cliente
Instalación del cliente
Instalación del cliente
Instalación del cliente
Configuración del cliente
• Configuración de velocidad:
− Modem: Para conexiones por o hacia modem, típicamente
unos 56kbits/s.
− ISDN: RDSI, para conexiones entre 64 y 128Kbits por
segundo.
− ADSL: Optimizará las conexiones entre 256Kbits y 1Mbit de
ancho de banda.
− WAN: Optimiza en el rango de 2Mbits a 8Mbtis
− LAN: Idem entre 10Mbits y 1Gigabit
• NOTA: Estas opciones, así como las siguiente pueden
ser modicadas posteriormente en el último paso, así
que no hay que preocuparse por si no sabemos algunos
datos o si no estamos seguros de si funcionará.
Configuración del cliente
• Configuración del escritorio
Configuración del cliente
• Configuración del escritorio (II)
− Tipo de conexión
• Unix: Es el habitual, compatible con el sistema Linux
• Windows: Para servidores Terminal Server de Microsoft o compatible RDP
• VNC: Para conectarse a servidores VNC, es decir protocolo RFB
− sistema de escritorio
• KDE, Gnome o Custom, en el podemos arrancar cualquier escritorio o
aplicación.
− Tamaño del escritorio:
• 640x480: Aconsejable si nuestro escritorio está a 800x600 y no queremos
conectarnos a pantalla completa
• 800x600: Aconsejable si nuestro escritorio está a 1024x768 y no queresmos
conectarnos a pantalla completa
• 1024x768: Aconsejable si nuestro escritorio está a una resolución superior a
1024x768 y no queremos conectarnos a pantalla completa
• Avaliable Area: Utiliza todo el espacio de escritorio disponible
• Fullscreen: Pantalla completa
• Custom: personalizamos la resolución mediante las dos cajas que aparecen a
la derecha.
Configuración del cliente
• Configuraciones de compresión de imagen:
− En el area de Display debemos seleccionar Use customs
setting y luego pinchar en el botón Modify. Una vez hecho esto
veremos un cuadro con las siguientes opciones:
Configuración del cliente
• Use JPEG image compression: Alta compresión pero
se pierde mucha calidad, se puede elegir el nivel de
compresión asumiendo la pérdida que deseemos.
• Use PNG image compression: Compresión de alta
calidad (por defecto).
• Use plain X bitmaps: Sin compresión ninguna
• Disable render extension: Deshabilitar cualquier tipo
de aceleración, sólo marcar cuando haya problemas de
visualización.
Configuración del cliente
• En la sección Network (red) tendremos
− Disable no-delay on TCP connection Desahabilitar el que se
trate que los eventos seanen tiempo real
− Disable ZLIB stream compression Desactivar la compresión
ZLIB durante toda la conexión.
− Enable SSL encryption of all traffic Cifrar toda la conexión
con SSL.
− Cache: podremos configurar tanto la caché residente en
memoria RAM, como laque se pueda guardar en el disco duro.
También podemos borrar la caché de sesiones anteriores.
Configuración del cliente
• Servicios encapsulados:
Configuración del cliente
• Enable printing and file sharing Activa la compartición de
archivos e impresión a través de SAMBA. Antes de conectarnos,
debemos especificar qué recursos disponibles queremos
encapsular.
• Enable multimedia support Activa soporte multimedia. Redirige
la reproducción del sonido a la máquina cliente.
• Finalmente en la pestaña Environment se configuran las
variables de entorno que usaremos, directorio del usuario, del
sistema, de los tipos de letras utilizados.
• Una vez configurado todo a nuestro gusto procederemos a pulsar
Save para guardar las opciones o directamente OK si no nos
interesa guardarla para posteriores sesiones.
Teclas de control del cliente
• Teclas rápidas el cliente NX 3.0
− CTRL+Alt+Shift+Esc: Abortar una sesión que no responde
− Ctrl + Alt + T: Terminar una sesión con opción a suspender
− Ctrl + Alt + F: Conmutar entre sesión en ventana o pantalla
completa (sesión iniciada como full screen).
− Ctrl + Alt + M: to Minimizar o maximizar una sesión fullscreen
− Ctrl + Alt + keypad: navegación viewport
− Ctrl + Alt + R: conmutar entre modos "auto-resize/viewport“
− Ctrl + Alt + E: Activar lazy encoding
− Ctrl + Alt + J: Forzar un sincronización de redibujado
− Alt + F4
− Ctrl + Alt + K: Activar/desactivar la captura de las teclas Alt
+Tab y Print Screen.
Fuentes de documentación
• Documentación de NoMachine http://
www.nomachine.com
• Documentación de BerliOS http://openfacts.berlios.de/
index-en.phtml
• Linux Journal
http://www.linuxjournal.com/node/8477/print
• Documentación de Sebastián Balboa, ponencia de
e-Verano.org 2006