Ánh xạ tên máy chủ và địa chỉ IP trong / etc / hosts


14

Trong máy linux của tôi, khi tôi chạy hostname, nó hiển thị mongodb, nhưng khi tôi chạy host mongodb, nó hiển thị:

mongodb@mongodb:/var/hadoop/hadoop-1.2.1/bin$ host mongodb
Host mongodb not found: 2(SERVFAIL)

/etc/hostsTập tin của tôi

192.168.10.10   mongodb
192.168.10.10   localhost
127.0.0.1       localhost
#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
  • Câu hỏi đầu tiên của tôi là: Vì /etc/hostsđang ánh xạ từ IP sang tên máy chủ, tại sao máy này không thể phân giải tên máy chủ mongodbthành IP 192.168.10.10? Thay vào đó, khi tôi chạy host localhost, nó có thể được giải quyết và hiển thị:

    localhost has address 127.0.0.1
    
  • Một câu hỏi khác của tôi: Theo /etc/hoststệp, tên máy chủ đáng localhostlẽ đã được phân giải thành 192.168.10.10 thay vì địa chỉ IP loopback 127.0.0.1. Bất cứ ai có thể giải thích điều này cho tôi?

Câu trả lời:


30

Các tiện ích host(và nslookup) truy vấn rõ ràng các máy chủ DNS và không tham khảo /etc/hoststệp trong cấu hình hệ thống mặc định. Nếu bạn đã traceroutehoặcping địa chỉ đó, bạn sẽ thấy nó giải quyết chính xác.

Bạn không muốn thay đổi localhostthành ánh xạ sang bất cứ thứ gì ngoài 127.0.0.1, điều này có thể có những hiệu ứng lạ và tinh tế đối với nhiều thứ. Tôi nghĩ rằng nó /etc/hostsđược phân tích cú pháp theo thứ tự được viết và vì bạn có:

192.168.10.10   localhost
127.0.0.1       localhost

.. mục thứ hai có thể được ghi đè lên đầu tiên.


5
/etc/hostskhông có bất kỳ ảnh hưởng nào đến độ phân giải DNS khi truy vấn trực tiếp máy chủ DNS, đó là những gì host. Tuy nhiên, nhiều công cụ hệ thống và tiện ích sử dụng các localhostđịnh nghĩa, hy vọng nó sẽ là một địa chỉ loopback, và tên hệ thống sử dụng độ phân giải (mà vẻ tại /etc/hoststrước khi truy vấn DNS) cho các tên quyết tâm thay vì đi Nghiêm DNS, mà có thể không luôn luôn có mặt.
DopeGhoti

1
Tôi cũng có thể chia sẻ kinh nghiệm với các vấn đề trong /etc/hoststập tin liên quan localhost. Trước đây, chúng tôi đã sử dụng một số phần mềm sẽ chèn một 127.0.0.2 localhosttệp trong máy chủ lưu trữ và đó là localhostmục cuối cùng khiến nó trở thành phần mềm có hiệu lực gây ra tất cả các loại vấn đề về phần mềm và giấy phép. Vì vậy, khuyến nghị của tôi là có 127.0.0.1 localhostmục nhập đầu tiên trong /etc/hoststệp của bạn và đảm bảo không có localhostmục nào khác trong tệp đó. Và tôi cũng sẽ xác minh bất kỳ công cụ ipv6 là tốt.
ron

5
Để có một chút phạm vi, cả hai thực hiện tra cứu ns có thể là tra cứu dns nếu đó là cách bạn đã cấu hình tra cứu máy chủ trong nsswitch.conf.
symcbean

1
@symcbean - những gì bạn nói là chính xác. Tôi sẽ không gọi đó là pedantic.
DarkHeart

2
Một ngoại lệ không rõ ràng đáng chú ý cho điều này là nếu bạn /etc/resolv.conftrỏ đến máy chủ DNS chạy trực tiếp trên thiết bị của bạn (như bộ đệm dnsmasq) và cho biết máy chủ đang tư vấn cục bộ của bạn /etc/hoststrước khi truy vấn máy chủ bên ngoài. Sau đó, một cách gián tiếp, các lệnh như hostsẽ được thực hiện bởi bạn /etc/hosts- đây là một thiết lập không phổ biến, nhưng tôi đã thấy các thiết bị đi kèm và kinh nghiệm của ai đó sử dụng hệ thống như vậy có thể mâu thuẫn với câu trả lời này nếu ai đó không biết về thiết lập đặc biệt này .
mtraceur

9

Ngoài câu trả lời của DopeGhoti, để kiểm tra quyết tâm của bạn, bao gồm các /etc/hostsưu tiên, bạn có thể sử dụng getent hosts <some_hostname>lệnh.


-3

Tôi gặp vấn đề tương tự với / etc / hosts chứa nhiều khoảng trắng giữa IP và tên máy chủ, thay vào đó sử dụng TAB. Sau khi thay đổi thành TAB, tên máy chủ có thể được giải quyết bằng ping.

127.0.0.1        test.local
         ^^^^^^^^ → Should be a TAB not multiple spaces.

xem thêm trên /superuser//a/938366/467479


5
Điều này làm tôi ngạc nhiên. Trang chủ cho hostsbiết: Fields of the entry are separated by any number of blanks and/or tab characters. Có lẽ trong trường hợp của bạn có một số ký tự không thể in được giữa IP và tên máy chủ?
dr01

Chắc chắn không có ký tự không in được. Tôi đã kiểm tra cái này trước khi tôi đăng cái này lên đây;)
Thomas Lauria

Tôi không có ký tự tab, tôi chạy SLES 11.x và sau khi cài đặt sạch từ dvd, tập tin / etc / hosts của tôi có 127.0.0.17 khoảng trắng theo sau localhost. Vì vậy, tôi sẽ có một chút do dự để xác định vấn đề cụ thể trên nhiều ký tự khoảng trắng và kết luận sử dụng ký tự tab làm giải pháp.
ron

quên đề cập đến tab so với không gian cũng có thể xảy ra trong một phiên bản hoặc phân phối cụ thể của linux, đây có thể là một lỗi không? và nếu đây là trường hợp bạn có thể tạo các mục nhập địa chỉ IP / tên máy chủ khác nhau bằng một tab hoặc khoảng trắng, thì hãy ping chúng để xem liệu nó có được giải quyết không ... chỉ cần không làm điều đó vớilocalhost
ron

Thật không may, tôi không nhớ máy nào (và do đó là distro) Tôi gặp phải sự cố ... - Tôi nghĩ đó là trên Ubuntu 15.05 từ virtualboximages.com/. Tôi sẽ đánh giá điều đó.
Thomas Lauria
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.