jueves, julio 12, 2007

Publicación de servicios usando multicast DNS en Linux: Avahi

Cuando se trabaja en entornos de direcciones dinámicas IP (DHCP), o en pequeñas redes donde no existe un servidor que asigne las mismas, es un poco complicado:
  • Asignar direcciones IP al sistema. Para el usuario lo ideal, sería llegar, enchufar el cable de red o activar su tarjeta WIFI, se asigna la dirección IP, la dirección del router por defecto, los DNS, etc
  • Sea fácil descubrir aquellos servicios que están corriendo en la red local a la cual el usuario se ha conectado
. Tanto Apple como Microsoft empezaron a implementar un protocolo que permitía la configuración de direcciones en ausencia de un servidor de DHCP en la red. Este protocolo asigna las mismas en el rango 169.254.0.0/16. Esto quedó al final definido en la RFC 3927. Sin embargo, el paso era ir más allá, de tal manera que fuera posible descubrir servicios.

Por ejemplo, durante mucho tiempo, Microsoft permitía ver que servicios de ficheros e impresoras tenía disponible un equipo que estuviese corriendo Windows. Sin embargo, estaba ligado al protocolo SMB y era propietario. Apple sin embargo, decidió apostar por Multicast DNS y DNS Service Discovery. De esta manera, con programas como Bonjour browser (MacOS X) el usuario puede ver que servicios está corriendo una máquina determinada en la red local a la cual está conectada, como puede verse en la siguiente captura:

Bonjour Browser

A la hora de usar este tipo de servicios en un entorno Linux se puede recurrir a Avahi, una implementación libre de los protocolos (aunque el mDNSResponder de Apple está también está disponible con licencia libre). La idea de uso de este tipo de sistemas, al menos donde estoy trabajando ahora, es poder publicar servicios como el ssh en máquinas que usan DHCP para asignar direcciones, y que nada me garantiza que vayan a tener la misma dirección al día siguiente.

En Debian es bastante sencillo de instalar: es el paquete avahi-deamon. Una vez instalado a través de apt-get, tenemos que configurar el fichero /etc/avahi/avahi-daemon.conf, donde se introduce el nombre que se le desea dar a la máquina y al dominio que pertenece, que debe ser local. El resolver de multicast DNS de avahi sólo resolverá nombres que pertenezcan a dicho dominio:

...
[server]
host-name=baldurgate
domain-name=local
...
Por otra parte, hay que ver qué servicios se tienen que publicar. En el caso de la instalación de Debian, estos ficheros de servicios están localizados en /etc/avahi/services/, son ficheros XML que indican la zona de DNS donde se instalan, el nombre del servicio y el puerto que utilizan. Por ejemplo, para el caso de ssh sería:
<service-group>

  <name replace-wildcards="yes">Remote Terminal on %h</name>

  <service>
    <type>_ssh._tcp</type>
    <port>22</port>
  </service>

</service-group>

Actualización

Existe otra ventaja de usar este tipo de servicios. Si el resolver del sistema lo permite, se puede uno conectar por el nombre que hemos asignado al usar Avahi, Así por ejemplo, si tenemos un server que publica su nombre como baldurgate.local, podremos conectarnos a él haciendo un simple ssh baldurgate.local.

El mecanismo de multicast DNS se encargará de resolver el nombre :)

Technorati Tags: , ,

No hay comentarios: