Làm thế nào để traceroute giải quyết tên?


11

Trong khi viết một kịch bản, tôi muốn tham chiếu một máy theo tên máy tính mà tôi đã đặt cho nó (ví dụ: "selenium-rc"). Tôi không thể ping nó bằng "selenium-rc", vì vậy tôi đã thử các lệnh sau để xem tên có được nhận ra không.

> 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 "tìm thấy" tên. Làm sao? Kế tiếp ...

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

Hmm ... cơ chế tra cứu ở đây phải khác vì máy chủ không rõ. Tôi giả sử điều này đang sử dụng một quá trình phân giải tên hệ thống trong khi ví dụ đầu tiên là sử dụng một quy trình cụ thể để theo dõi. Chính xác?

Sau đó, khi tôi trở lại một lát sau ...

> 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, kết quả khác nhau. Tên "selenium-rc" không tự thay đổi trên máy, nhưng quá trình phân giải tên theo dõi phải bao gồm một số loại ưu tiên và hiện cung cấp kết quả có thẩm quyền hơn được chỉ định bởi một hệ thống / dịch vụ khác trên mạng. (Thật không may, tôi cho rằng đó là một tên động mà tôi không kiểm soát và do đó nó sẽ không hữu ích trong tập lệnh.)

Ai đó có thể giải thích kết quả?

Câu trả lời:


9

Nói chung, trong Linux và Unix, cả traceroute và ping đều sử dụng lệnh gọi gethostbyname () để tra cứu tên của một hệ thống. lần lượt gethostbyname () sử dụng các tệp cấu hình hệ thống để xác định thứ tự truy vấn cơ sở dữ liệu đặt tên, ví dụ: / etc / hosts và DNS.

Trong Linux, hành động mặc định là (hoặc có thể được sử dụng) để truy vấn DNS trước, sau đó / etc / hosts. Điều này có thể được thay đổi hoặc cập nhật bằng cách đặt thứ tự mong muốn trong /etc/host.conf.

Để tìm kiếm / etc / hosts trước DNS, hãy đặt thứ tự sau trong /etc/host.conf:

order hosts,bind

Trong Solaris, thứ tự tương tự này được kiểm soát thông qua tệp /etc/nsswitch.conf, trong mục nhập cho cơ sở dữ liệu máy chủ.

máy chủ: tập tin dns

Đặt thứ tự tìm kiếm để tìm trong / etc / hosts trước khi tìm kiếm DNS.

Traceroute và ping đều sử dụng các phương thức này để tìm kiếm tất cả các cơ sở dữ liệu đặt tên được cấu hình. các hostnslookuplệnh cả hai chỉ sử dụng DNS, do đó họ sẽ không nhất thiết phải lặp lại trong các kết quả dường như không phù hợp bạn đang nhìn thấy.

Solaris có một công cụ tra cứu, getentcó thể được sử dụng để xác định máy chủ hoặc địa chỉ theo cùng cách mà traceroute và ping thực hiện - bằng cách làm theo bộ cơ sở dữ liệu đặt tên được định cấu hình để tìm kiếm.

getent hosts <hostname>

sẽ tìm kiếm thông qua bất kỳ cơ sở dữ liệu nào được liệt kê cho máy chủ lưu trữ, trong /etc/nsswitch.conf.

Vì thế. Trong trường hợp của bạn, để đạt được kết quả nhất quán, hãy thêm các mục sau vào / etc / hosts

192.168.235.41 selenium-rc

Và, đảm bảo /etc/host.conf có:

order hosts,bind

Hoặc, đảm bảo rằng /etc/nsswitch.conf có:

hosts: files dns

Khi đã xong, bạn sẽ thấy kết quả phù hợp hơn với cả ping và traceroute, cũng như các lệnh khác, như ssh, telnet, curl, wget, v.v.


Khi tôi truy vấn máy chủ DNS được liệt kê trong tệp giải quyếtvvv với tiện ích đào, tôi đã tìm thấy cả hai mục. Tôi đoán traceroute ưa thích một trong những đủ điều kiện.
Keith Bentrup

2

Có vẻ như bạn có tra cứu ngược được thiết lập đúng, nhưng không chuyển tiếp.

Hệ thống của bạn có thể tra cứu địa chỉ IP 192.168.235.41 và nhận ra rằng đó là địa chỉ selenium-rc, nhưng khi cố gắng tra cứu selenium-rcthì thất bại.

Tôi khuyên bạn nên kiểm tra /etc/hosts/etc/resolv.conf; hành vi của getaddrinfocuộc gọi hệ thống được quyết định bởi cái sau và tham chiếu cái trước.


1

Tôi đoán: việc gọi traceroute 192.168.235.41đã khiến một yêu cầu DNS đi ra ngoài để tìm tên đi với địa chỉ IP 192.168.235.41. traceroute -n 192.168.235.41là cách để bắt đầu theo dõi mà không cần thực hiện tra cứu DNS trên mỗi địa chỉ IP mà nó tìm thấy. Máy chủ DNS mất nhiều thời gian để phản hồi hơn hệ thống DNS muốn chờ, do đó, lần đầu tiên traceroute không đặt tên máy chủ cho 192.168.235.41. Vào thời điểm traceroute gửi và nhận các gói từ 192.168.235.41, máy chủ DNS của bạn đã phản hồi, vì vậy traceroute có thể đặt tên máy chủ cho nó.

Vì vậy, tôi muốn nói "sự cố máy chủ DNS", với thời gian rất thuận tiện khiến bạn nghi ngờ về những thứ khác. Hãy suy nghĩ "Luật Murphy" ở đây. Khi bạn quay lại một lát sau, bạn nhận được một tên khác cho cùng một địa chỉ IP, điều này cũng khiến tôi nghĩ rằng có thể ai đó đã làm rối cấu hình máy chủ DNS trong suốt thời gian bạn thực hiện theo dõi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.