Имена хостов - для чего они все?

54

Недавно меня «заставили» выполнить какую-то работу сисадмина, хотя я не очень люблю это делать, я много читаю, экспериментирую и учусь.

Есть один фундаментальный аспект конфигурации сервера, который я не смог понять - имена хостов .

Например, в Ubuntu необходимо установить имя хоста следующим образом (согласно Библиотеке Linode ):

echo "plato" > /etc/hostname
hostname -F /etc/hostname

Файл: / etc / hosts

127.0.0.1        localhost.localdomain        localhost
12.34.56.78      plato.example.com            plato

Я предполагаю, что platoэто произвольное имя, и это plato.example.comполное доменное имя.

Теперь мои вопросы:

  • Это обязательно?
  • Для чего?
  • Где это нужно / используется?
  • Почему я не могу определить "localhost" как имя хоста для каждой машины?
  • Нужно ли настраивать запись DNS для plato.example.comполного доменного имени?
  • Должен plato.example.comли использоваться в качестве обратной записи DNS для моего IP?

Кроме того, есть ли "лучшие практики" для выбора имен хостов? Я видел людей, использующих греческие буквы, названия планет и даже мифологические фигуры ... Что происходит, когда у нас заканчиваются буквы / планеты?

Извините, если это глупый вопрос, но я никогда не был в восторге от конфигурации сети.

Аликс Аксель
источник
3
Я думаю, что Крис S здесь вне базы. Вопрос - что такое системное имя хоста и как оно связано с DNS - является правильным.
Жаворонки
@ Крис С: Я понял, поверь мне. Я попытался прочитать это однажды, но все это поразило меня как очень запутанное. Я не стремлюсь быть SA, просто пытаюсь понять основы немного лучше.
Аликс Аксель
Это должно перейти в сообщество вики
lynxman
1
@lynxman: Я не против, но почему?
Аликс Аксель
1
Потому что это очень интересно :)
lynxman

Ответы:

29

В наши дни система может иметь несколько интерфейсов, каждый из которых имеет несколько адресов, и каждый адрес может даже иметь несколько записей DNS, связанных с ним. Так что же означает «системное имя хоста»?

Многие приложения будут использовать имя хоста системы в качестве идентификатора по умолчанию, когда они общаются в другом месте. Например, если вы собираете сообщения системного журнала на центральном сервере, все сообщения будут помечены именем хоста исходной системы. В идеальном мире вы, вероятно, проигнорируете это (потому что вы не обязательно хотите доверять клиенту), но поведение по умолчанию - если вы назвали все свои системы "localhost" - приведет к куче сообщений журнала, которые вы не сможет связываться с конкретной системой.

Как отмечали другие люди, системное имя хоста также является полезным идентификатором, если вы обнаруживаете, что получаете удаленный доступ к нескольким системам. Если у вас есть пять окон, подключенных к системам с именем «localhost», то вам будет непросто сохранить их прямо.

Аналогичным образом мы пытаемся сделать так, чтобы системное имя хоста совпадало с именем хоста, которое мы используем для административного доступа к системе. Это помогает избежать путаницы при обращении к системе (в электронной почте, разговорах, документации и т. Д.).

Что касается DNS:

Вы хотите иметь правильную прямую и обратную записи DNS для своих приложений, чтобы избежать путаницы. Вам нужно немного вперед записи (имя -> IP - адрес) для людей , чтобы иметь возможность доступа к приложению удобно. Обратное совпадение записей полезно по ряду причин, например, оно помогает вам правильно идентифицировать приложение, если вы найдете соответствующий IP-адрес в журнале.

Обратите внимание, что здесь я говорю о «приложениях», а не «системах», потому что - особенно с веб-серверами - в системе обычно используется несколько IP-адресов, связанных с разными именами хостов и службами.

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

larsks
источник
Спасибо за ваш ответ, я все еще не понимаю, нужно ли мне (или нужно) поддерживать файл / etc / hosts вместо того, чтобы полагаться только на записи DNS.
Аликс Аксель
8
Я вообще игнорирую /etc/hostsв пользу DNS. Это уменьшает количество мест, в которых я нуждаюсь, чтобы хранить информацию об имени -> сопоставлении адресов. В большинстве систем, которые я поддерживаю, /etc/hostsсодержится только одна запись для localhost.
Жаворонки
Когда вы имеете дело с кластерами - такими как ganeti или кластер Linux-HA / Corosync - / etc / hosts используется для общения между членами кластера. Плохо полагаться исключительно на DNS, потому что ваша DNS-служба может находиться в этих кластерах и быть перенесенной или отключенной во время смены узла, поэтому / etc / hosts и правильное имя хоста помогут вам отлично провести время.
coredump
Итак, что касается «уникального», мы скорее «пытаемся» быть «уникальным», чем «должны» быть уникальным, правильным? Поскольку существует так много серверов, и все они находятся в одной области видимости, быть «уникальным» на самом деле невозможно. Это понимание правильно?
shenkwen
10

Вы можете установить для каждого имени хоста значение «localhost», но это очень удобно иметь alix@plato ~ $в командной строке, когда вы управляете компьютерами через ssh. Удаленное управление серверами может привести к путанице, если вы этого не сделаете.

Правильное полное доменное имя важно, когда вы размещаете веб-сервер или почтовый сервер. Серверные приложения такого типа любят знать, «на кого» они работают.

Для выбора хорошей схемы именования я отсылаю вас к этому очень популярному вопросу .

Полное доменное имя становится полезным только тогда, когда оно имеет смысл для другого компьютера. Для этого есть три уровня:

  • Один компьютер в вашей локальной сети имеет запись в файле hosts, которая указывает на эту машину
  • У вас есть DNS-сервер, работающий в вашей локальной сети, и каждый локальный компьютер, который использует его в качестве DNS-сервера, теперь знает plato по имени.
  • Вы регистрируете доменное имя, и теперь весь мир знает, на какую машину указывает имя plato.alixaxel.com.

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

В этом случае вы можете просто создать доменное имя (plato.alixnetwork может подойти как полное доменное имя) для использования в вашей локальной сети. Единственная дополнительная ценность наличия части «alixnetwork» (доменное имя) - это удобство, когда у вас есть другая локальная сеть, от которой вы хотите ее отличить.

Кенни Рассчарт
источник
Спасибо Кенни, я думаю, что мое главное сомнение в том, почему для веб / почтового сервера важно иметь правильное полное доменное имя. Кроме того, что представляет собой «правильное» полное доменное имя? Должен ли я просто добавить имя хоста к домену и указать публичный IP-адрес? У меня сложилось впечатление, что я должен создать записи DNS A / AAAA с именем хоста, нет?
Аликс Аксель
Это зависит от того, чего вы хотите достичь. Если вы не отправляете электронные письма или не обслуживаете веб-страницы в мире с помощью plato, на самом деле нет необходимости создавать глобальную запись DNS для этого компьютера.
Кенни Рассчарт
«Вы регистрируете доменное имя, и теперь весь мир знает, на какую машину указывает имя plato.alixaxel.com». - Я не понимаю этого. Разве весь мир не знает, на какую машину указывает имя plato.alixaxel.com, проверив разрешение «alixaxel.com» DNS? Какое это имеет отношение к настройке полного доменного имени на случайной машине?
shenkwen
9

Базовый обзор. Имя хоста просто указатели; Вы можете назначить одно конкретное имя хосту, на которое ссылается машина, но оно может иметь несколько значений. Некоторые сервисы, известная почта и HTTP полагаются на доменные имена, чтобы знать, где сервисы должны быть расположены и как к ним добраться.

Давным-давно все эти имена (которые опять-таки являются просто указателями на IP-адреса) отслеживались в файле с именем hosts. По мере роста системы они не могли синхронизировать файл на всех соответствующих компьютерах, участвующих в различных взаимосвязанных сетях. Таким образом, система DNS была изобретена. Когда вы выполняете поиск по имени, он все равно сначала проверяет файл hosts, а затем систему DNS. Windows также может проверять другие системы, такие как WINS или NetBIOS.

Когда вы помещаете запись в hostsфайл, вы не назначаете ее компьютеру. Присвоение имени хоста тому, которое используется компьютером, выполняется в файлах конфигурации (в системах * nix) и в свойствах системы в системах Windows (система Windows также может иметь специальные суффиксы для сетевых карт).

Записи в hostsфайле, как и система DNS, являются просто отображением имени хоста в IP-адрес. Чтобы использовать имя хоста «localhost» (в этом нет ничего особенного, это имя хоста, как и все остальные), его необходимо сопоставить с интерфейсом обратной связи (поэтому он всегда будет указывать на локальный компьютер). Чтобы это работало, все компьютеры поставляются с этим сопоставлением по умолчанию в их hostsфайле, но его можно было бы удалить, если вы не хотите иметь возможность использовать это имя хоста.

Кроме того, как отметили другие, очень полезно назначить имя хоста компьютеру. При подключении к компьютеру он может отображать свое имя хоста при входе в систему, либо в качестве приглашения, либо в любом количестве других мест. Это упрощает идентификацию компьютера, к которому вы подключены. Если вы установите это имя хоста в DNS или поместите его во все hostsфайлы, вы сможете подключиться к компьютеру, ссылаясь на его имя хоста, вместо того, чтобы постоянно знать его IP-адрес. (Еще более полезно, если компьютер использует DHCP, поскольку адрес может измениться. Если компьютер обновляет DNS, запись DNS будет указывать на новый IP-адрес; вы все равно можете подключиться, не зная новый IP-адрес, поскольку вы знаете имя DNS ).

Существует много других применений обоих hostsи DNS, но я подозреваю, что у вас больше вопросов, чем ответов, если вы прочитаете все это.

Крис С
источник
4
+1 за то, что нашли время написать хороший ответ, несмотря на ваше первоначальное чувство разочарования от вопроса.
Кенни Рассчарт
Потрясающее объяснение! Если мое понимание верно, размещение полного доменного имени в нем /etc/hostsне является необходимым, наличие имени узла в записи DNS приведет к тому же результату, верно?
Аликс Аксель
2
@Alix, правильно, если запись находится в DNS (и DNS работает должным образом), то наличие ее в hostsфайле будет избыточным. Кроме того, запись в hostsфайле переопределит DNS (иногда полезно для тестирования, хотя и раздражает, когда вы об этом забываете). Обратите внимание, что это все в отношении записей A и AAAA, существуют другие типы записей для имен хостов, но я оставил их для ясности.
Крис С
Спасибо Крис, это все проясняет.
Аликс Аксель
5

Всегда хост должен иметь значимое имя. Имя хоста может обслуживать несколько целей:

1- Это поможет вам узнать, над чем вы сейчас работаете.

2- Использование имен, настроенных в /etc/hostsзаписях DNS и / или DNS, проще, чем запоминание многих IP-адресов.

3- Localhost - это зарезервированное имя для ссылки на текущий компьютер (адрес 127.0.0.1).

4- DNS-записи полезны, чтобы сделать ваши серверы общедоступными.

Выбор подходящего имени для каждого сервера очень помогает вам в администрировании. Кроме того, это помогает вашим клиентам получать доступ к вашим серверам.

Халед
источник
2

Напомним, что правильная работа прямого и обратного разрешения DNS является абсолютным краеугольным камнем каждой ИТ-установки на этой планете. Никогда не стоит недооценивать необходимость хорошо поддерживаемого DNS и правильного разрешения имени хоста!

PFO
источник
Я не могу понять, почему это важно. У меня есть линодный сервер, на котором размещено много сайтов. Не понимая цели установки имени хоста, я просто оставляю его как есть, то есть «ubuntu». Этот сервер работает уже пару лет, и я никогда не чувствую неудобств. Я не подвергаю сомнению ваш ответ, я просто пытаюсь понять, почему имя хоста важно. В моем случае, когда бы я хотел, чтобы я правильно установил имя хоста?
shenkwen
1
@shenkwen - если у вас есть только один сервер, вы можете назвать его по своему желанию, и это, очевидно, не будет иметь значения. Как только число серверов становится больше 1, у вас появляются новые проблемы для управления, и правильное присвоение имен является важным инструментом.
mfinni
1

Отказ от ответственности: основной вопрос касается систем Linux, поэтому не стесняйтесь игнорировать этот ответ, если вас не интересует проблема Windows.

В любом случае, в системах Windows, помимо всех точек, упомянутых в других ответах, имя хоста фактически используется самой ОС для работы в сети и для аутентификации; в частности:

  • Каждая система, независимо от того, является ли она членом домена, должна иметь уникальное имя в одной и той же сети (т. Е. В одной и той же IP-подсети), в противном случае возникнет конфликт имен, и различные сетевые службы (в основном, совместное использование файлов и принтеров) не будут работай.
  • Все системы, являющиеся членами одного домена Active Directory, должны иметь уникальное имя независимо от границ сети.
  • В доменной среде имя хоста системы действует как субъект безопасности и может использоваться для удаленной аутентификации (просто представьте, что это учетная запись пользователя для машины); ему могут быть назначены разрешения и права доступа, и его можно поместить в группы в целях безопасности. Это влияет на все процессы, запущенные в системе, используя встроенные учетные записи LocalSystemи NetworkServiceучетные записи пользователей, которые могут проходить проверку подлинности в других системах с использованием учетных данных системы, в которой они работают; это позволяет процессу, работающему как NetworkServiceна SystemA, получить доступ к общей папке на SystemB, предоставив разрешения на эту папку учетной записи пользователя SystemA.
Massimo
источник
-1

Многие сайты и / или предполагаемые «администраторы» теперь заявляют, что атрибут «hostname» содержит полное доменное имя экземпляра ОС, что «нарушает» любое разрешение, которое добавляет к нему «domainname»:

имя хоста
system1.domain1.org

ping hostname
- не удается разрешить system1.domain1.org.domain1.org

zantar
источник
Можете ли вы предоставить справочный источник для вашего заявления?
Дейв М