Bagaimana cara traceroute menyelesaikan nama?

11

Saat menulis skrip, saya ingin merujuk mesin dengan nama komputer yang saya berikan (mis. "Selenium-rc"). Saya tidak bisa melakukan ping menggunakan "selenium-rc", jadi saya mencoba perintah berikut untuk melihat apakah nama itu dikenali.

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

Ok, traceroute "menemukan" namanya. Bagaimana? Lanjut ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

Hmm ... mekanisme pencarian di sini harus berbeda karena tuan rumah tidak dikenal. Saya berasumsi ini menggunakan proses resolusi nama sistem sedangkan contoh pertama menggunakan proses khusus untuk traceroute. Benar?

Lalu ketika saya kembali sedikit kemudian ...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

Ok, hasilnya berbeda. Nama "selenium-rc" tidak berubah pada mesin itu sendiri, tetapi proses resolusi nama traceroute harus mencakup semacam prioritas dan sekarang memberikan hasil yang lebih otoritatif yang diberikan oleh sistem / layanan lain pada jaringan. (Sayangnya, saya menganggap itu nama dinamis yang tidak saya kendalikan, dan karenanya tidak akan berguna dalam skrip.)

Adakah yang bisa menjelaskan hasilnya?

Keith Bentrup
sumber

Jawaban:

9

Secara umum, di Linux, dan Unix, traceroute dan ping akan menggunakan panggilan untuk gethostbyname () untuk mencari nama sistem. gethostbyname () pada gilirannya menggunakan file-file konfigurasi sistem untuk menentukan urutan permintaan query database, yaitu: / etc / hosts, dan DNS.

Di Linux, tindakan default adalah (atau mungkin dulu) untuk menanyakan DNS terlebih dahulu, lalu / etc / hosts. Ini dapat diubah atau diperbarui dengan mengatur urutan yang diinginkan di /etc/host.conf.

Untuk mencari / etc / hosts sebelum DNS, tetapkan urutan berikut di /etc/host.conf:

order hosts,bind

Di Solaris, urutan yang sama ini dikendalikan melalui file /etc/nsswitch.conf, dalam entri untuk database host.

host: file dns

Atur urutan pencarian untuk mencari di / etc / hosts sebelum mencari DNS.

Traceroute dan ping akan menggunakan metode ini untuk mencari semua database penamaan yang dikonfigurasi. yang hostdan nslookupperintah kedua digunakan hanya DNS, sehingga mereka tidak akan selalu menduplikasi hasil yang tampaknya tidak konsisten Anda sedang lihat.

Solaris memiliki alat pencarian getent,, yang dapat digunakan untuk mengidentifikasi host atau alamat dengan cara yang sama seperti yang dilakukan traceroute dan ping - dengan mengikuti kumpulan database penamaan yang dikonfigurasi untuk dicari.

getent hosts <hostname>

akan mencari melalui database apa pun yang terdaftar untuk host, di /etc/nsswitch.conf.

Begitu. Dalam kasus Anda, untuk mencapai hasil yang konsisten, tambahkan berikut ini ke / etc / hosts

192.168.235.41 selenium-rc

Dan, pastikan /etc/host.conf memiliki:

order hosts,bind

Atau, pastikan bahwa /etc/nsswitch.conf memiliki:

hosts: files dns

Setelah selesai, Anda akan melihat hasil yang lebih konsisten dengan ping, dan traceroute, serta perintah lain, seperti ssh, telnet, curl, wget, dll.

Tim Kennedy
sumber
Ketika saya menanyakan server DNS yang tercantum dalam file resolv.conf dengan utilitas penggalian, saya menemukan kedua entri. Saya kira traceroute lebih suka yang berkualifikasi penuh.
Keith Bentrup
2

Sepertinya Anda memiliki pengaturan pencarian terbalik dengan benar, tetapi tidak maju.

Sistem Anda dapat mencari alamat IP 192.168.235.41 dan mengenali bahwa itu selenium-rc, tetapi ketika mencoba mencari selenium-rcitu gagal.

Saya sarankan Anda memeriksa /etc/hostsdan /etc/resolv.conf; perilaku getaddrinfopanggilan sistem ditentukan oleh yang terakhir dan referensi yang pertama.

Shadur
sumber
1

Tebakan saya: menjalankan traceroute 192.168.235.41menyebabkan permintaan DNS untuk mencari nama yang sesuai dengan alamat IP 192.168.235.41. traceroute -n 192.168.235.41adalah cara untuk memulai traceroute tanpa melakukan pencarian DNS pada setiap alamat IP yang ditemukannya. Server DNS membutuhkan waktu lebih lama untuk merespons daripada yang ingin ditunggu oleh sistem DNS, jadi pada awalnya traceroute tidak memberikan nama host untuk 192.168.235.41. Pada saat traceroute mengirim dan menerima paket dari 192.168.235.41, server DNS Anda telah merespons, sehingga traceroute dapat memberikan nama host untuknya.

Jadi, saya akan mengatakan "masalah server DNS", dengan waktu yang sangat nyaman yang membuat Anda curiga terhadap hal-hal lain. Pikirkan "Hukum Murphy" di sini. Ketika Anda kembali beberapa saat kemudian, Anda mendapatkan nama yang berbeda untuk alamat IP yang sama, yang juga membuat saya berpikir mungkin seseorang mengacaukan konfigurasi server DNS selama Anda melakukan traceroute.

Bruce Ediger
sumber