Cómo resolver nombre de máquinas Linux (Ubuntu) en una red local

En casa tengo una red local con varios PCs y algunas máquinas virtuales, principalmente con Windows y Linux. En el CPE tengo configurado DHCP para asignación de IPs. Pura comodidad.

Para poder conectarme de una máquina a otra conociendo sólo el hostname es necesario que haya una resolución del hostname. En mi caso, me encontré con el siguiente escenario:

  • Máquina Windows resuelve hostname de otra máquina Windows.
  • Máquina Windows no resuelve hostname de una máquina Linux.
  • Máquina Linux no resuelve hostname de una máquina Windows.
  • Máquina Linux no resuelve hostname de una máquina Linux.

Para poder dar resolución de hostnames en la red, tuve que hacer lo siguiente:

1. Cómo hacer que máquina Windows resuelva hostname de máquina Linux (Ubuntu)

En este caso la solución es instalar el paquete winbind en la máquina Linux (destino), para que utilice el protocolo NetBIOS de Windows y publique su resolución de nombres.

sudo apt-get install winbind

Una vez instalado, el fichero /etc/nsswitch.conf habrá añadido la palabra wins en la entrada de hosts. El fichero tendrá una pinta así:

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files wins dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Con esto, ya deberías de poder hacer ping a la máquina Linux desde una máquina Windows y resolver correctamente su hostname.

2. Cómo hacer que máquina Linux (Ubuntu) resuelva hostname de máquina Linux (Ubuntu)

Para este tema tuve que instalar en ambas máquinas Linux el paquete avahi-daemon . Con este paquete, ya se resuelven los hostnames añadiendo el sufijo «.local».

Esto probablemente te modificará el fichero /etc/nsswitch.conf de ambas máquinas y dejará la línea de hosts así:

hosts: files wins mdns4_minimal [NOTFOUND=return] dns mdns4

Con esto, ya debes de poder resolver nombres entre máquinas Linux con el hostname estilo «.local»:

[23:04:02] yvoictra|trinity:~$ ping tesla.local
PING tesla.local (192.168.1.111) 56(84) bytes of data.
64 bytes from tesla.local (192.168.1.111): icmp_seq=1 ttl=64 time=0.455 ms
64 bytes from tesla.local (192.168.1.111): icmp_seq=2 ttl=64 time=0.524 ms
64 bytes from tesla.local (192.168.1.111): icmp_seq=3 ttl=64 time=0.489 ms
64 bytes from tesla.local (192.168.1.111): icmp_seq=4 ttl=64 time=0.499 ms

Y ahora queda poder resolver máquinas Windows desde máquinas Linux. De momento no he encontrado la manera de hacerlo… pero seguiré investigando. Cuando lo consiga actualizaré el post (Si alguien me echa un cable os lo agradeceré…).

En resumen, el tema en mi red local ha quedado:

  • Máquina Windows resuelve hostname de otra máquina Windows.
  • Máquina Windows resuelve hostname de una máquina Linux.
  • Máquina Linux no resuelve hostname de una máquina Windows.
  • Máquina Linux resuelve hostname de una máquina Linux.

¡Y esto es todo amigos!

Cómo cambiar el hostname del equipo a través de la shell (Ubuntu / Linux)

Prerrequisito: Utilizar el usuario root ó bien tener permisos para utilizar sudo con otro usuario.

Para cambiar el nombre de una máquina Linux (hostname) a través de la shell (CLI) hay que hacer dos cosas.

1. Editar el fichero de configuración hostname:

# sudo vi /etc/hostname

En este fichero sólo hay una palabra, que define el hostname de la máquina.

2. Editar el fichero hosts:

# sudo vi /etc/hosts

Que tendrá un aspecto similar:
change_hostname
Lo que hay que modificar es la línea de la IP 127.0.1.1, y cambiar la palabra que sigue a la IP (Que es el nombre de la máquina, en este caso trinity).

Por último, y para que surta efecto este cambio, es necesario reiniciar el sistema. Para ello haremos un reboot:

# sudo reboot

¡Y listo!

Obtener hostname y demás info de un equipo remoto a través de la IP

nmap_logo_vx

En más de una ocasión me he encontrado ante la duda de qué máquina hay detrás de una IP. Siempre hay herramientas que nos pueden ayudar con este tema, y aquí os presento la que yo utilizo: el fantástico nmap. La verdad es que hay pocas herramientas tan útiles…

Lo que me suele ayudar para identificar máquinas, es buscando el hostname, que te lo devuelve el campo «Service Info«.

[root@host01:~]# nmap -A 10.114.99.29
Starting Nmap 4.11 ( http://www.insecure.org/nmap/ ) at 2014-03-03 17:14 CET
Interesting ports on sede1-10-114-99-29.wnet (10.114.99.29):
Not shown: 1673 closed ports
PORT     STATE SERVICE    VERSION
21/tcp   open  ftp        OpenBSD ftpd 6.4 (Linux port 6.4)
22/tcp   open  ssh         (protocol 2.0)
80/tcp   open  http       Microsoft IIS webserver 7.5
111/tcp  open  rpcbind     2 (rpc #100000)
3128/tcp open  http-proxy Squid webproxy 3.1.20
6000/tcp open  X11        X.Org (open)
8080/tcp open  http       Microsoft IIS webserver 6.0
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at http://www.insecure.org/cgi-bin/servicefp-submit.cgi :
SF-Port22-TCP:V=4.11%I=7%D=3/3%Time=5314AA54%P=i686-suse-linux-gnu%r(NULL,
SF:20,"SSH-2\.0-OpenSSH_6\.0p1\x20Debian-4\r\n");
Device type: general purpose
Running: Linux 2.4.X
OS details: Linux 2.4.18 - 2.4.27
Service Info: Host: host39.cosmos.es.ftgroup; OSs: Linux, Windows, Unix

Nmap finished: 1 IP address (1 host up) scanned in 13.901 seconds