Tệp máy chủ: Không chính xác khi có cùng một địa chỉ IP trên nhiều dòng?


28

Trong một thời gian tôi đã định dạng tập tin máy chủ của tôi như thế này. Lưu ý cùng một ip trên hai dòng:

e.f.g.h foo.mydevsite.com
e.f.g.h foo.myOtherDevSite.com

Tôi đọc gần đây rằng các bí danh được cho là hợp nhất trên một dòng:

e.f.g.h foo.mydevsite.com foo.myOtherDevSite.com 

Tuy nhiên, tôi không thích phương pháp này vì bạn không thể dễ dàng nhận xét các bí danh nhất định hoặc thêm nhận xét vào các bí danh cụ thể, như thế này:

  a.b.c.d foo.mydevsite.com          # myDevSite on box 1
# a.b.c.d foo.myOtherSite.com        # myOtherSite on box 1 
  a.b.c.d ubuntuBox                  

  e.f.g.h foo.myOtherSite.com        # myOtherSite testing environment

Cho đến nay điều này đã hoạt động tốt; Có vấn đề gì với điều này?

Câu trả lời:


28

Tôi tìm thấy chủ đề này thảo luận về việc làm một cái gì đó dọc theo những dòng này. Các chủ đề khá kiên quyết về việc không có nhiều dòng dòng /etc/hoststệp.

trích dẫn - Re: / etc / hosts: Hai dòng có cùng địa chỉ IP?

Không nó sẽ không như vậy. Các độ phân giải dừng lại ở độ phân giải đầu tiên. Có một cái gì đó như:

   127.0.0.1 localhost.localdomain localhost
   127.0.0.1 somenode.somedom.com somenode

Sẽ không làm những gì bạn đang nói về. NHƯNG có:

   127.0.0.1 somenode.somedom.com somenode
   127.0.0.1 localhost.localdomain localhost

Sẽ gây ra tất cả các loại tàn phá. Bao gồm cả chuyển tiếp.

Tôi thường sẽ không làm những gì bạn đang cố gắng. Nếu bạn cần thêm bằng chứng, trang người đàn ông thậm chí nói không làm điều này:

đoạn trích man hosts

Trang hướng dẫn này mô tả định dạng của tệp / etc / hosts. Tệp này là một tệp văn bản đơn giản liên kết địa chỉ IP với tên máy chủ, một dòng trên mỗi địa chỉ IP. Đối với mỗi máy chủ lưu trữ, một dòng duy nhất sẽ được trình bày với các thông tin sau:

         IP_address canonical_hostname [aliases...]

Tất cả điều này đang được nói, nếu tên máy chủ của bạn là FQDN và chúng không trùng nhau thì có lẽ bạn an toàn để làm những gì bạn đang làm. Chỉ cần lưu ý rằng nếu có bất kỳ sự chồng chéo nào như những gì đã được đề cập trong chuỗi trên, thì bạn có thể chạy vào giải quyết các vấn đề.


1
Tôi không quan sát các hiệu ứng được ghi nhận bởi một trong hai bên trong chủ đề đó. Ví dụ: nhiều dòng cho 127.0.0.1 không ảnh hưởng đến đầu ra của hostname(contra OP) và tất cả chúng đều giải quyết chính xác (chống lại người trả lời).
goldilocks

1
Nhưng gethostbyaddr()điều họ nêu lên rất đáng kể. +1
goldilocks

Rất thú vị! Tôi không nhận ra một tập tin máy chủ đã được sử dụng hai chiều (lấy tên máy chủ từ ip, nhận ip từ tên máy chủ). Điều đó chắc chắn sẽ đưa ra một số vấn đề. Có lẽ tôi nên xem xét một quy trình xây dựng tệp máy chủ để lấy phiên bản có thể đọc được của con người và sau đó "sửa" nó bằng cách ghép các bí danh máy chủ thành một dòng. Nên là một kịch bản rất dễ dàng.
AlexMA

1
@AlexMA - nếu bạn thấy điều đó /etc/hostskhiến bạn đau buồn, bạn luôn có thể thiết lập DNS. Tôi chạy BIND vì lý do chính xác này, (1) b / c quản lý tập trung dễ dàng hơn và (2) Tôi có được cách giải quyết theo cách tôi muốn từ đó mà không phải đau đầu. Có các tùy chọn nhẹ hơn như DNSMasq để làm điều này. Những hệ thống này cũng có thể được sử dụng trên một hộp duy nhất!
slm

@slm Nghe có vẻ là một lựa chọn rất tốt cho môi trường sản xuất. Có lẽ là một dự án học tập có giá trị quá.
AlexMA

5

Tôi tin rằng phương pháp thứ ba đã hoạt động tốt; Có vấn đề gì với điều này?

Tôi đã luôn luôn làm điều đó một chút, nhưng có một vấn đề tiềm ẩn vì theo man gethostbyaddr cuộc gọi hệ thống đó có thể sử dụng /etc/hostsđể liên kết một địa chỉ IP với một tên. Mặc dù trường hợp phổ biến hơn nhiều là cách khác (lấy địa chỉ từ tên), hãy lưu ý điều này trong trường hợp có bất cứ điều gì buồn cười xảy ra.


Như tôi nghi ngờ, nhưng muốn chắc chắn rằng dường như không có tài liệu tuyệt vời nào về nó. Tôi cũng không chắc chắn về việc liệu có thể có nhiều vấn đề hơn với một số bản phân phối unix cực kỳ nghiêm ngặt hay không. Tôi sẽ cung cấp cho bạn câu trả lời tín dụng sớm nếu không có ai khác bấm chuông với một lập trường khác.
AlexMA

Vâng, điểm slmlàm cho là đáng xem xét; có lẽ hệ thống không có nghĩa là được sử dụng theo cách này. Tôi sẽ tiếp tục làm điều đó (nb Tôi hầu như chỉ sử dụng điều này cho 127.0.0.1 để tôi có thể ghép và kiểm tra mọi thứ cục bộ mà không sửa đổi cấu hình máy chủ ảo), nhưng tôi đã thêm một cảnh báo vào đoạn cuối.
goldilocks

Trên thực tế, tôi đã chỉnh sửa điều này để tính đến "một vấn đề tiềm ẩn" ...
goldilocks

0

Apache 2.4 đã từ chối khởi động hệ thống Unix của tôi. Nguyên nhân gốc là các dòng trùng lặp trong / etc / hosts. Sau khi tôi xóa dòng trùng lặp, tôi có thể khởi động máy chủ web.


4
Đây là thông tin hữu ích, nhưng có lẽ nên là một nhận xét thay vì trả lời theo hướng dẫn của trang web này.
AlexMA
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.