Cómo hacer que una máquina sea accesible desde la LAN utilizando su nombre de host

120

Aquí están los detalles de la máquina a la que quiero acceder usando su nombre de host:

$ hostname
hostname
$ cat /etc/hosts
127.0.0.1   localhost
127.0.1.1   hostname.company.local  hostname

Es una instalación predeterminada de Debian 6 (Squeeze), por lo que todavía no toqué nada.

Esto es lo que obtengo de una máquina (que ejecuta Debian Unstable) que intenta acceder a la máquina anterior:

$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local
tshepang
fuente
Debe hacer algo en el cliente (la máquina donde ejecuta ping) o en una máquina que el cliente consulta. ¿Cuál es el sistema operativo en el cliente? ¿Cuál es su configuración de DNS?
Gilles
¿Qué es una configuración de DNS? Además, vea la publicación actualizada.
tshepang
1
¿Es mi respuesta el tipo de cosas que buscabas? Si es así, la pregunta debe simplificarse: ¿quién sabe pingy /etc/hostsno el DNS de todos modos?
Gilles
Muchas gracias. Echaré un vistazo. Ah, y es más un artículo que una respuesta :)
tshepang
3
La respuesta es "instalar y configurar dnsmasq". Hecho. :)
Warren Young

Respuestas:

145

En Internet, incluidas las redes locales, las máquinas se llaman entre sí por direcciones IP . Para acceder a la máquina B desde la máquina A utilizando el nombre de la máquina B, la máquina A debe tener alguna forma de asignar el nombre de B a su dirección IP. Hay tres formas de declarar nombres de máquinas en A:

  • Un archivo de hosts . Este es un archivo de texto simple que asigna nombres a direcciones.
  • El sistema de nombres de dominio (DNS) . Este es el método utilizado en Internet global. Por ejemplo, cuando carga esta página en un navegador, lo primero que hace su computadora es hacer una solicitud de DNS para conocer la dirección unix.stackexchange.com.
  • otras bases de datos de nombres como NIS , LDAP o Active Directory . Estos se usan en algunas redes corporativas, pero no muy a menudo (muchas redes que usan NIS, LDAP o AD para bases de datos de usuarios usan DNS para nombres de máquinas). Si su red utiliza uno de estos, tiene un administrador de red profesional y debe preguntarle qué hacer.

Hay muchas maneras en que estos pueden funcionar en la práctica; Es imposible cubrirlos a todos. En esta respuesta, describiré algunas situaciones comunes.

Archivo de hosts

El método de archivo de hosts tiene la ventaja de que no requiere ningún método especial. Puede ser engorroso si tiene varias máquinas, porque debe actualizar cada máquina cuando cambia el nombre de una máquina. No es adecuado si la dirección IP de B se asigna dinámicamente (de modo que obtenga una diferente cada vez que se conecte a la red).

Un archivo de hosts es una lista simple de líneas que asignan nombres a direcciones IP. Se parece a esto:

127.0.0.1       localhost localhost.localdomain
198.51.100.42   darkstar darkstar.bands

En sistemas unix, el archivo hosts es /etc/hosts. En Windows, es c:\windows\system32\drivers\etc\hosts. Casi todos los sistemas operativos que puede conectar a Internet tienen un archivo similar; Wikipedia tiene una lista .

Para agregar una entrada para B en el archivo de hosts de A:

  1. Determine la dirección IP de B. En B, ejecute el comando ifconfig(si no encuentra el comando, intente /sbin/ifconfig). La salida contendrá líneas como esta:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab
              inet addr:10.3.1.42  Bcast:10.3.1.255  Mask:255.255.255.0
    

    En este ejemplo, la dirección IP de B es 10.3.1.42. Si hay varias inet addr:líneas, elija la que corresponda a su tarjeta de red, nunca la loentrada o un túnel o entrada virtual.

  2. Edite el archivo de hosts en A. Si A está ejecutando algún sistema Unix, deberá editarlo /etc/hostscomo superusuario; vea ¿Cómo ejecuto un comando como administrador del sistema (root) ?

DHCP + DNS en redes domésticas o de oficinas pequeñas

Este método es, con mucho, el más simple si tiene el equipo necesario. Solo necesita configurar un dispositivo, y todas sus computadoras sabrán los nombres de cada uno. Este método asume que sus computadoras obtienen sus direcciones IP a través de DHCP , que es un método para que las computadoras recuperen automáticamente una dirección IP cuando se conectan a la red. Si no sabe qué es DHCP, probablemente lo sepan.

Si su red tiene un enrutador doméstico , es el mejor lugar para configurar nombres para máquinas conectadas a ese enrutador. Primero, necesita averiguar la dirección MAC de B. Cada dispositivo de red tiene una dirección MAC única. En B, ejecute el comando ifconfig -a(si no se encuentra el comando, intente /sbin/ifconfig -a). La salida contendrá líneas como esta:

    eth1      Link encap:Ethernet  HWaddr 01:23:45:67:89:ab

En este ejemplo, la dirección MAC es 01:23:45:67:89:ab. Debe elegir la línea HWaddr que corresponde al puerto de red que está conectado al enrutador a través de un cable (o la tarjeta wifi si está conectado a través de wifi). Si tiene varias entradas y no sabe cuál es cuál, conecte el cable y vea qué dispositivo de red recibe una dirección IP ( inet addrlínea justo debajo).

Ahora, en la interfaz web de su enrutador, busque una configuración como "DHCP". El nombre y la ubicación de la configuración dependen completamente del modelo de enrutador, pero la mayoría tiene un conjunto similar de configuraciones básicas. Esto es lo que parece en un firmware de tomate :

captura de pantalla de tomate

Ingrese la dirección MAC, una dirección IP y el nombre deseado. Puede elegir cualquier dirección IP en el rango de direcciones de su red local. La mayoría de los enrutadores domésticos están preconfigurados para un rango de direcciones del formulario 192.168. x . y o 10. x . y . z . Por ejemplo, en el enrutador de tomate que se muestra arriba, en la pestaña "Red", hay una configuración de "dirección IP de enrutador" con el valor 10.3.0.1 y una configuración de "máscara de subred" con el valor 255.255.255.0, lo que significa que las computadoras en la red local debe tener una dirección del formulario 10.3.0. z . También hay un rango de direcciones para direcciones DHCP asignadas automáticamente (10.3.0.129–10.3.0.254); para su dirección DHCP asignada manualmente, elija una que no esté en este rango.

Ahora conecte B a la red, y debería obtener la dirección IP que especificó y será accesible por el nombre especificado desde cualquier máquina en la red.

Crea tu propio servidor DNS con Dnsmasq

Si no tiene un enrutador doméstico capaz, puede configurar la misma funcionalidad en cualquier máquina Linux. Explicaré cómo usar Dnsmasq para configurar DNS . Hay muchos otros programas similares; Elegí Dnsmasq porque es fácil de configurar y liviano (es lo que usa el enrutador de tomate ilustrado anteriormente, por ejemplo). Dnsmasq está disponible en la mayoría de las distribuciones de Linux y BSD para PC, servidores y equipos de red.

Elija una computadora que siempre esté encendida, que tenga una dirección IP estática y que ejecute algún tipo de Linux o BSD; vamos a llamarlo S (para servidor). En S, instale el dnsmasqpaquete (si aún no está allí). A continuación supondré que el archivo de configuración es /etc/dnsmasq.conf; la ubicación puede variar en alguna distribución. Ahora necesitas hacer varias cosas.

  • Dígale a Dnsmasq que sirva sus nombres de host además de los que obtiene de Internet. La forma más sencilla es ingresar los nombres y las direcciones IP en /etc/hosts(consulte la sección "Archivo de hosts" más arriba) y asegurarse de que /etc/dnsmasq.confno tenga la no-hostsdirectiva sin comentarios. (Las líneas que comienzan con a #están comentadas). Puede poner los nombres en un archivo diferente; si lo haces, pon una línea addn-hosts=/path/to/hosts/fileadentro /etc/dnsmasq.conf.
  • Dígale a Dnsmasq cómo obtener direcciones IP para nombres de máquinas en Internet.

    • Si está ejecutando Debian, Ubuntu o un derivado, instale el resolvconfpaquete. En los casos más comunes, todo saldrá de la caja.
    • Si su administrador de red o su ISP le dieron las direcciones de los servidores DNS, ingréselas /etc/dnsmasq.conf, por ejemplo:

      server=8.8.8.8
      server=8.8.4.4
      
    • Si no sabe cuáles son sus configuraciones DNS actuales, busque en el archivo /etc/resolv.conf. Si ve una línea como nameserver 8.8.8.8, ponga una línea server=8.8.8.8adentro /etc/dnsmasq.conf. Después de haber cambiado /etc/dnsmasq.conf, reinicie Dnsmasq. El comando para hacerlo depende de la distribución; Las posibilidades típicas incluyen restart dnsmasqo /etc/init.d/dnsmasq restart.

  • Dígale a S que use el servicio Dnsmasq para todas las solicitudes de nombre de host. Edite el archivo /etc/resolv.conf(como raíz), elimine cada nameserverlínea y colóquelo en su nameserver 127.0.0.1lugar.
    • Si está utilizando resolvconf en Debian o Ubuntu, /etc/resolv.confpuede ser subóptimo si instaló el resolvconfpaquete con la red en funcionamiento. Asegúrese de que los archivos base, heady tailen el /etc/resolvconf/resolv.conf.d/directorio no contengan ninguna nameserverentrada, luego ejecute resolvconf -u(como root).
  • Dígale a las otras máquinas que usen S como el servidor DNS. Edite /etc/resolv.confy reemplace todas las nameserverlíneas con una sola nameserver 10.3.0.2donde 10.3.0.2 es la dirección IP de S (vea arriba para saber cómo encontrar la dirección IP de S).

También puede usar Dnsmasq como un servidor DHCP , para que las máquinas puedan obtener la dirección correspondiente a su nombre automáticamente. Esto está más allá del alcance de esta respuesta; consulte la documentación de Dnsmasq (no es difícil). Tenga en cuenta que solo puede haber un único servidor DHCP en una red local determinada (la definición exacta de red local está más allá del alcance de esta respuesta).

Nombres en Internet global

Hasta ahora, he asumido una red local. ¿Qué pasa si quieres darle un nombre a una máquina que está en un rincón diferente del mundo? Todavía puede usar cualquiera de las técnicas anteriores, excepto que las partes que involucran DHCP solo son aplicables dentro de una red local. Alternativamente, si sus máquinas tienen direcciones IP públicas, puede registrar su propio nombre público para ellas. (También puede asignar una dirección IP privada a un nombre público; es menos común y menos útil, pero no hay dificultad técnica).

Obteniendo su propio nombre de dominio

Puede obtener su propio nombre de dominio y asignar direcciones IP a los nombres de host dentro de este dominio. Debe registrar el nombre de dominio con un proveedor de nombres de dominio; esto generalmente cuesta $ 10– $ 15 / año (para los dominios más baratos). Use la interfaz web de su proveedor de nombres de dominio para asignar direcciones a los nombres de host.

DNS Dinámico

Si sus máquinas tienen una dirección IP dinámica, puede usar el protocolo DNS dinámico para actualizar la dirección IP asociada al nombre de la máquina cuando la dirección cambie. No todos los proveedores de nombres de dominio admiten DNS dinámico, así que compre antes de comprar. Para uso personal, No-IP proporciona un servicio DNS dinámico gratuito, si utiliza sus propios dominios (por ejemplo example.ddns.net).

Gilles
fuente
Cree su propio servidor DNS con Dnsmasq: ¿cómo puedo decirle a otra máquina que use S, cuando la otra máquina tiene Windows instalado?
Radu Rădeanu
@Radu Puede cambiar los servidores DNS asociados con una conexión a través del panel de control en alguna parte. Creo que necesita extraer las propiedades de conexión de la interfaz de red.
Gilles
Agregué c: \ windows \ system32 \ drivers \ etc \ hosts y funciona. ¡Gracias!
Radu Rădeanu
Estaba arrancándome el pelo buscando esto y lo encontré en el enrutador como sugeriste. ¡Gracias por la información detallada!
Jason Turan
Si se trata de una red de empresa, tengo que decirle al departamento de infraestructura. agregar mi linux mac a la lista de servidores DNS, ¿verdad?
WesternGun
24

Use DNS de multidifusión (mDNS). Este es un protocolo de configuración cero que funciona en subredes LAN. No se requiere servidor. Utiliza el .localTLD (que es lo que ya usa).

Porque estás preguntando, todo lo demás parece excesivo. Si no fuera así, entonces probablemente no estarías preguntando.

tne
fuente
1
mDNS no parece ser compatible con Windows sin instalar algo en cada cuadro de Windows.
Zitrax
1
@Zitrax Buen punto (aunque este es un sitio * nix). La información relevante para la configuración de Windows se puede encontrar allí , relativamente sencilla.
TNE
3
Aka Zeroconf o Bonjour. Proporcionado por avahipaquete (s). Puede consultar su red a través de, avahi-browse -alrpor ejemplo.
DanMan
4
vi /etc/dhcp3/dhclient.conf

send host-name "ubuntu-laptop";

y

/etc/init.d/networking restart
LanceBaynes
fuente
¿Debo ejecutar esto en el cliente o host?
tshepang
El primer bit se haría en el servidor dhcp (y desearía ejecutarlo service restart dhcpd). La segunda parte se haría en el cliente, y en la mayoría de las distribuciones ahora debería ejecutarse como service networking restart.
Caleb
Como recuerdo, solo necesito ejecutar esto en el lado del cliente ..
LanceBaynes
3

Las computadoras no solo saben mágicamente qué nombres de host pertenecen a los destinatarios de IP. Incluso en localhost, hay algún tipo de búsqueda involucrada.

Deberá configurar sus otros sistemas para utilizar algún tipo de servicio de búsqueda de nombres. Esto puede estar /etc/hostsen el cliente, ldap, nsswitch o servidores DNS normales. Uso binde ingreso todas las máquinas locales dentro de un dominio local, luego hago que sirva DNS para ese sitio.

Caleb
fuente