Есть ли у компьютерной системы (Linux) только одно имя хоста?

15

hostname используется для отображения DNS-имени системы, а также для отображения или установки ее имени хоста или имени домена NIS.

Есть ли у компьютерной системы (Linux) только одно имя хоста?

В виртуальном хостинге несколько имен хостов могут быть преобразованы в разные корневые каталоги на веб-сервере. Если компьютерная система (Linux) может иметь только одно имя хоста, как возможен виртуальный хостинг?

Благодарю.

StackExchange для всех
источник
Записи DNS A или AAA указывают на один и тот же IP-адрес для нескольких доменов. Имя хоста машины не обязательно важно.
RubberStamp
(1) hostnameИспользуется ли когда-либо вывод при преобразовании имени хоста в IP-адрес? (2) A означает IPv4-адрес, AAAA IPv6. Что такое ААА?
StackExchange для всех
Службы mDNS, например, avahiзависят от имени хоста компьютера. В этом случае hostname.localбудет разрешен локальный IP-адрес машины. Я вижу, что кто-то написал ответ, который является расширением моего первого комментария ... слишком одновременный для моих уведомлений браузера.
RubberStamp
AAA - это короткая опечатка "A"
RubberStamp
Виртуальный хост не имеет ничего общего с именем хоста. Это чисто зависит от поведения веб-сервера. Сервер по-разному реагирует на другое поле Host заголовка HTTP-запроса. Я не думаю, что типичный веб-сервер будет делать что-либо, связанное с DNS или именем хоста, чтобы предложить функциональность виртуального хоста.
德里克 薯条 德里克

Ответы:

26

Да и нет. Это две разные вещи, называемые именами хостов.

«Внутреннее» имя хоста - это строка, хранящаяся в ядре. Это тот, который возвращается hostnameкомандой (или gethostname()вызовом), и он уникален в системе (*) .

В основном это используется, когда программа хочет вывести некоторый идентификатор для системы, на которой она работает. Например, \hBash PS1расширяется до имени хоста. Точно так же файлы журнала в стиле syslog также включают имя хоста в записи журнала.

(* Хотя, как комментирует Стивен Китт, пространства имен могут использоваться для отображения разных имен хостов для процессов в одной и той же системе. Это в основном используется для контейнеров, которые пытаются действовать так, как будто они являются отдельными системами.)

Также есть DNS-имена , которые используются другими системами для поиска IP-адреса другой. Может быть несколько DNS-имен, указывающих на один и тот же IP-адрес, и один и тот же хост.

Внутреннее имя хоста и DNS-имена не обязательно должны совпадать. Предположим, у кого-то есть веб-сервер, который он решил вызвать orange(*) , с IP-адресом 192.0.2.9. Он может обслуживать два разных домена, и DNS будет настроен на наличие www.example.orgи www.example.comоба указателя 192.0.2.9, в то время как внутреннее имя хоста системы может быть orange.example.orgили просто orange. В этом случае настройка DNS, как правило , также имеют обратный поиск на 192.0.2.9точку назад к имени orange.example.org, но нет ничего , что силы.

(* потому что им нравится называть свои серверы в честь фруктов. Кто-то может использовать webserver1или тому подобное, но дело в том, что его не нужно называть в честь одного из реальных доменов.)

В дополнение к этому виртуальный хостинг требует, чтобы браузер сообщал веб-серверу имя сайта, к которому он пытался получить доступ. В противном случае сервер не знал бы, к какому виртуальному сайту клиент пытался добраться. HTTP имеет Hostзаголовок для этого.


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

ilkkachu
источник
Благодарю. (1) «Настройка DNS обычно имеет 192.0.2.9, указывающую на имя orange.example.org». Не разрешает ли получение IP-адреса для данного имени хоста, почему наоборот? (2) hostnameИспользуется ли когда-либо вывод при преобразовании имени хоста в IP-адрес?
StackExchange для всех
(2) ... Когда вы устанавливаете локальную сеть Wi-Fi в вашем доме от интернет-провайдера с помощью маршрутизатора и модема, машины в сети могут быть определены по выводам их hostnameкоманд, правильно? Действует ли маршрутизатор как DNS для разрешения выходов hostnameна частные IP-адреса в сети?
StackExchange для всех
2
что касается (1), есть также обратный поиск, который берет IP-адрес и возвращает имя. (Для системы с одним именем и одним адресом, вы бы хотели, чтобы оба
решали
3
Небольшие сети могут использовать mDNS. Что бы там ни было, владельцы систем могут выбирать собственные имена хостов, доступные другим системам в локальной сети, без необходимости регистрации на DNS-сервере.
Марк Плотник
2
Во многих домашних сетях локальный маршрутизатор действует как распознаватель DNS. Хосты отправляют свое имя хоста, когда запрашивают адрес с помощью DHCP, и маршрутизатор запоминает это имя и разрешает его для всех хостов в сети. Как отмечают Марк и RubberStamp, есть также Bonjour (реализованный в Avahi), который позволяет обнаруживать сервисы в локальной сети (в частности, принтеры). Также обратите внимание, что хосты могут иметь несколько IP-адресов, а имена хостов теперь располагаются в пространстве имен, поэтому процессы могут видеть разные имена хостов на одном хосте.
Стивен Китт
7

Есть ли у компьютерной системы (Linux) только одно имя хоста?

Нет.

[Я полностью проигнорирую, что любой может дать вашему хосту любое имя, которое ему нравится, с помощью записи DNS, указывающей на его адрес, или что вы можете иметь более одного псевдонима для него /etc/hosts, или любые философские соображения о том, что такое имя на самом деле]

В системе linux имя хоста - это просто ресурс для процесса («пространство имен UTS»), который наследуется его дочерними элементами по умолчанию, но может быть отключен с помощью unshare(2)или clone(2)с помощью CLONE_NEWUTSфлага. Вы должны заглянуть в namespaces(7)справочную страницу.

Как и pids, номера портов, точки монтирования и т. Д., Имя хоста больше не является глобальным идентификатором, и его можно виртуализировать точно так же, как адресное пространство (виртуальная память) или таблица дескрипторов файлов процесса.

В виртуальном хостинге несколько имен хостов могут быть преобразованы в разные корневые каталоги на веб-сервере. Если компьютерная система (Linux) может иметь только одно имя хоста, как возможен виртуальный хостинг?

Виртуальный хостинг - это нечто совершенно другое, и обычно это делается путем настройки DNS-записи с подстановочными знаками (например, *.foo.com=> 13.13.13.13) с веб-сервером, который работает 13.13.13.13и обслуживает различные каталоги / ресурсы в зависимости от значения Host:заголовка http [1] (который легко настраивается). ; большинство веб-серверов могут обслуживать разные ресурсы на основе любого http-заголовка, а не только Host:). Во всем этом операционная система системы, на которой работает веб-сервер, не играет никакой роли.

[1] или о значении указания имени сервера в случае https, что позволяет одному и тому же веб- серверу использовать разные сертификаты для разных виртуальных хостов.

Дядя билли
источник
Я должен не согласиться с вами по этому поводу. Для виртуального хостинга у нас обычно есть определенный набор записей cname, указывающих на один хост. Мы не используем запись DNS с подстановочными знаками, так как у нас есть много систем в домене, нуждающихся в виртуальных хостах. За исключением пространств имен UTS (насколько широко это используется?) У вас есть hostnamectl, сообщающий об одном имени хоста для данного сервера. DNS и hostnamectl являются ортогональными и имеют мало общего друг с другом.
doneal24
1
@ DougO'Neal С чем ты не согласен? Эти записи DNS с подстановочными знаками используются так, как я это описываю? Их так дико используют (извините за каламбур), нравится вам это или нет. Что информация UTS виртуализирована для каждого процесса в Linux? Это просто так. Что касается идеи о том, что пространства имен используются / будут использоваться только консервированными решениями для контейнеризации / виртуализации (как предлагается в другом ответе), извините, но это «только девочки играют в куклы» или «ручные передачи используются только в тяжелых грузовиках» качество ;-)
Дядя Билли
1

Обычно вы устанавливаете одно имя хоста в / etc / hostname. И вы установили много доменных имен в / etc / hosts.

Пространства имен UTS позволяют одной системе иметь разные имена хостов и доменов для разных процессов. Для получения дополнительной информации: https://en.wikipedia.org/wiki/Linux_namespaces . Таким образом, абсолютно возможно иметь несколько имен хостов и доменных имен для одной и той же системы. Например, контейнер докера внутри одного хоста имеет другое имя хоста, чем хост-система.

Уддхав Гаутам
источник