Hay una manera de hacerlo con un pequeño script para un gancho dhcp como se describe aquí .
Crea un nuevo archivo:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
y pegue el siguiente código:
#!/bin/sh
# Filename: /etc/dhcp/dhclient-exit-hooks.d/hostname
# Purpose: Used by dhclient-script to set the hostname of the system
# to match the DNS information for the host as provided by
# DHCP.
#
# Do not update hostname for virtual machine IP assignments
if [ "$interface" != "eth0" ] && [ "$interface" != "wlan0" ]
then
return
fi
if [ "$reason" != BOUND ] && [ "$reason" != RENEW ] \
&& [ "$reason" != REBIND ] && [ "$reason" != REBOOT ]
then
return
fi
echo dhclient-exit-hooks.d/hostname: Dynamic IP address = $new_ip_address
hostname=$(host $new_ip_address | cut -d ' ' -f 5 | sed -r 's/((.*)[^\.])\.?/\1/g' )
echo $hostname > /etc/hostname
hostname $hostname
echo dhclient-exit-hooks.d/hostname: Dynamic Hostname = $hostname
Reemplace eth0
y wlan0
con los nombres de las interfaces de las que desea obtener el nombre de host. En la mayoría de los casos eth0
y wlan0
debe permanecer igual.
Asegúrese de que sea legible ...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
Eso es todo. En la siguiente respuesta dhcp, su nombre de host se actualizará automáticamente.
host
comando) para extraer el nombre de host asociado con la dirección IP asignada. Los servidores DHCP pueden establecer explícitamente una opción de nombre de host (opción 12), que puede ser potencialmente diferente del nombre de host que obtiene de una consulta DNS en la IP (esto también podría fallar, si no existe un registro PTR para la IP en el DNS )Usted puede obtener su nombre de host de su servidor DHCP - es parte de la especificación DHCP.
https://tools.ietf.org/html/rfc1533#section-3.14
"Esta opción especifica el nombre del cliente"
fuente
La respuesta de d_inevitable casi resolvió mi problema, pero no completamente. El problema fue que aunque:
El servidor DHCP estaba enviando un nombre de host (agregando el
en dhcpd.conf) y en realidad lo verifiqué capturando y analizando los contenidos de la oferta de DHCP con wireshark
El cliente DHCP esperaba el nombre de host del servidor DHCP (agregando
en el dhclient.conf)
El cliente no estaba recibiendo un nuevo nombre de host (se verificaba fácilmente escribiendo
en terminal y obteniendo el antiguo nombre de host, o sin nombre de host si hubiera eliminado el contenido / archivo). Como resultado, la solución propuesta por d_inevitable solo estaba copiando una cadena vacía.
Para resolver eso, apliqué una solución cruda, que generalmente no debe seguirse a menos que esté desesperado por hacerlo funcionar, como lo estaba yo.
Primero, abra con capacidad de edición el script de control de cliente DHCP:
Allí, deberás ubicar la función
Simplemente use la búsqueda y debería aparecer de inmediato. Ahora, al menos en mi computadora, esta función tiene tres condiciones if-then-else, encapsuladas entre sí:
Ahora, lo que necesita es forzar la asignación del nuevo nombre de host a su host, pase lo que pase. Por lo tanto, desea comentar los dos encapsulados if-then-else. El resultado debería ser similar a:
Ahora el d_inevitable o esto debería funcionar como se esperaba. Espero que ayude si estás en una frustración desesperada similar a la mía.
fuente
La respuesta de Oli es demostrablemente falsa ("No obtiene su nombre de host del servidor DHCP"), como lo demuestran las otras respuestas aquí, y también por mi experiencia reciente en un sistema RHEL7. Dicho sistema obtuvo su nombre de host del servidor DHCP.
Y, de hecho, hay cosas en los archivos de configuración de DHCP que se supone que lo hacen posible. Por ejemplo:
Se supone que debe decirle a ese host que su nombre es host4.
¡Resulta que el cliente de ISC NO APARECE PARA APOYAR ESTO!
Sin embargo, dhcpcd5 lo hace, fuera de la caja. Detenga dhclient, instale dhcpcd5, ejecute dhcpcd, renueve su contrato de arrendamiento y, su nombre de host en su cliente DHCP está configurado con el nombre enviado desde el servidor DHCP. Sin
dhclient-exit-hooks.d
secuencias de comandos, sin hacksrc.local
, nada.Como nota final, he pasado mucho tiempo tratando de hacer que esto funcione usando dhclient de ISC. Absolutamente nada de alegría, incluso cuando el servidor envía el nombre del host.
Mi solución inicial al problema fue escribir un código lindo
rc.local
para detectar cuándo surgió la red y forzar una búsqueda (en mi caso)/etc/hosts
para obtener el nombre de host y luego ejecutarlohostname
con ese nombre de host. Funciona, pero hasta que aparezca la red, su nombre de host probablemente sea incorrecto (cuando despliegue un host por primera vez, lo elimino/etc/hostname
, por lo que el nombre del host eslocalhost
hasta que pueda ejecutar/etc/init.d/hostname.sh start
una vez que la red aparece, por lo que al obtener un nuevo nombre debe iniciar dos veces: una vez para obtener su nombre de host, y una vez para tener ese nombre disponible cuando todo se inicia ...).fuente
No obtiene su nombre de host del servidor DHCP.
Puede enviar su nombre de host al servidor, lo que puede cambiar la IP que le fue asignada. Puede cambiar el nombre que se envía editando su conexión de Network Manager (el campo se llama DHCP Client ID) o puede editar (como root)
/etc/dhcp/dhclient.conf
. Busque la línea que dice:... y cambia
<hostname>
a lo que quieras.Por defecto, Ubuntu obtendrá su configuración de DNS del enrutador (si los envía), pero sospecho que está hablando de DNS / mDNS locales donde puede acceder a otras computadoras por su nombre de host. Esto se llama Ahavi o Zeroconf en Ubuntu y se instala por defecto.
Debería poder acceder a su computadora
<hostname>.local
fuente
hostname
y dominio escribiendohostname -d
. entonces fqdn debería ser hostname.domainsend host-name "example.com";
fin de obtener una dirección IP específica, también puede solicitar unarequest host-name;
.Si se encuentra, puede ser un error de scripts dhcpclient. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
Intenta limpiar $ old_host_name en ip renove
También static / etc / hostname parece tener prioridad sobre la respuesta dhcp, así que déjelo vacío
Probado en ubuntu 14.04 y servidor dnsmasq.
fuente
Tenga en cuenta que cuando se usa Ubuntu 18.04, las secuencias de comandos vinculadas ya no son necesarias. Si el nombre de host de la instalación está configurado
localhost
en/etc/hostname
el cliente DHCP, se establecerá el nombre de host automáticamente al inicio utilizando el nombre emitido por DHCP, si está presente. Cuando se ejecutehostnamectl
, aparecerálocalhost
como el nombre de host permanente, y cualquier cosa que DHCP emita como un nombre de host transitorio.fuente
La respuesta depende de si está utilizando o no arrendamientos estáticos en su servidor DHCP. Si es así, no es necesario obtener el nombre de host del DNS. Puedes cambiar esta línea en la solución de d_inevitable
a
Pero esto debería suceder automáticamente si su nombre de host está configurado originalmente en localhost.localdomain, por lo que no tiene que escribir un script. Sin embargo, si desea establecer el nombre de host en el FQDN, deberá cambiar el script de d_inevitable a
Nuevamente, todo esto solo funciona si está utilizando arrendamientos estáticos.
fuente
No tengo suficiente reputación para comentar, pero me gustaría aprovechar la respuesta anterior, ya que casi me solucionó el problema usando un gancho dhclient.
Descubrí que al usar el servidor DHCP ISC estándar por alguna razón, el enlace mencionado anteriormente genera un nombre de host con un '.' carácter de punto al final del nombre de host por algún motivo.
Entonces, en la respuesta anterior, es posible que necesite "cortar" el período extraño con un sed:
Se convertiría:
fuente