Plik hostów: czy niepoprawny jest ten sam adres IP na wielu liniach?

28

Od jakiegoś czasu formatuję mój plik hosts w ten sposób. Zwróć uwagę na ten sam adres IP w dwóch liniach:

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

Niedawno czytałem, że aliasy mają być skonsolidowane w jednym wierszu:

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

Jednak nie podoba mi się ta metoda, ponieważ nie można łatwo komentować niektórych aliasów ani dodawać komentarzy do poszczególnych aliasów, takich jak:

  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

Do tej pory działało dobrze; czy jest z tym problem?

AlexMA
źródło

Odpowiedzi:

28

Znalazłem ten wątek, który omawia robienie czegoś w tym kierunku. Wątek jest dość nieugięty, jeśli /etc/hostsplik nie zawiera wielu linii .

fragment - Re: / etc / hosts: Dwie linie z tym samym adresem IP?

Nie, nie będzie. Rozdzielacze zatrzymują się przy pierwszej rozdzielczości. Posiadanie czegoś takiego jak:

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

Nie zrobię tego, o czym mówisz. ALE mając:

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

Spowoduje wszelkiego rodzaju spustoszenie. W tym spedycja.

Na ogół nie zrobiłbym tego, co próbujesz. Jeśli potrzebujesz więcej dowodów, strona podręcznika mówi nawet, żeby tego nie robić:

fragment man hosts

Ta strona podręcznika opisuje format pliku / etc / hosts. Ten plik jest prostym plikiem tekstowym, który wiąże adresy IP z nazwami hostów, po jednej linii na adres IP. Dla każdego hosta powinna być obecna pojedyncza linia z następującymi informacjami:

         IP_address canonical_hostname [aliases...]

Biorąc to wszystko pod uwagę, jeśli twoje nazwy hostów to FQDN i nie pokrywają się, prawdopodobnie możesz bezpiecznie robić to, co robisz. Pamiętaj tylko, że jeśli występuje jakieś nakładanie się, takie jak wspomniane w powyższym wątku, możesz napotkać problemy.

slm
źródło
1
Nie obserwuję efektów odnotowanych przez którąkolwiek ze stron w tym wątku. Na przykład wiele wierszy dla 127.0.0.1 nie wpływa na wynik hostname(przeciw OP), a wszystkie z nich rozwiązują się poprawnie (przeciw respondentowi).
goldilocks
1
Ale to gethostbyaddr(), co podnoszą, jest znaczące. +1
goldilocks
Bardzo interesujące! Nie wiedziałem, że plik hosts jest używany dwukierunkowo (pobierz nazwę hosta z ip, pobierz ip z nazwy hosta). To zdecydowanie rodzi pewne problemy. Może powinienem przyjrzeć się procesowi tworzenia pliku hosts, który pobiera wersję czytelną dla człowieka, a następnie „poprawia”, łącząc aliasy hosta w jednej linii. Powinien to być bardzo łatwy skrypt.
AlexMA
1
@AlexMA - jeśli okaże się, że /etc/hostspowoduje to smutek, zawsze możesz skonfigurować DNS. Z tego właśnie powodu uruchamiam BIND, (1) b / c łatwiej jest centralnie zarządzać i (2) dostaję rozwiązanie tak, jak chcę, bez większych problemów. Istnieją również lżejsze opcje, takie jak DNSMasq. Z tych systemów można również korzystać w jednym pudełku!
slm
@slm To brzmi jak bardzo dobra opcja dla środowiska produkcyjnego. Prawdopodobnie również cenny projekt edukacyjny.
AlexMA
5

Uważam, że trzecia metoda działa dobrze; czy jest z tym problem?

Zawsze robiłem to trochę, ale istnieje potencjalny problem, ponieważ zgodnie z man gethostbyaddrtym wywołaniem systemowym można użyć /etc/hostsdo skojarzenia adresu IP z nazwą. Chociaż o wiele bardziej powszechnym przypadkiem jest odwrotnie (uzyskaj adres z nazwy), pamiętaj o tym, na wypadek, gdyby wydarzyło się coś śmiesznego.

Złotowłosa
źródło
Tak jak podejrzewałem, ale chciałem mieć pewność, że nie ma w nim świetnej dokumentacji. Nie byłem również pewien, czy może być więcej problemów z niektórymi bardzo ścisłymi dystrybucjami uniksowymi. Dam ci odpowiedź wkrótce, jeśli nikt inny nie podejmie innej postawy.
AlexMA
Cóż, slmwarto zwrócić uwagę na tę kwestię ; może mimo wszystko system nie miał być wykorzystywany w ten sposób. Nadal będę to robić (nb. Najczęściej używam tego tylko dla wersji 127.0.0.1, aby móc przeszczepiać i testować rzeczy lokalnie bez modyfikowania konfiguracji wirtualnego hosta), ale dodałem zastrzeżenie do ostatniego akapitu.
goldilocks
W rzeczywistości edytowałem to, aby uwzględnić „potencjalny problem” ...
goldilocks,
0

Apache 2.4 odmówił uruchomienia w moim systemie Unix. Główną przyczyną były zduplikowane linie w / etc / hosts. Po usunięciu zduplikowanej linii mogłem uruchomić serwer WWW.

użytkownik275926
źródło
4
Jest to przydatna informacja, ale prawdopodobnie powinna być komentarzem, a nie odpowiedzią zgodnie z wytycznymi tej witryny.
AlexMA