Istnieje sposób, aby to zrobić za pomocą małego skryptu dla haka dhcp, jak opisano tutaj .
Utwórz nowy plik:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
i wklej następujący kod:
#!/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
Zamień eth0
i wlan0
na nazwy interfejsów, z których chcesz uzyskać nazwę hosta. W większości przypadków eth0
i wlan0
powinien pozostać taki sam.
Upewnij się, że jest czytelny ...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
To wszystko. Przy następnej odpowiedzi dhcp nazwa hosta zostanie zaktualizowana automatycznie.
host
polecenia), aby wyodrębnić nazwę hosta powiązaną z przypisanym adresem IP. Serwery DHCP mogą faktycznie jawnie ustawić opcję nazwy hosta (opcja 12), która może potencjalnie różnić się od nazwy hosta uzyskanej z zapytania DNS w adresie IP (może to również potencjalnie zakończyć się niepowodzeniem, jeśli w DNS nie istnieje rekord PTR dla adresu IP )Państwo może uzyskać nazwę hosta z serwerem DHCP - jest częścią specyfikacji DHCP.
https://tools.ietf.org/html/rfc1533#section-3.14
„Ta opcja określa nazwę klienta”
źródło
Odpowiedź d_inevitable prawie rozwiązała mój problem, ale nie do końca. Problem polegał na tym, że chociaż:
Serwer DHCP wysyłał nazwę hosta (dodając
w pliku dhcpd.conf) i faktycznie go zweryfikowałem, przechwytując i analizując zawartość oferty DHCP za pomocą wireshark
Klient DHCP oczekiwał nazwy hosta od serwera DHCP (dodając
w pliku dhclient.conf)
Klient nie otrzymywał nowej nazwy hosta (łatwej do zweryfikowania przez wpisanie)
w terminalu i uzyskanie starej nazwy hosta lub brak nazwy hosta, jeśli usunąłem zawartość / plik). W rezultacie proponowanym rozwiązaniem przez d_inevitable było tylko skopiowanie pustego ciągu.
Aby rozwiązać ten problem, zastosowałem surowe rozwiązanie, którego na ogół nie należy stosować, chyba że jesteś zdesperowany, aby to zadziałało, tak jak ja.
Najpierw otwórz z możliwością edycji skrypt sterujący klienta DHCP:
Tam będziesz musiał zlokalizować funkcję
Po prostu skorzystaj z wyszukiwania, a powinno się pojawić. Teraz, przynajmniej na moim komputerze, ta funkcja ma trzy warunki „jeśli-to-inaczej”, zamknięte w sobie:
Teraz musisz wymusić przypisanie nowej nazwy hosta do hosta, bez względu na wszystko. Dlatego chcesz skomentować dwa enkapsulowane if-then-else. Wynik powinien wyglądać mniej więcej tak:
Teraz d_inevitable's lub to powinno działać zgodnie z oczekiwaniami. Mam nadzieję, że to pomaga, jeśli jesteś w takiej desperackiej frustracji jak ja.
źródło
Odpowiedź Oli jest wyraźnie fałszywa („Nie otrzymujesz nazwy hosta z serwera DHCP”), o czym świadczą inne odpowiedzi tutaj, a także moje ostatnie doświadczenia z systemem RHEL7. Wspomniany system otrzymał nazwę hosta od serwera DHCP.
Rzeczywiście w plikach konfiguracyjnych DHCP są rzeczy, które mają to umożliwić. Na przykład:
Ma powiedzieć temu gospodarzowi, że ma na imię host4.
Jak się okazuje, dhclient ISC NIE WYJAŚNIA SIĘ WSPIERAĆ TO!
Jednak dhcpcd5 robi to od razu po wyjęciu z pudełka. Zatrzymaj dhclient, zainstaluj dhcpcd5, uruchom dhcpcd, odnów dzierżawę i poof, twoja nazwa hosta na kliencie DHCP jest ustawiona na nazwę wysłaną z serwera DHCP. Bez
dhclient-exit-hooks.d
skryptów, bez włamańrc.local
, nic.Na koniec, spędziłem dużo czasu próbując sprawić, aby zadziałało przy użyciu dhclient ISC. Absolutnie nie ma radości, nawet gdy serwer wysyła nazwę hosta.
Moje początkowe rozwiązanie tego problemu polegało na napisaniu ładnego kodu w
rc.local
celu wykrycia, kiedy pojawiła się sieć i wymuszeniu (w moim przypadku) wyszukiwania/etc/hosts
nazwy hosta, a następnie uruchomieniahostname
z tą nazwą hosta. Działa, ale dopóki nie pojawi się sieć, twoja nazwa hosta jest prawdopodobnie niepoprawna (po pierwszym wdrożeniu hosta usuwam/etc/hostname
, więc nazwa hosta jest dostępnalocalhost
do momentu uruchomienia/etc/init.d/hostname.sh start
po uruchomieniu sieci - więc przy pierwszym uzyskiwaniu nowej nazwy musisz uruchomić komputer dwa razy - raz, aby uzyskać nazwę hosta i raz, aby była dostępna, gdy wszystko się uruchomi ...).źródło
Nie otrzymujesz nazwy hosta z serwera DHCP.
Możesz wysłać swoją nazwę hosta na serwer, co może zmienić przypisany adres IP. Możesz zmienić, jaka nazwa jest wysyłana, edytując połączenie Network Managera (pole to nosi nazwę DHCP Client ID) lub możesz edytować (jako root)
/etc/dhcp/dhclient.conf
. Poszukaj linii, która mówi:... i zmień
<hostname>
na cokolwiek chcesz.Domyślnie Ubuntu pobiera ustawienia DNS z routera (jeśli je wysyła), ale podejrzewam, że mówisz o lokalnym DNS / mDNS, w którym możesz uzyskać dostęp do innych komputerów za pomocą nazwy hosta. W Ubuntu nazywa się to Ahavi lub Zeroconf i jest instalowane domyślnie.
Powinieneś być w stanie uzyskać dostęp do swojego komputera przez
<hostname>.local
źródło
hostname
i domenę, wpisująchostname -d
. więc fqdn powinna być nazwąsend host-name "example.com";
w celu uzyskania określonego adresu IP, równie dobrze możesz poprosić o jego podanierequest host-name;
.Jeśli zostanie znaleziony, może to być błąd skryptów dhcpclient. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
Spróbuj wyczyścić $ old_host_name na ip odnowienia
Również statyczna nazwa pliku / etc / host wydaje się mieć priorytet względem odpowiedzi dhcp, więc zostaw ją pustą
Testowany na Ubuntu 14.04 i serwerze dnsmasq.
źródło
Pamiętaj, że podczas korzystania z Ubuntu 18.04 skrypty wiążące nie są już potrzebne. Jeśli nazwa hosta instalacji ustawiony jest
localhost
w/etc/hostname
klienta DHCP hosta ustawi się automatycznie przy starcie używając nazwy wydane przez DHCP, jeśli jest obecny. Po uruchomieniuhostnamectl
będzie wymienionylocalhost
jako stała nazwa hosta, a wszelkie problemy z DHCP jako przejściowa nazwa hosta.źródło
Odpowiedź zależy od tego, czy używasz statycznych dzierżaw na swoim serwerze DHCP. Jeśli tak, uzyskanie nazwy hosta z DNS nie jest konieczne. Możesz zmienić ten wiersz w rozwiązaniu d_inevitable
do
Powinno to jednak nastąpić automatycznie, jeśli nazwa hosta jest pierwotnie ustawiona na localhost.localdomain, więc nie musisz pisać skryptu. Jeśli jednak chcesz ustawić nazwę hosta na FQDN, musisz zmienić skrypt d_inevitable na
Ponownie, wszystko to działa tylko wtedy, gdy korzystasz z leasingu statycznego.
źródło
Nie mam wystarczającej reputacji, aby móc komentować, ale chciałbym przywołać poprzednią odpowiedź, ponieważ prawie rozwiązało to problem za pomocą haka dhclient.
Odkryłem, że przy użyciu standardowego serwera DHCP ISC z jakiegoś powodu wyżej wspomniany hak wyświetla nazwę hosta z „.” z jakiegoś powodu znak kropki na końcu nazwy hosta.
Tak więc w poprzedniej odpowiedzi może być konieczne „wycięcie” obcego okresu za pomocą sed:
Stanie się:
źródło