Ada cara untuk melakukannya dengan skrip kecil untuk hook dhcp seperti dijelaskan di sini .
Buat file baru:
sudoedit /etc/dhcp/dhclient-exit-hooks.d/hostname
dan rekatkan kode berikut:
#!/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
Ganti eth0
dan wlan0
dengan nama antarmuka tempat Anda ingin mendapatkan nama host. Dalam kebanyakan kasus eth0
dan wlan0
harus tetap sama.
Pastikan itu bisa dibaca ...
chmod a+r /etc/dhcp/dhclient-exit-hooks.d/hostname
Itu saja. Pada respons dhcp berikutnya, nama host Anda akan diperbarui secara otomatis.
host
perintah) untuk mengekstrak nama host yang terkait dengan alamat IP yang diberikan. Server DHCP sebenarnya dapat secara eksplisit mengatur opsi nama host (opsi 12), yang berpotensi berbeda dari nama host yang Anda peroleh dari permintaan DNS pada IP (ini berpotensi juga gagal, jika tidak ada catatan PTR untuk IP yang ada pada DNS )Anda bisa mendapatkan nama host dari server DHCP - itu adalah bagian dari spesifikasi DHCP.
https://tools.ietf.org/html/rfc1533#section-3.14
"Opsi ini menentukan nama klien"
sumber
Jawaban d_inevitable hampir memecahkan masalah saya, tetapi tidak sepenuhnya. Masalahnya adalah meskipun:
Server DHCP mengirim nama host (dengan menambahkan
di dhcpd.conf) dan saya benar-benar memverifikasinya dengan menangkap dan menganalisis isi tawaran DHCP dengan wireshark
Klien DHCP mengharapkan nama host dari server DHCP (dengan menambahkan
di dhclient.conf)
Klien tidak mendapatkan nama host baru (mudah diverifikasi dengan mengetik
di terminal dan mendapatkan nama host lama, atau tidak ada nama host jika saya telah menghapus konten / file). Akibatnya, solusi yang diajukan oleh d_inevitable hanya menyalin string kosong.
Untuk mengatasi itu, saya menerapkan solusi kasar, yang umumnya tidak boleh diikuti kecuali jika Anda putus asa untuk membuatnya bekerja, seperti saya.
Pertama, buka dengan kemampuan edit skrip kontrol klien DHCP:
Di sana, Anda harus mencari fungsi
Cukup gunakan pencarian dan itu akan muncul. Sekarang, setidaknya di komputer saya, fungsi ini memiliki tiga kondisi if-then-else, yang dienkapsulasi satu sama lain:
Sekarang, yang Anda butuhkan adalah memaksakan penugasan nama host baru ke host Anda, apa pun yang terjadi. Karena itu Anda ingin mengomentari keduanya yang dienkapsulasi jika-maka-lain. Hasilnya akan terlihat seperti:
Sekarang d_inevitable atau ini seharusnya bekerja seperti yang diharapkan. Harapan itu membantu jika Anda berada dalam frustrasi yang sama putus asa seperti saya.
sumber
Jawaban Oli terbukti salah ("Anda tidak mendapatkan nama host Anda dari server DHCP"), sebagaimana dibuktikan oleh jawaban lain di sini, dan juga oleh pengalaman saya baru-baru ini pada sistem RHEL7. Sistem tersebut mendapatkan nama host-nya dari server DHCP.
Dan, memang, ada beberapa hal dalam file konfigurasi DHCP yang seharusnya mewujudkannya. Sebagai contoh:
Seharusnya memberi tahu host itu bahwa namanya host4.
Ternyata, dhclient isc TIDAK MUNCUL UNTUK MENDUKUNG INI!
Namun, dhcpcd5 tidak, di luar kotak. Hentikan dhclient, instal dhcpcd5, jalankan dhcpcd, perpanjang kontrak Anda, dan poof, nama host Anda pada klien DHCP diatur ke nama yang dikirim dari server DHCP. Tidak ada
dhclient-exit-hooks.d
skrip, tidak ada retasanrc.local
, tidak ada.Sebagai catatan akhir, saya telah menghabiskan banyak waktu untuk mencoba ini berfungsi menggunakan dhclient ISC. Sama sekali tidak ada sukacita, bahkan ketika server mengirim nama host.
Solusi awal saya untuk masalah ini adalah menulis beberapa kode imut
rc.local
untuk mendeteksi kapan jaringan muncul dan memaksa pencarian (dalam kasus saya)/etc/hosts
untuk mendapatkan nama host dan kemudian berjalanhostname
dengan nama host itu. Ini berfungsi, tetapi sampai jaringan muncul hostname Anda mungkin salah (ketika pertama kali menyebarkan host, saya menghapus/etc/hostname
, sehingga nama hostlocalhost
sampai saya dapat menjalankan/etc/init.d/hostname.sh start
setelah jaringan muncul - jadi ketika pertama kali mendapatkan nama baru Anda perlu boot dua kali - satu kali untuk mendapatkan nama host Anda, dan satu kali agar nama itu tersedia saat semuanya dimulai ...).sumber
Anda tidak mendapatkan nama host Anda dari server DHCP.
Anda dapat mengirim nama host Anda ke server, yang dapat mengubah IP yang Anda tetapkan. Anda dapat mengubah nama apa yang dikirim baik dengan mengedit koneksi Network Manager Anda (bidang ini disebut DHCP Client ID) atau Anda dapat mengedit (sebagai root)
/etc/dhcp/dhclient.conf
. Cari baris yang mengatakan:... dan ubah
<hostname>
ke apa pun yang kamu suka.Secara default Ubuntu akan mendapatkan pengaturan DNS-nya dari router (jika mengirimkannya) tetapi saya curiga Anda berbicara tentang DNS / mDNS lokal di mana Anda dapat mengakses komputer lain dengan nama hostnya. Ini disebut Ahavi atau Zeroconf di Ubuntu dan diinstal secara default.
Anda harus dapat mengakses komputer dengan
<hostname>.local
sumber
hostname
dan domain dengan mengetikhostname -d
. jadi fqdn harus berupa hostname.domainsend host-name "example.com";
untuk mendapatkan alamat IP tertentu, Anda juga dapat meminta saturequest host-name;
.Jika ditemukan itu bisa menjadi bug skrip dhcpclient. http://blog.schlomo.schapiro.org/2013/11/setting-hostname-from-dhcp-in-debian.html
Cobalah untuk membersihkan $ old_host_name di ip renew
Juga statis / etc / hostname tampaknya memiliki prioritas lebih dari jawaban dhcp jadi biarkan kosong
Diuji pada ubuntu 14.04 dan server dnsmasq.
sumber
Perhatikan bahwa ketika menggunakan Ubuntu 18.04 skrip tie-in tidak lagi diperlukan. Jika nama host dari instalasi diatur ke
localhost
dalam/etc/hostname
klien DHCP akan mengatur nama host secara otomatis pada saat startup menggunakan nama yang dikeluarkan oleh DHCP, jika ada. Saat menjalankannyahostnamectl
akan terdaftarlocalhost
sebagai nama host permanen, dan apa pun masalah DHCP sebagai nama host sementara.sumber
Jawabannya tergantung pada apakah Anda menggunakan sewa statis pada server DHCP Anda. Jika ya, tidak perlu mendapatkan nama host dari DNS. Anda dapat mengubah baris ini dalam solusi d_inevitable
untuk
Tetapi ini akan terjadi secara otomatis jika nama host Anda awalnya disetel ke localhost.localdomain, jadi Anda tidak perlu menulis skrip. Namun, jika Anda ingin mengatur nama host ke FQDN, Anda harus mengubah skrip d_inevitable
Sekali lagi, semua ini hanya berfungsi jika Anda menggunakan sewa statis.
sumber
Tidak memiliki reputasi yang cukup untuk berkomentar, tetapi saya ingin mendukung jawaban sebelumnya karena hampir memecahkan masalah bagi saya menggunakan kait dhclient.
Saya telah menemukan bahwa menggunakan Server DHCP ISC standar untuk beberapa alasan, hook yang disebutkan di atas menampilkan nama host dengan '.' karakter titik di akhir nama host untuk beberapa alasan.
Jadi, dalam jawaban sebelumnya Anda mungkin perlu "memotong" periode asing dengan sed:
Akan menjadi:
sumber