Bagaimana cara mengatur nama host yang sepenuhnya memenuhi syarat pada CentOS 7.0?

19

Bagaimana cara menetapkan nama host yang sepenuhnya memenuhi syarat pada CentOS 7.0?

Saya telah melihat beberapa posting online misalnya menggunakan:

$ sudo hostnamectl set-hostname nodename.domainname

Namun, menjalankan nama domain tidak menghasilkan apa-apa:

$ domainname
(none)

Juga:

$ hostname
nodename.domainname

Namun,

$ hostname -f
hostname: Name or service not known
$ hostname -d
hostname: Name or service not known

Beberapa hasil debug:

$ cat /etc/hostname
nodename.domainname

$ grep ^hosts /etc/nsswitch.conf
hosts:      files dns
Chris Snow
sumber

Jawaban:

30

Untuk mengatur nama host lakukan gunakan hostnamectl, tetapi hanya dengan nama host, seperti ini:

hostnamectl set-hostname nodename


Untuk mengatur file edit nama domain (DNS)/etc/hosts dan memastikan bahwa:

  1. Ada garis di <machine's primary, non-loopback IP address> <hostname>.<domainname> <hostname>sana
  2. Tidak ada jalur lain dengan <some IP> <hostname>, dan ini termasuk jalur dengan 127.0.0.1dan ::1(IPv6) alamat.

Perhatikan bahwa kecuali Anda menggunakan NIS, (none)adalah output yang benar ketika menjalankan domainnameperintah.

Untuk memeriksa apakah nama domain DNS Anda diatur dengan benar, gunakan dnsdomainnameperintah dan periksa keluaran hostnamevs hostname -f(FQDN).


NIS vs domain DNS

Masalah ini membingungkan saya ketika saya pertama kali menemukannya. Tampaknya domainnameperintah itu mendahului popularitas Internet. Alih-alih nama domain DNS, ini menunjukkan atau menetapkan sistem NIS (Layanan Informasi Jaringan) alias YP (Yellow Pages) nama domain (sekelompok komputer yang memiliki layanan yang disediakan oleh server NIS master). Perintah ini hanya menampilkan nama yang dikembalikan oleh getdomainname(2)fungsi perpustakaan standar. ( nisdomainnamedan ypdomainnamemerupakan nama alternatif untuk perintah ini.)

Menampilkan nama domain FQDN atau DNS

Untuk memeriksa nama domain DNS (Internet), Anda harus menjalankan dnsdomainnameperintah atau hostnamedengan -d, --domainopsi. (Perhatikan bahwa dnsdomainnameperintah tidak dapat digunakan untuk mengatur nama domain DNS - hanya digunakan untuk menampilkannya.)

Untuk menampilkan FQDN (Fully Qualified Domain Name) dari sistem, jalankan hostnamedengan -f, --fqdn, --longopsi (demikian juga, perintah ini tidak dapat digunakan untuk mengatur bagian nama domain).

Perintah di atas menggunakan resolver sistem (diimplementasikan oleh gethostbyname(3)fungsi dari pustaka standar, sebagaimana ditentukan oleh POSIX) untuk menentukan nama domain DNS dan FQDN.

Resolusi Nama

Dalam sistem operasi modern seperti RHEL 7, hostsentri masuk /etc/nsswitch.confdigunakan untuk menyelesaikan nama host. Di mesin CentOS 7 Anda, baris ini dikonfigurasi sebagai (default untuk CentOS 7):

hosts:      files dns

Ini berarti bahwa ketika fungsi resolver mencari nama host atau alamat IP, mereka pertama-tama memeriksa entri dalam /etc/hosts file dan kemudian mencoba server DNS yang terdaftar di /etc/resolv.conf.

Saat menjalankan hostname -funtuk mendapatkan FQDN dari sebuah host, fungsi resolver mencoba untuk mendapatkan FQDN untuk nama host sistem. Jika host tidak terdaftar dalam /etc/hostsfile atau oleh server DNS yang relevan, upaya gagal dan hostnamemelaporkannya Name or service not known.

Ketika hostname -ddijalankan untuk mendapatkan nama domain, operasi yang sama dilakukan, dan bagian nama domain ditentukan dengan menghapus bagian nama host dan titik pertama dari FQDN.

Konfigurasikan nama domain

1. Perbarui server nama DNS yang relevan

Dalam kasus saya, saya sudah menambahkan entri untuk mesin CentOS 7 baru saya di server DNS untuk LAN lokal saya sehingga ketika FQDN tidak ditemukan dalam /etc/hostsfile ketika saya berlari hostnamedengan opsi -datau -f, layanan DNS lokal dapat sepenuhnya menyelesaikan FQDN untuk nama host baru saya.

2. Gunakan /etc/hostsfile

Jika server DNS belum dikonfigurasi, nama domain yang memenuhi syarat dapat ditentukan dalam /etc/hostsfile. Cara paling umum untuk melakukan ini adalah dengan menentukan alamat IP utama sistem diikuti dengan FQDN dan nama host pendeknya. Misalnya,

172.22.0.9  nodename.domainname nodename

Kutipan dari hostnamehalaman manual

Anda tidak dapat mengubah FQDN dengan hostnameatau dnsdomainname.

Metode pengaturan FQDN yang disarankan adalah menjadikan nama host menjadi alias untuk nama yang sepenuhnya memenuhi syarat menggunakan /etc/hosts,DNS, atau NIS. Misalnya, jika nama host adalah "ursula", orang mungkin memiliki baris di /etc/hostsmana berbunyi:

27.0.1.1    ursula.example.com ursula

Secara teknis: FQDN adalah nama getaddrinfo (3) yang dikembalikan untuk nama host yang dikembalikan oleh gethostname (2). Nama domain DNS adalah bagian setelah titik pertama.

Karena itu tergantung pada konfigurasi resolver (biasanya dalam /etc/host.conf) bagaimana Anda dapat mengubahnya. Biasanya file host diuraikan sebelum DNS atau NIS, jadi itu paling umum untuk mengubah FQDN di /etc/hosts.

Anthony G - keadilan untuk Monica
sumber
Terima kasih atas jawaban anda. Saya telah memperbarui pertanyaan - sayangnya hostname -fperintahnya tidak berfungsi pada CentOS vm saya.
Chris Snow
@SHC Bisakah Anda mengedit pertanyaan Anda untuk juga memasukkan konten /etc/hostnamedan output grep ^hosts: /etc/nsswitch.conf? Saya tidak tahu banyak tentang Network Manager tapi saya juga melihat bahwa saya /etc/NetworkManager/NetworkManager.confberisi baris dalam nya [keyfile]bagian: hostname=<nodename>.
Anthony G - keadilan untuk Monica
1
@SHC Saya sudah meneliti masalah ini, dan secara radikal merevisi jawaban saya; itu sekarang harus menjawab pertanyaan Anda lebih komprehensif.
Anthony G - keadilan untuk Monica
Pembimbing ke jawaban ini tidak konsisten dengan tubuh. hostnamectl set-hostname nodename.domainnametidak tidak menetapkan nama domain DNS (dan itu tidak bahwa itu menetapkan nama domain NIS baik).
sourcejedi
@sourcejedi Saya tidak punya waktu saat ini tetapi saya akan mencoba untuk mengklarifikasi jawaban saya ketika saya mendapatkan kesempatan.
Anthony G - keadilan untuk Monica
1

Pada Centos7 menggunakan nmtui untuk mengatur nama host dan memberikan format nodename.domainname / FQDN memberikan hasil yang konsisten. nama host [d / f / s] semuanya memberikan hasil yang diharapkan dengan benar. Itu tidak disimpan di /etc/resolv.conf ATAU / etc / hosts. Tetapi FQDN ditulis ke / etc / hostname sebagai entri baris tunggal.

Ponn Dk
sumber
0

Bagi saya, file / etc / hostname berisi FQDN alih-alih nama host (mis., Nama host, bukan hostname.example.com). Setelah saya menghapus domain dari hostname di / etc / hostname, perintah 'hostname -f' bekerja dengan normal.

Saya pikir ini diperkenalkan ketika saya menginstal CentOS 7 VM. Saya seharusnya hanya memasukkan nama host, bukan nama domain yang sepenuhnya memenuhi syarat.

Ken
sumber