Apa yang menentukan nama host Linux?

13

Dalam beberapa tahun saya telah menggunakan Linux sebagai sistem utama saya, khususnya Fedora, saya selalu melihat nama host saya ditetapkan menjadi "localhost", dengan pengecualian ketika saya terhubung ke beberapa jaringan dan itu menjadi IP saya. Hari ini saya mengalami perilaku berikut yang sulit saya pahami.

Saya mengatur instalasi Ubuntu pada partisi lain dari laptop saya, mengatur nama komputer / nama host selama instalasi Ubuntu. Ketika saya reboot kembali ke Fedora, Fedora telah memperbarui nama host saya ke nama yang saya atur di instal Ubuntu.

Saya selalu mengira nama host telah dikonfigurasi dan disimpan pada partisi instalasi distro, dan memang isi / etc / hostname di Fedora masih membaca "localhost.localdomain", tetapi menjalankan hostnameperintah menunjukkan nama host baru. Kedua instalasi berbagi partisi boot efi, tetapi diskrit. Saya bertanya-tanya dari mana dan mengapa instalasi Fedora membaca nama host baru?

fedora
sumber
Untuk apa entri Anda hosts:di /etc/nsswitch.conf?
cutrightjm
@cutrightjmhosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
fedora
1
Duplikat lintas-situs: security.stackexchange.com/questions/158517/…
Dmitry Grigoryev

Jawaban:

12

The hostnameProgram melakukan syscall uname, seperti dapat dilihat dari berjalan:

strace hostname
...
uname({sysname="Linux", nodename="my.hostname.com", ...}) = 0
...

Dari halaman manual syscall uname , dikatakan syscall mengambil struct berikut dari kernel:

  struct utsname {
               char sysname[];    /* Operating system name (e.g., "Linux") */
               char nodename[];   /* Name within "some implementation-defined
                                     network" */
               char release[];    /* Operating system release (e.g., "2.6.28") */
               char version[];    /* Operating system version */
               char machine[];    /* Hardware identifier */
           #ifdef _GNU_SOURCE
               char domainname[]; /* NIS or YP domain name */
           #endif
           };

Jadi nama domain berasal dari sistem NIS / YP, jika kami percaya komentar itu. Jadi, kemungkinan besar, mungkin ada layanan NIS / YP di jaringan Anda yang melacak nama untuk Anda yang diatur oleh OS ubuntu.

einonm
sumber
5
Ini tidak benar, lihat hostname(1)halaman manual yang menjelaskan bagaimana nama host diatur dan dikembalikan. Meskipun ada kesamaan nama, nama domain NIS / YP tidak ada hubungannya dengan nama domain FQDN / DNS yang dikembalikan oleh resolver. Jika Anda belum mengonfigurasi NIS / YP maka nama domain NIS / YP akan tidak disetel.
Bodgit
Apakah "nama panggilan" bidang yang Anda pedulikan? Akan sejalan dengan unix nostalgy untuk tetap menganggap jaringan IP sebagai hal yang opsional dan implementasi yang ditentukan :)
rackandboneman
5

Ada dua konsep hostname (!) Yang independen pada sistem linux.

Apa pun yang dianggap kernel sebagai nama host lokal (seperti ditangani oleh gethostname / uname dan panggilan sistem sethostname) terlepas dari konektivitas jaringan apa pun - mekanisme ini akan tetap ada jika Anda membangun kernel tanpa kemampuan untuk jaringan TCP / IP.

Ada satu atau lebih nama host yang benar-benar terhubung ke TCP / IP (atau tumpukan jaringan lainnya - tidak semua jaringan di dunia adalah IP!) Alamat yang dimiliki host, dan ini ditangani di userspace oleh fungsi perpustakaan resolver (bagian dari libc), yang akan menentukan nama dengan menafsirkan sumber (file lokal / etc / hosts, DNS, NIS ....) sesuai dengan aturan yang Anda berikan pada file konfigurasi yang sesuai (/etc/nsswitch.conf, / etc /host.conf dll ...).

pemeras
sumber
3

Mungkin Ubuntu terhubung ke internet melalui router rumah Anda selama instalasi. Untuk melakukan ini, ia melaporkan nama hostnya ke router dan memperoleh IP lokal sementara.

Ketika sekarang Anda reboot ke Fedora, itu akan terhubung ke router yang sama untuk mendapatkan alamat IP-nya, tetapi sewa lama yang dibuat untuk Ubuntu masih valid. Karena ini adalah mesin yang sama dengan kartu jaringan yang sama dan alamat MAC perangkat keras yang sama, itu akan menggunakan kembali sewa yang sama.

Dugaan saya adalah bahwa router mengirimkan nama host tempat penyewaan IP didaftarkan dan Fedora mengambilnya.

Sayangnya saya tidak punya bukti atau kutipan untuk mendukung jawaban saya, saya hanya bisa berbicara dengan pengalaman pribadi menginstal Ubuntu di dual-boot dengan Windows. Saat itu, Ubuntu menolak untuk menetapkan nama host yang sama selama instalasi seperti yang saya gunakan di Windows, karena mengklaim bahwa nama itu sudah ada di jaringan. Sepertinya kita mengalami hal serupa di sini.

Untuk memverifikasi apakah apa yang saya kira juga berlaku untuk situasi Anda, cobalah mencabut sewa IP Anda di antarmuka konfigurasi router Anda dan kemudian reboot Fedora. Jika tidak lagi menggunakan nama host Ubuntu, maka saya harus benar.

Komandan Byte
sumber
Memang mungkin bagi klien DHCP untuk mengirim nama host ke server, atau membaca nama host dari server. Kebanyakan semuanya melakukan yang pertama (meskipun ketika nama host diatur ke "localhost" itu tidak akan berpengaruh banyak :). Membaca nama host dari server DHCP dimungkinkan dengan klien DHCP Linux, tetapi pemahaman saya adalah dukungan ini tidak selalu diaktifkan ( misalnya ). Menarik untuk mendengar bahwa Fedora yang lebih baru sepertinya melakukan ini.
sourcejedi