Какова цель / etc / hosts?

21

Насколько я понимаю, hostsфайл является одним из нескольких системных средств, которые помогают в адресации сетевых узлов в компьютерной сети. Но что должно быть внутри? Когда я устанавливаю Ubuntu по умолчанию

127.0.0.1 localhost 

Будет здесь. Зачем?

  • Как /etc/hostsработает в случае систем JVM, таких как Cassandra?
  • Когда альтернатива DNS, я думаю, не на одном компьютере?
MikiBelavista
источник
Очень похожие: unix.stackexchange.com/questions/388875/…
Кусалананда
/etc/hostsСодержит мое содержимое, 127.0.0.2 mycouchdb bookmarkdb myothercouchappи 127.0.0.3 myapachi websiteя использую его, чтобы помочь мне в разработке на моем локальном компьютере. У меня есть 3 службы, прослушивающие порт 80. Я не хочу помещать их в DNS, поскольку они являются только локальными.
Ctrl-Alt-Delor
Ты пробовал man 5 hosts?
Восстановите Монику - М. Шредер
У Linux нет справочной страницы для этого, где это объясняется в некоторых деталях? Это самый фундаментальный из вопросов.
Роб

Ответы:

45

Файл был /etc/hostsзапущен в старые времена DARPA как файл разрешения для всех хостов, подключенных к Интернету (до появления DNS). Он имеет максимальный приоритет, то есть этот файл предпочтительнее, чем любая другая система имен. 1

Однако, как один файл, он не масштабируется хорошо: размер файла становится слишком большим очень скоро. Вот почему была разработана система DNS, иерархическая система распределенных имен. Это позволяет любому хосту эффективно находить числовой адрес другого хоста.

Очень старая концепция /etc/hostsфайла очень просто, адрес и имя хоста:

127.0.0.1      localhost

для каждой строки. Это простой список пар адрес-хост. 2

Его основное современное использование - обойти разрешение DNS. Найденное в /etc/hostsфайле совпадение будет использовано перед любой записью DNS. Фактически, если искомое имя (например localhost) найдено в файле, разрешение DNS вообще не будет выполняться.


1 Ну, на самом деле порядок разрешения имен определен в /etc/nsswitch.conf, который обычно имеет следующую запись:

hosts:          files dns

что означает «попробуй files ( /etc/hosts); а если не получится, попробуй DNS».

Но этот порядок может быть изменен или расширен.


2 (в настоящее время) Файл hosts содержит строки текста, состоящие из IP-адреса в первом текстовом поле, за которым следует одно или несколько имен хостов. Каждое поле отделено пробелом - вкладки часто предпочитаются по историческим причинам, но пробелы также используются. Строки комментариев могут быть включены; они обозначены восьмиугольником (#) в первой позиции таких строк. Полностью пустые строки в файле игнорируются. Например, типичный файл hosts может содержать следующее:

127.0.0.1   localhost loopback
::1         localhost localhost6 ipv6-localhost ipv6-loopback mycomputer.local
192.168.0.8 mycomputer.lan
10.0.0.27   mycomputer.lan

Этот пример содержит записи для петлевых адресов системы и их имен хостов, первая строка - это типичное содержимое по умолчанию файла hosts. Вторая строка имеет несколько дополнительных (возможно, допустимых только в локальных системах) имен. Пример иллюстрирует, что IP-адрес может иметь несколько имен хостов (localhost и loopback), и что имя хоста может быть сопоставлено с IP-адресами IPv4 и IPv6, как показано в первой и второй строках соответственно. Одно имя ( mycomputer.lan) может разрешать несколько адресов ( 192.168.0.8 10.0.0.27). Однако в этом случае то, какой из них используется, зависит от маршрутов (и их приоритетов), установленных для компьютера.

Некоторые старые ОС не имели возможности сообщить список адресов для данного имени.

Исаак
источник
5

Использование файла / etc / hosts для присвоения понятного человеку имени локальной системе в среде рабочего стола вполне разумно. Файл hosts отлично подходит для использования в домашней сети или даже в среде малого бизнеса. Это не может быть публичной стороной, как интернет-адресация - тогда вам нужен DNS. Если локальная сеть достаточно велика или просто обрезана в разных подсетях, или по любой другой полезной причине, DNS предпочтительнее.

Локальный хост-файл и DNS управляются с другим приоритетом, поэтому никаких конфликтов не возникает.

Франсуа П
источник
4
Я бы не согласился с конфликтами, у меня был ряд трудных для отладки проблем, потому что host-provision-by-group-A оставил устаревшие /etc/hostsзаписи, которые в будущем приводили к сбою операции by by group-B (моя группа) и мы закончили тем, что установили что-то для /etc/hosts
очистки
конфликты внутри файла могут существовать, конечно, но в этом случае виноват сам владелец машины :)
francois P
2
Я также не согласен с тем, чтобы никогда не было никаких конфликтов. Мне пришлось отлаживать очень странные ошибки из-за устаревших записей хоста, конфликтующих с изменениями DNS.
Руи Ф Рибейро
@thrig: Возможно, проблема в том, что ваши группы слишком велики, чтобы эффективно использовать / etc / hosts. Прекрасно работает на 5 машинах (на данный момент) в моей домашней сети.
jamesqf
Ну, система не думает, что есть конфликт, у нее есть четкие инструкции относительно приоритета вещей: p
StarWeaver
3

осмелюсь сказать, что в linux всегда должен быть хотя бы 127.0.0.1 localhostфайл, /etc/hosts а также соответствующий IPv6-адрес для localhost .

Это просто преобразование имени хоста в числовой адрес IPv4 или IPv6. Когда вы пытаетесь подключиться к сети (а) unix.stackexchange.com где-то на земле, которая, вероятно, не находится рядом с вами, или (б) myotherpc в локальной сети в вашем доме, это либо один /etc/hostsили несколько серверов доменных имен (DNS), которые выполняет разрешение хоста, поэтому, когда вы набираете unix.stackexchage.com, который, как человек, является тем, что вас волнует, вам не нужно помнить 185.53.179.7, а именно то, что на самом деле нужно знать компьютеру.

Как было указано, в linux /etc/nsswitchобычно есть порядок разрешения имен хостов, то есть сначала проверьте DNS, прежде чем проверять NIS, а затем, наконец, проверьте файл, /etc/hostsиначе хост не найден.

Как вы управляете проверкой заказа и что / где / кто / кто управляет службой DNS или NIS, зависит от вас, или вы можете переопределить все, изменив / etc / nsswitch, чтобы регистрировать только /etc/hostsи никогда не проверять с помощью DNS или NIS или ...

Для простой домашней сети, состоящей из нескольких компьютеров, скажем, от 2 до N, администратор просто отредактировал бы /etc/hostsна каждом компьютере, чтобы он был корректным, было бы проще, быстрее, дешевле, чем настроить сервер доменных имен или какую-либо другую службу, чтобы иметь одно главное местоположение или полномочия на разрешение имени хоста по IP-адресу.

для веб-поиска linux история и причина позади localhost. Многие вещи в Linux основаны на том, что имя localhost разрешается до 127.0.0.1, и если этого не произойдет, это вызовет проблемы, и это определение localhost будет / должно произойти в локальном системном файле, таком как / etc / hosts.

/etc/hostsпо умолчанию, как правило, последнее слово и последнее, что операционная система Linux должна использовать для разрешения имен хостов. в Windows XP и 7 соответствующий файл C:\Windows\System32\drivers\etc\lmhosts я не знаю о Windows 8 или 10.

рон
источник
Типичное использование файла hosts, особенно в Windows, - это перенаправление попытки программы «позвонить домой» на нулевое устройство. Я далек от того, чтобы предположить, что это может помешать проверке на законность.
Лоуренс Пейн
Я до сих пор не нашел редактор на своем iPhone, который позволил бы мне редактировать / etc / hosts ... поэтому я запускаю DNS на своей
локальной сети