Saya mendapat kesalahan "nama host: Nama atau layanan tidak dikenal" saat memeriksa IP nama host

13

Saya menjalankan Ubuntu 14.04 di layanan cloud perusahaan saya (instance saya memiliki IP elastis). Saya ingin memeriksa alamat IP dari instance saya yang saya jalankan dengan baris perintah, tetapi tidak berhasil.

root@ubuntu14-graphite:~# hostname
ubuntu14-graphite
root@ubuntu14-graphite:~# hostname -i
hostname: Name or service not known

Saya tidak mengerti alasannya. 

Saya mencoba melakukan ping ke ubuntu14-graphite tetapi katanya:

unknown host ubuntu14-graphite.

Apakah itu berarti tuan rumah saya bahkan tidak ada?

Saya memiliki server lain (bukan cloud contoh tetapi server fisik). Di server ini saya menginstal CentOS 6.7. Saya memeriksa IP nama host dan itu berhasil meskipun tidak ada yang istimewa di /etc/hosts.

Inilah output dari cat /etc/hosts:

127.0.0.1   localhost

# The following lines are desirable for IPv6 capable hosts
::1         ip6-localhost ip6-loopback
fe00::0     ip6-localnet
ff00::0     ip6-mcastprefix
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters
ff02::3     ip6-allhosts
Yang satu
sumber

Jawaban:

15

Ini berarti bahwa "sistem" (Saya menggunakan istilah itu dalam arti luas, umum, ambigu) tidak tahu bahwa nama tersebut ubuntu14-graphite sesuai dengan host Anda dan alamat IP-nya. (Faktanya adalah nama host Anda tidak cukup untuk mewujudkan hal ini.) Ini hampir pasti berarti bahwa Anda tidak memiliki garis untuk ubuntu14-graphite dalam /etc/hostsfile Anda , dan bahwa itu tidak ada dalam layanan penamaan Anda (misalnya, DNS atau NIS). Akibatnya, cara untuk memperbaikinya adalah dengan menambahkan ubuntu14-graphite(dan alamat IP-nya) ke /etc/hosts. Jika Anda menggunakan sistem penamaan (terdistribusi) yang lebih canggih seperti DNS atau NIS (atau mungkin ActiveDirectory?), Solusi utamanya adalah menambahkan host Anda ke layanan itu.
_____________
† ...

Ada beberapa perdebatan tentang pertanyaan tentang alamat IP apa yang harus Anda kaitkan dengan nama host Anda. Semua orang setuju bahwa itu harus alamat yang "berfungsi" untuk host Anda; yaitu, perintah seperti harus berhasil. Beberapa orang merekomendasikan menggunakan alamat loopback. Alamat loopback selalu dalam bentuk 127 .BCD ; nilai umum adalah 127.0.0.1 dan 127.0.1.1. Orang lain merekomendasikan untuk menggunakan alamat LAN, yang mungkin terlihat seperti 192.168 .CD (tetapi bisa berupa apa saja) - tetapi Anda tidak boleh memasukkan alamat yang ditugaskan secara dinamis ke dalam file host Anda (dan, jika Anda menggunakan DHCP dengan DNS, maka alamat yang ditetapkan secara dinamis harus dimasukkan ke dalam catatan DNS Anda secara otomatis). Gunakan perintah like dan untuk melihat alamat apa yang digunakan.ping A.B.C.Difconfighostname -I

G-Man Mengatakan 'Reinstate Monica'
sumber
Terima kasih atas jawaban Anda. Saya mengedit pertanyaan saya karena saya perhatikan satu lagi kasus yang terkait dengan server CentOS saya yang tidak memiliki apa-apa selain localhost 127.0.0.1 tetapi saya masih dapat memeriksa IP host saya.
The One
Yah, mungkin nama dan alamat server CentOS dimasukkan ke dalam sistem DNS (atau layanan nama apa pun yang digunakan).
G-Man Mengatakan 'Reinstate Monica'
Dalam sistem CentOS, bind dan bind-utils tidak diinstal. Jadi saya sangat bingung.
The One
@TheOne Ubuntu memperlakukan secara hostnameberbeda bahwa sistem berbasis RH .. masukkan 127.0.1.1 ubuntu14-graphitedalam /etc/hostsfile dan periksa..catatan, itu 127.0.1.1, bukan 127.0.0.1(yang dapat Anda simpan sendiri hanya untuk localhost, seperti 127.0.0.0/8blok loopback Anda dapat menggunakan alamat apa pun meskipun beberapa sistem memiliki alamat terbatas yang telah ditentukan sebelumnya )
heemayl
@heemayl Jadi dengan meletakkan 127.0.1.1 ubuntu14-graphite di / etc / hosts lalu periksa IP saya tidak mendapatkan IP yang benar. Itu tidak masuk akal, bukan?
The One
1

Cara yang sebenarnya untuk memeriksa alamat IP mesin adalah dengan menggunakan ifconfigperintah.

Perhatikan bahwa tergantung pada pengaturan cloud yang sebenarnya, instance server mungkin tidak mengetahui IP publik dan hanya tahu IP VLAN. Untuk detail tentang ini, Anda perlu merujuk ke dokumentasi penyedia Anda.

Julie Pelletier
sumber
Nggak; ip a s. Lihat serverfault.com/q/458628/89813 - ifconfig sudah ditinggalkan di Linux.
Reinstate Monica - M. Schröder
0

Tambahkan myhostnameentri ke hostslayanan di /etc/nsswitch.conf.

Dengan kata lain, ubah baris ini di /etc/nsswitch.conf:

hosts:      files dns

untuk ini:

hosts:      files dns myhostname

Di mana biasanya nama host diselesaikan menggunakan /etc/hostsfile dan dns, nama host sistem juga dapat diatasi dengan memberi tahu Switch Layanan Nama untuk melakukannya (karena perubahan konfigurasi ini akan dilakukan).

Ini akan menjelaskan mengapa Anda tidak melihat sesuatu yang istimewa tentang /etc/hostsfile pada sistem yang Anda dapat menyelesaikan nama host lokal.

Informasi lebih lanjut tentang myhostnamebendera ada di sini .

Kodey Converse
sumber
0

Menurut pendapat saya itu tergantung pada versi perintah hostname (paket net-tools).

Lihat: https://bugzilla.redhat.com/show_bug.cgi?id=319981

  • contoh pada "openSuse Leap 42.3":
    # hostname -V
    net-tools 1.60
    hostname 1.100 (2001-04-14)

    # hostname -i
    hostname: Name or service not known
  • di Lubuntu 17.10
  $ hostname -V
  hostname 3.18

hostname -i - memberi saya informasi tentang IPv6 dan IPv4

Bronek Dzikus
sumber
Laporan bug itu tentang hostname -s, bukan hostname -i. Ini tidak terkait dengan versi hostname, ini terkait dengan apakah nama host yang diberikan oleh hostnamedapat diatasi.
Stephen Kitt
-2

Pergi ke etc / hosts.save periksa nama host Anda di sana. Dan kemudian edit /etc/hosts untuk menulis di sana nama host Anda dan nama host di hosts.save. Periksa juga alamat IP. Contoh:

127.0.0.1    ubuntu   
127.0.1.1    ubuntu.ubuntu-domain    ubuntu
SSS
sumber
1
Mengatur IP host lokal di /etc/hoststidak akan memberi mereka alamat IP yang sebenarnya. Saya juga gagal melihat mengapa Anda juga melihat /etc/hosts.savemana yang teknis dan sangat tidak relevan.
Julie Pelletier