Il existe un moyen de le faire avec un petit script pour un hook dhcp comme décrit ici .
Créez un nouveau fichier:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
et collez le code suivant:
#!/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
Remplacez eth0
et wlan0
par les noms des interfaces à partir desquelles vous souhaitez obtenir le nom d'hôte. Dans la plupart des cas eth0
et wlan0
devrait rester le même.
Assurez-vous qu'il est lisible ...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
C'est tout. Lors de la prochaine réponse DHCP, votre nom d'hôte sera mis à jour automatiquement.
host
commande) pour extraire le nom d'hôte associé à l'adresse IP attribuée. Les serveurs DHCP peuvent en fait définir explicitement une option de nom d'hôte (option 12), qui peut potentiellement être différente du nom d'hôte que vous obtenez à partir d'une requête DNS sur l'IP (cela pourrait également échouer, si aucun enregistrement PTR pour l'IP n'existe sur le DNS )Vous pouvez obtenir votre nom d'hôte depuis votre serveur DHCP - cela fait partie de la spécification DHCP.
https://tools.ietf.org/html/rfc1533#section-3.14
"Cette option spécifie le nom du client"
la source
La réponse de d_inevitable a presque résolu mon problème, mais pas complètement. Le problème était que bien que:
Le serveur DHCP envoyait un nom d'hôte (en ajoutant le
dans le fichier dhcpd.conf) et je l'ai vérifié en capturant et en analysant le contenu de l'offre DHCP avec wirehark
Le client DHCP attendait le nom d'hôte du serveur DHCP (en ajoutant
dans le dhclient.conf)
Le client n'obtenait pas de nouveau nom d'hôte (facilement vérifié en tapant
dans le terminal et obtenir l'ancien nom d'hôte, ou pas de nom d'hôte si j'avais supprimé le contenu / fichier). En conséquence, la solution proposée par d_inevitable ne copiait qu'une chaîne vide.
Pour résoudre cela, j'ai appliqué une solution crud, qui ne devrait généralement pas être suivie sauf si vous êtes désespéré de le faire fonctionner, comme moi.
Tout d'abord, ouvrez avec une capacité d'édition le script de contrôle client DHCP:
Là, vous devrez localiser la fonction
Utilisez simplement la recherche et elle devrait apparaître. Maintenant, au moins sur mon ordinateur, cette fonction a trois conditions if-then-else, encapsulées les unes aux autres:
Maintenant, ce dont vous avez besoin est de forcer l'attribution du nouveau nom d'hôte à votre hôte, quoi qu'il arrive. Par conséquent, vous voulez commenter les deux if-then-else encapsulés. Le résultat devrait ressembler à quelque chose comme:
Maintenant, le d_inevitable ou cela devrait fonctionner comme prévu. J'espère que cela vous aidera si vous êtes dans une frustration désespérée similaire à la mienne.
la source
La réponse d'Oli est manifestement fausse ("Vous ne recevez pas votre nom d'hôte du serveur DHCP"), comme en témoignent les autres réponses ici, et aussi par ma récente expérience sur un système RHEL7. Ledit système a obtenu son nom d'hôte du serveur DHCP.
Et, en effet, il y a des choses dans les fichiers de configuration DHCP qui sont censées y arriver. Par exemple:
Est censé dire à cet hôte que son nom est host4.
En fin de compte, le client d'isc n'apparaît pas pour soutenir cela!
Cependant, dhcpcd5 le fait, hors de la boîte. Arrêtez dhclient, installez dhcpcd5, exécutez dhcpcd, renouvelez votre bail et pouf, votre nom d'hôte sur votre client DHCP est défini sur le nom envoyé par le serveur DHCP. Pas de
dhclient-exit-hooks.d
script, pas de piratagerc.local
, rien.En conclusion, j'ai passé beaucoup de temps à essayer de faire fonctionner cela en utilisant dhclient d'ISC. Absolument aucune joie, même lorsque le serveur envoie le nom d'hôte.
Ma solution initiale au problème a été d'écrire du code mignon
rc.local
pour détecter le moment où le réseau est apparu et forcer une recherche (dans mon cas)/etc/hosts
pour obtenir le nom d'hôte, puis s'exécuterhostname
avec ce nom d'hôte. Cela fonctionne, mais jusqu'à ce que le réseau apparaisse, votre nom d'hôte est probablement faux (lors du premier déploiement d'un hôte, je le supprime/etc/hostname
, donc le nom d'hôte estlocalhost
jusqu'à ce que je puisse exécuter/etc/init.d/hostname.sh start
une fois le réseau activé - donc lors de la première obtention d'un nouveau nom, vous devez démarrer deux fois - une fois pour obtenir votre nom d'hôte, et une fois pour avoir ce nom disponible lorsque tout démarre ...).la source
Vous n'obtenez pas votre nom d'hôte du serveur DHCP.
Vous pouvez envoyer votre nom d'hôte au serveur, ce qui peut changer l'adresse IP qui vous est attribuée. Vous pouvez modifier le nom envoyé en modifiant votre connexion Network Manager (le champ est appelé ID client DHCP) ou vous pouvez le modifier (en tant que root)
/etc/dhcp/dhclient.conf
. Recherchez la ligne qui dit:... et changez
<hostname>
comme vous voulez.Par défaut, Ubuntu obtiendra ses paramètres DNS du routeur (s'il les envoie), mais je pense que vous parlez de DNS / mDNS local où vous pouvez accéder à d'autres ordinateurs par leur nom d'hôte. Cela s'appelle Ahavi ou Zeroconf dans Ubuntu et il est installé par défaut.
Vous devriez pouvoir accéder à votre ordinateur en
<hostname>.local
la source
hostname
et domaine en tapanthostname -d
. il est donc fqdn devrait être hostname.domainsend host-name "example.com";
afin d'obtenir une adresse IP spécifique, vous pouvez tout aussi bien en demander une avecrequest host-name;
.S'il est trouvé, cela peut être un bogue de scripts dhcpclient. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
Essayez de nettoyer $ old_host_name lors du renouvellement de l'IP
Aussi, / etc / hostname statique semble avoir la priorité sur la réponse DHCP alors laissez-le vide
Testé sur ubuntu 14.04 et serveur dnsmasq.
la source
Notez que lorsque vous utilisez Ubuntu 18.04, les scripts de connexion ne sont plus nécessaires. Si le nom d'hôte de l'installation est défini sur
localhost
dans/etc/hostname
le client DHCP, le nom d'hôte sera défini automatiquement au démarrage en utilisant le nom émis par DHCP, s'il est présent. Lors de son exécution,hostnamectl
il sera répertoriélocalhost
comme nom d'hôte permanent et tous les problèmes DHCP comme nom d'hôte transitoire.la source
La réponse dépend de l'utilisation ou non de baux statiques sur votre serveur DHCP. Si vous l'êtes, il n'est pas nécessaire d'obtenir le nom d'hôte du DNS. Vous pouvez changer cette ligne dans la solution de d_inevitable
à
Mais cela devrait se produire automatiquement si votre nom d'hôte est initialement défini sur localhost.localdomain, vous n'avez donc pas à écrire de script. Cependant, si vous souhaitez définir le nom d'hôte sur le FQDN, vous devrez changer le script de d_inevitable en
Encore une fois, tout cela ne fonctionne que si vous utilisez des baux statiques.
la source
Je n'ai pas assez de réputation pour commenter, mais je voudrais me baser sur la réponse précédente car cela a presque résolu le problème pour moi en utilisant un crochet dhclient.
J'ai trouvé qu'en utilisant le serveur DHCP ISC standard pour une raison quelconque, le crochet susmentionné génère un nom d'hôte avec un '.' caractère de période à la fin du nom d'hôte pour une raison quelconque.
Donc, dans la réponse précédente, vous pourriez avoir besoin de "couper" la période étrangère avec un sed:
Deviendrait:
la source