Чи має комп'ютерна система (Linux) лише одне ім’я хоста?


15

hostname використовується для відображення імені DNS системи та для відображення або встановлення її імені хоста або доменного імені NIS.

Чи має комп'ютерна система (Linux) лише одне ім’я хоста?

У віртуальному хостингу кілька імен хостів можна вирішити в різних кореневих каталогах на веб-сервері. Якщо комп'ютерна система (Linux) може мати лише одне ім'я хоста, як можливий віртуальний хостинг?

Спасибі.


Записи DNS A або AAA вказують на одну і ту ж IP-адресу для кількох доменів. Ім'я хоста машини не обов’язково важливо.
RubberStamp

(1) Чи є результат, hostnameколи-небудь використаний для вирішення імені хоста до IP-адреси? (2) A означає IPv4-адресу, AAAA IPv6. Що таке AAA?
Тім

Служби mDNS, такі як avahiзалежать від імені хоста машини. У такому випадку hostname.localбуде вирішено локальну IP-адресу машини. Я бачу, що хтось написав відповідь, яка є розширенням мого першого коментаря ... занадто одночасно для сповіщень мого браузера.
RubberStamp

AAA - короткий
друк

Віртуальний хост не має нічого спільного з іменем хоста. Це суто залежить від поведінки веб-сервера. Сервер відповідає по-різному на різні поля хостів заголовка HTTP-запиту. Я не думаю, що типовий веб-сервер зробив би щось, що стосується DNS або імені хоста, щоб запропонувати віртуальний хост.
炸鱼 薯条 德里克

Відповіді:


26

Так і ні. Ці дві речі називаються іменами хостів.

"Внутрішнє" ім'я хоста - це в основному рядок, що зберігається ядром. Це повернута hostnameкомандою (або gethostname()викликом) і унікальна в системі (*) .

В основному використовується, коли програма хоче вивести якийсь ідентифікатор для системи, на якій працює. Наприклад, \hу Bash 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.


Спасибі. (1) "Установка DNS зазвичай мала б точку 192.0.2.9 назад до імені orange.example.org" Не вирішує отримати IP-адресу для заданого імені хоста, чому навпаки? (2) Чи є вихід, hostnameколи-небудь використаний при вирішенні імені хоста до IP-адреси?
Тім

(2) ... Під час налаштування локальної мережі Wi-Fi у вашому домі від провайдера через маршрутизатор та модем, машини в мережі можуть бути ідентифіковані за виходами їхніх hostnameкоманд, правильно? Чи діє маршрутизатор як DNS для вирішення виходів hostnameприватних IP-адрес у мережі?
Тім

2
що стосується (1), є також зворотні пошуки, які приймають IP-адресу та повертають ім'я. (Для системи з одним ім’ям та однією адресою ви хочете мати можливість вирішити питання щодо іншого, просто для наочності)
ilkkachu

3
Можливо, використовуються невеликі мережі mDNS. На краще чи гірше, вона дозволяє власникам систем вибирати власні імена хостів, доступні для інших систем у локальній мережі, без необхідності реєстрації на сервері DNS.
Марк Плотнік

2
У багатьох домашніх мережах локальний маршрутизатор діє як DNS-розв'язувач. Хости надсилають ім'я свого хоста, коли вони запитують адресу за допомогою DHCP, і маршрутизатор запам'ятовує це ім'я та вирішує його для всіх хостів у мережі. Як згадують Mark та RubberStamp, також є Bonjour (реалізований в Avahi), який дозволяє виявити сервіс у локальній мережі (зокрема принтери). Зауважте також, що хости можуть мати декілька IP-адрес, а імена хостів тепер простір імен, тому процеси можуть бачити різні імена хостів на одному хості.
Стівен Кітт

7

Чи має комп'ютерна система (Linux) лише одне ім’я хоста?

Ні.

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

У системі Linux Linux ім'я хосту - це просто ресурс, що перебуває в процесі ("Простір імен UTS"), який успадковується його дітьми за замовчуванням, але може бути відірваний від прапора unshare(2)або clone(2)за допомогою цього CLONE_NEWUTSпрапора. Ви повинні заглянути в сторінку namespaces(7).

Так само, як підси, номери портів, точки монтажу тощо, ім'я хоста більше не є глобальним ідентифікатором, і воно може бути віртуалізованим так само, як адресний простір (віртуальна пам'ять) або таблиця дескрипторів файлу процесу.

У віртуальному хостингу кілька імен хостів можна вирішити в різних кореневих каталогах на веб-сервері. Якщо комп'ютерна система (Linux) може мати лише одне ім'я хоста, як можливий віртуальний хостинг?

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

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


Я з цим не погоджуюся. Для віртуального хостингу, як правило, ми маємо певний набір записів імен, що вказують на одного хоста. Ми не використовуємо підстановку DNS-запису, оскільки у нас є багато систем у домені, які потребують віртуальних хостів. Виключаючи простори імен UTS (наскільки широко це все-таки використовується?), У вас є hostnamectl, який повідомляє про одне ім’я хоста для даного сервера. DNS і hostnamectl є ортогональними і мало стосуються один одного.
doneal24

1
@ DougO'Neal З чим ви не згодні? Ці записи DNS-символів використовуються таким чином, як я його описую? Вони дико використовуються так (вибачте за каламбур), вам подобається чи ні. Що інформація про UTS віртуалізована за кожний процес у Linux? Це просто так. Щодо ідеї про те, що простори імен використовуються / використовуються лише за допомогою консервованих рішень для контейнерації / віртуалізації (як це запропоновано в іншій відповіді), вибачте, але це "лише дівчата грають з ляльками" або "ручна передача використовується тільки у важких вантажівок" якість ;-)
Дядько Біллі

1

Зазвичай ви встановлюєте одне ім’я хоста в / etc / ім'я хоста. І ви встановлюєте багато доменних імен у / etc / hosts.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.