Hace exactamente dos años escribí un post explicando cómo configurar un servidor NFS. Hoy voy a completar ese post explicando cómo configurar ese servicio para funcionar con IPv6.

1- Configuración del escenario:

He creado dos máquinas virtuales de Ubuntu con Virtualbox, una de ellas hará de servidor y la otra será el cliente. El servidor tiene la IPv4 192.168.2.1/24 y la IPv6 2001::1:1/64 mientras que el cliente tiene la IPv4 192.168.2.10/24 y la IPv6 2001::1:2/64.

Servidor y cliente NFS

Servidor y cliente NFS

Para que haya un enlace entre ellas he configurado una red interna en VirtualBox entre ellos. Para crear dicha conexión hay que ir a las propiedades de la máquina virtual y, en la sección de red, cambiar de NAT a Red Interna. Se le puede dar un nombre para distinguirla de otras redes, en mi caso la he llamado nfsIPv6, como muestro en la siguiente captura de pantalla:

Configuración de red interna

Configuración de red interna

2- Configuración del servidor

En la máquina virtual del servidor tengo dos interfaces de red: eth0 en modo NAT para conectarme a internet y poder instalar software o consultar manuales y eth1 para realizar la comunicación con el cliente en IPv6. Para asignar una dirección IPv6 al interfaz de red eth1 he utilizado el siguiente comando:

root@server:~# ifconfig eth1 inet6 add 2001::1:1/64

Instalación del servidor NFS:

root@server:~# apt-get install nfs-kernel-server nfs-common portmap

creación de las carpetas que voy a exportar:

root@server:~# mkdir /home/abian/test
root@server:~#mkdir /home/abian/test2
root@server:~#chown -R abian.abian /home/abian/test*

Edición del archivo /etc/exports:

/home/abian/test       2001::1:2(rw,sync,no_subtree_check)
/home/abian/test2    *(ro,root_squash,no_subtree_check)

Edición del archivo /etc/hosts.allow:

portmap:[2001::1:2]
nfs:[2001::1:2]

Edición del archivo /etc/hosts.deny:

ALL: PARANOID

Reinicio de los servicios con las nuevas configuraciones:

root@server:~# /etc/init.d/portmap restart
root@server:~# /etc/init.d/nfs-kernel-server restart

3- Configuración del cliente

En el cliente solo hay una interfaz de red. Para añadir una dirección de IPv6 utilizo el mismo comando que para el servidor:

root@linux:~# ifconfig eth1 inet6 add 2001::1:2/64

Montar la partición NFS con IPv6

root@linux:~# mount -t nfs [2001::1:1]:/home/abian/test /home/abian/nfs_folder

4- Consideraciones adicionales

En el archivo /etc/exports puse dos líneas. Eso quiere decir que estoy exportando dos directorios del servidor. El directorio /home/abian/test solo puede ser accedido desde la dirección IPv6 2001::1:2 pero el directorio /home/abian/test2 puede ser accedido desde cualquier dirección IP porque puse un “*”.

Lo bueno de esta configuración es que puedo utilizar el protocolo IPv4 para acceder a un directorio y el protocolo IPv6 para conectarme a otro como muestro en la siguiente captura de pantalla:

IPv4 e IPv6 son buenos amiguitos

IPv4 e IPv6 son buenos amiguitos

Espero que este post os haya gustado. Se lo dedico especialmente al Maño y a su asignatura de sistemas operativos. ¡Ya me invitarás a una cerveza cuando nos veamos! :-)

Anuncios

Desde el 13 de Octubre está disponible la nueva versión de Ubuntu (11.10 Oneiric Ocelot). Uno de los múltiples cambios en esta nueva versión, es la utilización de Gnome Shell o Unity como gestores de escritorio. Las mejoras gráficas de estos gestores son numerosas, sin embargo, su utilización en conexiones remotas no es del todo satisfactoria debido a su mayor consumo de recursos.

Una posible solución a este problema es la utilización de Gnome Shell o Unity en sesiones locales mientras que para sesiones remotas se puede utilizar un gestor más ligero que consuma menos recursos. Aquí es donde entra Xfce.

Xfce es un gestor de escritorio para entornos Unix o Unix-like cuyo objetivo es no consumir muchos recursos pero sin perder funcionalidades o una bonita apariencia gráfica. Puede ser descargado desde su página web oficial o utilizando un gestor de paquetes como por ejemplo apt-get:

sudo apt-get install xfce4

Como se puede ver en la siguiente captura de pantalla, solo hay que descargar 24 MB de Internet y ocupará 96 MB de espacio en disco para su instalación.

Instalación de Xfce4

Instalación de Xfce4

Una vez instalado, se puede utilizar el asistente de configuración de conexiones de NX para utilizar Xfce en las conexiones remotas.

Hay que seguir tres sencillos pasos:

  1. Establecer la dirección IP de la máquina, puerto del SSH y tipo de red a la que nos conectaremos.

    IP, puerto y tipo de red

    IP, puerto y tipo de red

  2. Seleccionar el tipo de escritorio “Custom” o personalizado y hacer click en el botón de propiedades.

    Tipo de escritorio personalizado

    Tipo de escritorio personalizado

  3. Seleccionar “Ejecutar el siguiente comando” (poniendo el valor /usr/bin/xfce4-session) y la opción “Nuevo escritorio virtual”.

    Propiedades de Xfce4

    Propiedades de Xfce4

Una vez terminada la configuración ya se puede iniciar sesión de forma remota con Xfce4:

nx con xfce4

nx con xfce4

He visto en noticiasubuntu la forma de cambiar el gestor de escritorio que se utiliza por defecto en las sesiones locales. Para utilizar gnome-shell hay que ejecutar:

sudo /usr/lib/lightdm/lightdm-set-defaults -s gnome-shell

Para volver a utilizar Unity habría que ejecutar:

sudo /usr/lib/lightdm/lightdm-set-defaults -s ubuntu

Un saludo y hasta pronto

Ya está disponible para su descarga o actualización (sudo update-manager -d) la versión 11.04 de ubuntu cuyo nombre es “Natty Narwhal”. La lista de mejoras y cambios que incluye es bastante interesante. Entre ellas se puede destacar la inclusión de:

  • Linux kernel 2.6.38.2
  • LibreOffice 3.3.2
  • gcc 4.5
  • Python 2.7
  • dpkg 1.16.0
  • Upstart 0.9
  • X.org 1.10.0 y Mesa 7.10.1
  • Firefox 4.0
  • Shotwell 0.9.1
  • Evolution 2.32.2

El sistema de escritorio por defecto pasa a ser Unity. La utilización de Unity incluye algunos cambios bastante radicales comparada con el uso habitual de Gnome, la verdad es que todavía no lo he utilizado lo suficiente como para decir si me gusta o no, los vídeos mostrados en la página web oficial muestran cosas realmente interesantes. Sin embargo, tenía la sensación de que iba a echar de menos el interfaz clásico anterior a sí que me he instalado una máquina virtual para trastear con el nuevo sistema y, sobre todo, para ver si podía utilizar el interfaz clásico. Afortunadamente, la respuesta es sí.

Otra buena noticia (al menos para mi) es que se puede utilizar una versión de Unity sin necesidad de utilizar aceleración 3D para el escritorio. Tan solo hay que instalar el paquete unity-2d que está pensado para equipos que nos disponen de una tarjeta gráfica lo suficientemente potente para mover los efectos en 3D de este nuevo sistema:

abian@desktop:/home/abian$ apt-get install unity-2d

Una vez instalado, se puede utilizar la aplicación gdmsetup (“System -> Administration -> Login Screen” o simplemente tecleando gdmsetup en consola) para elegir el interfaz de escritorio preferido para la sesión:

Selección de sesión

Selección de sesión

También se puede seleccionar desde la propia ventana del GDM:

GDM

GDM

Aquí os dejo una captura de Unity sin aceleración gráfica:

Unity-2D

Unity-2D

Un saludo

Estos últimos días he estado probando Firefox 4 y realmente va muy bien. Hay dos formas de instalarlo, la primera es ir a la página web de descargas de Mozilla y la segunda es añadir el repositorio con las compilaciones diarias de firefox en Ubuntu.

Si utilizamos el primer método tan sólo hay que descargar el fichero, descomprimirlo y ejecutar firefox:

firefox 4

Firefox 4

El segundo método permite comprobar los avances diarios en el desarrollo de Firefox, aunque también puede contener más bugs o incompatibilidad de extensiones debido a que es una versión en desarrollo. Aquí os dejo los tres sencillos pasos para instalar Firefox 4.2alpha en Ubuntu. Tan sólo hay que abrir una consola y escribir:

sudo add-apt-repository ppa:ubuntu-mozilla-daily/ppa
sudo apt-get update
sudo apt-get install firefox-4.0

Se puede abrir desde la consola con el comando firefox-trunk.

firefox4.2

firefox4.2

Un saludo

Cuando se está trabajando con equipos en una red local, seguro que nos encontramos con la necesidad de permitir que ciertos equipos accedan al disco duro de un equipo remoto. Una de las formas de hacerlo es utilizar NFS (Network File System). Utilizando NFS podemos exportar un directorio de un equipo (servidor) para que sea utilizado por otros equipos (clientes) tanto en modo solo lectura como de lectura-escritura.

Para instalarlo solo hay que teclear el siguiente comando:

sudo apt-get install nfs-kernel-server nfs-common portmap

Para tener una idea de qué acabamos de instalar, puedo deciros que portmap sirve para transformar identificadores de programa RPC en direcciones DARPA. Para ver un ejemplo de funcionamiento, se puede ejecutar el siguiente comando:

abian@server:~$ rpcinfo -p
program vers proto   port
100000    2   tcp    111  portmapper
100000    2   udp    111  portmapper
100024    1   udp  39034  status
100024    1   tcp  58076  status
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100021    1   udp  34156  nlockmgr
100021    3   udp  34156  nlockmgr
100021    4   udp  34156  nlockmgr
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100021    1   tcp  44829  nlockmgr
100021    3   tcp  44829  nlockmgr
100021    4   tcp  44829  nlockmgr
100005    1   udp  49504  mountd
100005    1   tcp  46117  mountd
100005    2   udp  49504  mountd
100005    2   tcp  46117  mountd
100005    3   udp  49504  mountd
100005    3   tcp  46117  mountd

Por otra parte, nfs-common contiene los binarios necesarios para utilizar el servicio NFS tanto en el cliente como en el servidor (lockd, statd, showmount, y nfsstat). Nfs-kernel-server contiene el soporte para el kernel de linux necesario para poder transformar nuestro equipo en un servidor NFS. Por supuesto, este último paquete no será necesario en el cliente.

Ahora está claro lo que se ha instalado, se puede pasar a la correcta configuración del servidor. Para ello hay que editar tres ficheros.

  1. El fichero /etc/exports contendrá una línea por cada directorio que se desee exportar. Por ejemplo, con el siguiente contenido estaríamos indicando que el equipo con la IP 192.168.10.25 tiene acceso de lectura y escritura al directorio /home/abian/test/ mientras que el equipo con la IP 192.168.10.26 tan sólo tiene acceso de lectura. He utilizado la opción no_subtree_check porque es la opción por defecto para la comprobación de subdirectorios pero puede que no sea la más aconsejable para un entorno de producción:

    abian@server:~$ cat /etc/exports
    /home/abian/test       192.168.10.25(rw,sync,no_subtree_check) 192.168.10.26(ro,sync,no_subtree_check)


    Éste es el ejemplo más sencillo, se puede exportar un directorio a una subred, utilizar opciones de mapeo de usuarios, escrituras asíncronas… Para ver más información y ejemplos útiles recomiendo (como siempre) utilizar el comando man:

    abian@server:~$ man exports

  2. El fichero /etc/hosts.allow contiene las directivas necesarias para controlar qué equipos acceden a qué servicios. En este caso tenemos que incluir dos líneas para que el sistema funcione.

    abian@server:~$ cat /etc/hosts.allow
    portmap:192.168.10.0/255.255.255.0
    nfs:192.168.10.0/255.255.255.0

    Con estas dos líneas estamos indicando que permita el acceso a todos los equipos de la subred 192.168.10.0 a los servicios portmap y nfs.

  3. El último fichero de configuración está relacionado con el anterior pero tiene justo la utilidad contraria. En /etc/hosts.deny hay que escribir las directivas adecuadas para impedir el acceso de algunos equipos a determinados servicios. Para hacer que Ramiro se sienta orgulloso de mi, voy a hacer publicidad de una de las mejores políticas de seguridad que conozco: “Permitir a todos y denegar a unos pocos” “Permitir a unos pocos y denegar al resto”. Por lo tanto en este archivo tan sólo debe aparecer la línea ALL: PARANOID.

    abian@server:~$ cat /etc/hosts.deny
    ALL: PARANOID

El servidor está completamente configurado. Para aplicar los cambios realizados en los distintos archivos de configuración, es recomendable/necesario reiniciar los servicios relacionados:

abian@server:~$ sudo /etc/init.d/portmap restart
abian@server:~$ sudo /etc/init.d/nfs-kernel-server restart

Para hacer una última comprobación se puede utilizar el comando exportfs:

abian@server:~$ exportfs
/home/abian/test
192.168.10.25
/home/abian/test
192.168.10.26

El siguiente paso es probar que realmente lo que hemos configurado funciona. Para ello hay que utilizar alguna máquina cliente (recordando que debe tener la IP 192.168.10.25 o 192.168.10.26) y utilizar el comando:

abian@client:~$ sudo apt-get install nfs-common
abian@client:~$ mkdir test
abian@client:~$ mount -t nfs server  /home/client/test/

Siempre es más cómodo utilizar para estos menesteres el fichero /etc/fstab. La línea necesaria en este fichero sería la siguiente:

server:/home/abian/test /home/client/test nfs timeo=10,intr

¿Algunas recomendaciones extras?

  • Muchos de los problemas de seguridad en las redes de las organizaciones o empresas vienen por el uso incorrecto de los servicios RPC o por vulnerabilidades en dichos servicios. Recomiendo encarecidamente mantener actualizado el software del servidor, tanto del kernel como del resto de los servicios. Además, el firewall se convierte en un elemento más importante si cabe (y sí, cabe) para impedir que se accedan a los servicios nfs y RCP desde el exterior de nuestra red local.
  • El sistema se puede hacer un lío con los identificadores de usuarios si intentamos escribir en el directorio que hemos exportado con un usuario que no existe en el servidor o algo similar. La utilización de un sistema centralizado de credenciales de usuario como LDAP podría solventar esta situación. Pero hasta que saque un rato para escribir un post sobre OpenLDAP os recomiendo la utilización de mappings de usuarios en la configuración del archivo /etc/exports. Utilizando anonuid=190 y anongid=110 podéis hacer creer al sistema que 190 es el user id del usuario anónimo pero puede corresponder al propietario del directorio que se está exportando. Lo mismo sucede con el anongid. El tercer y el cuarto campo del fichero /etc/passwd contienen respectivamente el identificador de usuario y grupo.

Espero que os haya resultado de utilidad. Un saludo