Установка имени хоста: полное доменное имя или краткое имя?

Я заметил, что «предпочтительный» метод установки имени хоста системы принципиально отличается между системами Red Hat /CentOS и Debian /Ubuntu.

документация CentOS и Руководство по развертыванию RHEL сказать, что имя хоста должно быть FQDN :

  

HOSTNAME = <value>, где <value> должен быть Полностью квалифицированный домен   Имя (FQDN), например hostname.example.com, но может быть любым   hostname необходимо.

руководство по установке RHEL немного более двусмысленны:

  

Программа установки предложит вам указать имя хоста для этого компьютера, либо как    полное доменное имя (FQDN) в формате имя_хоста.домена   или как короткое имя хоста в формате имя хоста .

Ссылка Debian говорит, что имя хоста не следует использовать FQDN :

  

3.5.5. Имя хоста

     

Ядро поддерживает систему имя хоста . Скрипт init на уровне запуска   S, который символически привязан к « /etc/init.d/hostname.sh », устанавливает систему   имя хоста во время загрузки (с помощью команды имя хоста ) в сохраненное имя   в " /etc /hostname ". Этот файл должен содержать только имя системного хоста,   не полное доменное имя.

Я не видел никаких конкретных рекомендаций от IBM, о которых можно использовать, но некоторое программное обеспечение , кажется, имеет предпочтение.

Мои вопросы:

  • В гетерогенной среде лучше использовать рекомендацию поставщика или выбрать один и быть согласованным на всех хостах?
  • С каким программным обеспечением вы столкнулись, который чувствителен к тому, установлено ли имя хоста для полного доменного имени или короткого имени?
158 голосов | спросил Cakemox 17 42011vEurope/Moscow11bEurope/MoscowThu, 17 Nov 2011 17:07:12 +0400 2011, 17:07:12

7 ответов


95

Я бы выбрал последовательный подход во всей среде. Оба решения работают нормально и будут совместимы с большинством приложений. Однако есть разница в управляемости.

Я иду с коротким именем в качестве параметра HOSTNAME и устанавливаю FQDN в качестве первого столбца в /etc /hosts для IP-адреса сервера, за которым следует краткое имя.

Я не сталкивался с множеством программных пакетов, которые обеспечивают или демонстрируют предпочтение между ними. Я считаю, что короткое имя будет более чистым для некоторых приложений, особенно для ведения журнала. Может быть, мне не повезло увидеть внутренние домены, например server.northside.chicago.rizzomanufacturing.com. Кто хочет видеть это в журналах или приглашении оболочки ?

Иногда я участвую в приобретении или реструктуризации компаний, где меняются внутренние домены и /или поддомены. Мне нравится использовать короткое имя хоста в этих случаях, потому что регистрация, кикстарт, печать, мониторинг системы и т. Д. Не нуждаются в полной реконфигурации для учета новых доменных имен.

Типичная настройка сервера RHEL /CentOS для сервера с именем «rizzo» с внутренним доменом «ifp.com» будет выглядеть так:

/и т.д. /sysconfig /сети:
HOSTNAME = Риццо
...

-

/и т.д. /хосты:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: 1 localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.100.13 rizzo.ifp.com rizzo

-

[root @ rizzo ~] # имя хоста
Риццо

-

/var /log /messages snippet:
Dec 15 10:10:13 rizzo proftpd [19675]: 172.16.100.13 (:: ffff: 206.15.236.182 [:: ffff: 206.15.236.182]) - Подготовка к
 chroot в каталог '/app /upload /GREEK'
Dec 15 10:10:51 rizzo proftpd [20660]: 172.16.100.13 (:: ffff: 12.28.170.2 [:: ffff: 12.28.170.2]) - Открыт сеанс FTP.
Dec 15 10:10:51 rizzo proftpd [20660]: 172.16.100.13 (:: ffff: 12.28.170.2 [:: ffff: 12.28.170.2]) - Подготовка к chroot
в каталог '/app /upload /ftp /SRRID'
ответил ewwhite 17 42011vEurope/Moscow11bEurope/MoscowThu, 17 Nov 2011 17:20:41 +0400 2011, 17:20:41
34

Практически все программное обеспечение чувствительно к правильной настройке имени хоста. В то время как я работал в Digg, я как-то привел весь сайт в течение 2 часов из-за того, что я сделал невидимое изменение в /etc /hosts, которое повлияло на представление системы имени хоста. Протезируйте слегка. Тем не менее, вы можете быть немного смущены здесь. Я не думаю, что параметр HOSTNAME = напрямую эквивалентен тому, как дистрибутивы на основе Debian используют /etc /hostname.

Что работает для меня в гетерогенной среде:

  1. Задайте имя хоста в рекомендованном производителем порядке, используя условное выражение в вашем программном обеспечении для управления конфигурацией.
  2. Используйте команду hostname для установки имени хоста, используемого ядром, и т. д.
  3. В /etc /hosts:

    127.0.0.1 localhost
    10.0.0.1 hostname.example.com имя хоста
    

Эта конфигурация еще не сработала.

ответил Paul Lathrop 21 12011vEurope/Moscow11bEurope/MoscowMon, 21 Nov 2011 22:48:07 +0400 2011, 22:48:07
27

У вас наверняка не будет проблем с поиском ссылок в Интернете, которые скажут вам определенно сделать это так или иначе. Однако мне кажется, что короткое имя как имя хоста и полное имя в /etc /hosts, безусловно, гораздо более распространено. Это кажется более разумным, так как тогда услуги, которые нуждаются в полностью квалифицированном имени, могут быть адаптированы для вызова hostname --fqdn.

Я только недавно наткнулся на одну часть программного обеспечения, которая жестко требует, чтобы fqdn возвращался с помощью hostname, который был ganeti. Они документируют этот здесь . Однако я не вижу причин, по которым они не могут адаптироваться к hostname --fqdn.

ответил stew 15 ThuEurope/Moscow2011-12-15T18:45:14+04:00Europe/Moscow12bEurope/MoscowThu, 15 Dec 2011 18:45:14 +0400 2011, 18:45:14
9

Несколько тангенциально, исследуя этот вопрос, я достаточно схожу, чтобы проверить исходный код «hostname» и написать сценарий для печати результатов расследования (Fedora 19). То, что отсутствует, - это взгляд на «/etc /hosts», который, по моему скромному мнению, должен быть в стороне от всего этого.

#! /Bin /Баш

функциональная панель {
   если [[$ 1 == '? ]]; тогда
      printf "% -23s" "?"
   еще
      printf "% -23s" "'$ 1'"
   фи
}

# ----- Ядро -----

# Два способа настройки значений ядра:
# 1) Поместите FQDN в "kernel.hostname" и ничего в "kernel.domainname"
# 2) Поместите имя машины в «kernel.hostname» и доменное имя DNS в «kernel.domainname» (имеет больше смысла)

echo "== Значения ядра =="
эхо

H = `/sbin /sysctl -n kernel.hostname`
D = `/sbin /sysctl -n kernel.domainname`

echo "Имя хоста ядра: '$ H'"
echo "Kernel domainname: '$ D'"

# ----- Что говорит баш -----

эхо
echo "== Согласно bash =="
эхо

echo "HOSTNAME = '$ HOSTNAME'"

# ----- Конфигурационный файл имени хоста ------

эхо
echo "== Конфигурационный файл имени хоста =="
эхо

ETCH = "/и т.д. /имя хоста"

если [[-f $ ETCH]]; тогда
   СОДЕРЖАНИЕ = `cat $ ETCH`
   echo «Файл» $ ETCH содержит: '$ CONTENTS' "
еще
   echo «Файл» $ ETCH «не существует»
фи

# ----- Сетевой файл конфигурации ------

эхо
echo "== Сетевой файл конфигурации =="
эхо

SYSN = "/и т.д. /sysconfig /сеть"

если [[-f $ SYSN]]; тогда
   LINE = `grep -e" ^ HOSTNAME = "$ SYSN`
   если [[-n $ LINE]]; тогда
      echo «Файл» $ SYSN содержит: «$ LINE»
   еще
      echo «Файл» $ SYSN существует, но не содержит строки для «HOSTNAME»
   фи
еще
   echo "Файл" $ SYSN 'не существует "
фи

# ----- Nodename -------

эхо
echo "== Nodename =="
эхо

UNAME = `uname --nodename` # В Linux это имя хоста

echo «Имя« nodename », данное« uname --nodename », равно:« $ UNAME »

# ----- «hostname» mess ------

THE_HOSTNAME = `hostname`
SHORT_NAME = `имя хоста --short`
NIS_DNAME = `domainname`
YP_DNAME = `имя хоста --yp` # То же, что и` nisdomainname`; это может завершиться неудачей с "hostname: Локальное имя домена не установлено"

если [[$? ! = 0]]; тогда
   YP_DNAME = "?"
фи

эхо
echo "== 'hostname' непосредственно полученные значения =="
эхо
echo "Результат gethostname ();"
echo "..., полученный при запуске 'hostname'
echo "Имя хоста: $ (pad $ THE_HOSTNAME)"
эхо
echo «Часть перед первым». значения, возвращаемого gethostname (); "
echo "..., полученный при запуске 'hostname --short'
echo "Сокращенное имя: $ (pad $ SHORT_NAME)"
эхо
echo "Результат getdomainname (), код« hostname », похоже, называет это« доменное имя NIS »;
echo "... в Linux, это имя домена, настроенное на ядро;"
echo "... полученный путем запуска 'domainname'
echo "доменное имя NIS: $ (pad $ NIS_DNAME)"
эхо
echo "Результат yp_get_default_domain (), который может завершиться неудачей;"
echo "... полученным путем запуска 'Ä ¥ ostname -yp'"
echo "Домен YP по умолчанию: $ (pad $ YP_DNAME)"

DNS_DNAME = `hostname --domain` # То же, что` dnsdomainname` '
FQDN_NAME = `имя хоста --fqdn`
ALIAS_NAME = `имя хоста - alias`

эхо
echo "== 'hostname', полученные через DNS =="
эхо
echo «Часть после первого». значения «канонического имени», возвращаемого getaddrinfo (gethostname ());
echo "..., полученный при запуске« hostname --domain »
echo "DNS-доменное имя: $ (pad $ DNS_DNAME)"
эхо
echo "Значение« канонического имени », возвращаемое getaddrinfo (gethostname ());
echo "... полученный путем запуска 'hostname --fqdn'"
echo "Полностью квалифицированное имя хоста: $ (pad $ FQDN_NAME)"
эхо
echo "Псевдоним, полученный gethostbyname (gethostname ());
echo "... полученное путем запуска 'hostname -alias'"
echo "Псевдоним имени хоста: $ (pad $ ALIAS_NAME)"

BY_IP_ADDR = `имя хоста --ip-адрес`
ALL_IP_ADDR = `имя хоста - all-ip-addresses`
ALL_FQDN_NAMES = `имя хоста - all-fqdn`

эхо
echo "== 'hostname', полученные путем сбора настроенных сетевых адресов =="
эхо
echo «Соберите IP-адреса из getaddrinfo (gethostname ()), примените getnameinfo (ip) ко всем этим адресам»;
echo "... полученный путем запуска 'hostname --ip-address'
echo "По IP-адресу: $ BY_IP_ADDR"
эхо
echo «Вызвать getnameinfo (NI_NUMERICHOST) на всех адресах, отлаженных от активных интерфейсов»;
echo "... полученный путем запуска 'hostname -all-ip-addresses'"
echo "Все IP-адреса: $ ALL_IP_ADDR"
эхо
echo "Позвонить getnameinfo (NI_NAMEREQD) на всех адресах, отлаженных от активных интерфейсов (включает поиск в /etc /hosts);
echo "... полученный путем запуска 'hostname -all-fqdn'"
echo "Все полные имена хостов: $ ALL_FQDN_NAMES"

Выход на виртуальной машине Amazon EC2 под управлением Fedora 19 , после ручной установки значений ядра и заполнения /etc /hostname, но без изменений в /etc /hosts может выглядеть следующим образом:

== Значения ядра ==

Имя хоста ядра: 'kyubee'
Kernel доменное имя: 'homelinux.org'

== Согласно bash ==

HOSTNAME = 'ip-172-31-24-249.localdomain'

== Конфигурационный файл хоста ==

Файл '/etc /hostname' содержит: 'kyubee.homelinux.org'

== Сетевой файл конфигурации ==

Файл '/etc /sysconfig /network' существует, но не содержит строки для 'HOSTNAME'

== Nodename ==

«Nodename», заданное'uname --nodename': 'kyubee'

== 'hostname' непосредственно полученные значения ==

Результат gethostname ();
... полученный путем запуска 'hostname'
Имя хоста: 'kyubee'

Часть перед первым «.» значения, возвращаемого gethostname ();
... полученный путем запуска «hostname --short»
Краткое название: 'kyubee'

Результат getdomainname (); код «hostname», похоже, называет это «доменным именем NIS»;
... в Linux это доменное имя, сконфигурированное с помощью ядра;
... полученный путем запуска 'domainname'
NIS доменное имя: 'homelinux.org'

Результат yp_get_default_domain (), который может завершиться неудачей;
... полученный путем запуска 'Ä ¥ ostname -yp'
Домен YP по умолчанию: 'homelinux.org'

== 'hostname' значения, полученные через DNS ==

Часть после первого '.' значения «канонического имени», возвращаемого getaddrinfo (gethostname ());
... полученный путем запуска «hostname --domain»
DNS доменное имя: ''

Значение «канонического имени», возвращаемое getaddrinfo (gethostname ());
... полученный путем запуска 'hostname --fqdn'
Полноценное имя хоста: 'kyubee'

Псевдоним, полученный gethostbyname (gethostname ());
... полученный путем запуска 'hostname -alias'
Имя псевдонима узла: ''

== 'hostname', полученные путем сбора настроенных сетевых адресов ==

Соберите IP-адреса из getaddrinfo (gethostname ()), примените getnameinfo (ip) ко всем этим адресам;
... полученный путем запуска «hostname -ip-address»
По IP-адресу: fe80 :: 8f6: 8eff: fe49: 9e21% eth0 172.31.24.249

Вызовите getnameinfo (NI_NUMERICHOST) на всех адресах, которые могут быть перехвачены с помощью активных интерфейсов;
... полученный путем запуска 'hostname -all-ip-addresses'
Все IP-адреса: 172.31.24.249

Вызовите getnameinfo (NI_NAMEREQD) по всем адресам, зачищенным от активных интерфейсов (включает поиск в /etc /hosts);
... полученный путем запуска 'hostname -all-fqdn'
Все полные имена хостов: ip-172-31-24-249.eu-west-1.compute.internal

Устойчивый способ получить полное имя хоста в perl будет следующим:

sub getHostname {

   my $ hostname_short = `/bin /hostname --short`;
   if ($?! = 0) {print STDERR «Не удалось выполнить« hostname --short »- выход из \ n"; exit 1}
   chomp $ hostname_short;

   my $ hostname_long = `/bin /hostname`;
   if ($?! = 0) {print STDERR "Не удалось выполнить 'hostname' - exit \ n"; exit 1}
   chomp $ hostname_long;

   if ($ hostname_long = ~ /^${hostname_short}\..+$/) {
      # "hostname_long" - это квалифицированная версия "hostname_short"
      return $ hostname_long
   }
   else {
      # оба имени хоста являются «короткими» (и равными)
      die if ($ hostname_long eq $ hostname_short);

      my $ domainname = `/bin /domainname`;
      if ($?! = 0) {print STDERR "Не удалось выполнить 'domainname' - exiting \ n"; exit 1}
      chomp $ domainname;

      if ($ domainname eq "(none)") {
         # Изменить по вкусу
         return "$ {hostname_short} .localdomain"
      }
      else {
         return "$ {hostname_short}. $ {domainname}"
      }
   }
}

и в bash это будет:

function getHostname {

   local hostname_short = `/bin /hostname --short`

   если [$? -ne 0]; тогда
      echo «Не удалось выполнить« hostname --short »- выйти«> & 2; выход 1
   фи

   local hostname_long = `/bin /hostname`

   если [$? -ne 0]; тогда
      echo "Не удалось выполнить" hostname "- exit"> & 2; выход 1
   фи

   if [[$ hostname_long = ~ ^ "$ hostname_short" \ .. + $]]; тогда
      # "hostname_long" - это квалифицированная версия "hostname_short"
      echo $ hostname_long
   еще
      # оба имени хоста являются «короткими» (и равными)
      if [[$ hostname_long! = $ hostname_short]]; тогда
         echo "Не может быть:" $ hostname_long '<>' $ hostname_short '- exit "> & 2; выход 1
      фи

      local domainname = `/bin /domainname`

      если [$? -ne 0]; тогда
         echo "Не удалось выполнить" domainname "- exit"> & 2; выход 1
      фи

      if [[domainname == '(none)']]; тогда
         # Изменить по вкусу
         echo "$ {hostname_short} .localdomain"
      еще
         echo "$ {hostname_short}. $ {domainname}"
      фи
   фи
}

Примечания

Примечание 1: HOSTNAME - это переменная оболочки, которая предоставляет bash («Автоматически назначается имя текущего хоста»), но нет никаких указаний о том, что bash достигает этого значения.

Примечание 2: Никогда не забывайте /etc /hostname в /boot/initrams-FOO.img ...

ответил David Tonhofer 3 +04002013-10-03T15:39:23+04:00312013bEurope/MoscowThu, 03 Oct 2013 15:39:23 +0400 2013, 15:39:23
-4

Параметры /etc /hosts работают хорошо.

Но вы хотите убедиться, что все соответствующие файлы обновлены, запустите инструмент setup

ответил Riaan 25 52011vEurope/Moscow11bEurope/MoscowFri, 25 Nov 2011 15:56:57 +0400 2011, 15:56:57
-4

Hm ... В хостах linux, если вы хотите изменить HOSTNAME и FQDN, вы должны решить три шага (например, новый хост rizzo.ifp.com ):

Шаг # 1 Измените значение HOST в конфигурации NETWORK config:

sudo vi /etc /sysconfig /network

Изменить или добавить строку:

HOSTNAME = rizzo.ifp.com

Шаг # 2 Отредактируйте конфигурацию хостов

sudo vim /etc /hosts
# IPv4
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
[Внешний IP] rizzo rizzo.ifp.com

Шаг # 3 Перезагрузите хост Хорошо, просто проверьте новую конфигурацию

[rizzo @ rizzo] # имя хоста -f
rizzo.ifp.com
ответил sub 22 SatEurope/Moscow2012-12-22T14:56:28+04:00Europe/Moscow12bEurope/MoscowSat, 22 Dec 2012 14:56:28 +0400 2012, 14:56:28
-4

Порядок неправильный. Это должно быть:

1.2.3.4 full.example.com full

Итак, пример может понравиться:

[Внешний IP] rizzo.example.com rizzo
ответил Christian Azuero 5 AMpSun, 05 Apr 2015 10:23:51 +030023Sunday 2015, 10:23:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132