Networking

FQDN

Fully Qualified Domain Name — полное доменное имя узла со всеми уровнями до корня, например server1.msk.example.com.

Что такое FQDN

FQDN (Fully Qualified Domain Name) — полностью определённое доменное имя: имя узла со всеми уровнями домена вплоть до корневой зоны. Оно однозначно определяет узел во всём интернете — двух одинаковых FQDN не бывает.

server1 . msk . example . com .
   │       │       │       │  └─ корневая зона (точка)
   │       │       │       └──── домен верхнего уровня
   │       │       └──────────── домен второго уровня
   │       └──────────────────── поддомен
   └──────────────────────────── имя хоста

Ключевое отличие от просто «имени» — контекст не нужен. server1 — это где угодно; server1.msk.example.com — конкретная машина. Формально настоящий FQDN заканчивается точкой (example.com.), которая обозначает корень. В DNS-зонах эту точку писать обязательно, в браузере и большинстве утилит её опускают.

Чем FQDN отличается от hostname

hostname FQDN
Пример server1 server1.msk.example.com
Уникальность внутри своей сети глобальная
Резолвится извне нет да
Годится для сертификата нет да
$ hostname
server1

$ hostname -f
server1.msk.example.com

$ hostname -d
msk.example.com

Если hostname -f возвращает localhost или ошибку — FQDN не настроен. Это ломает больше вещей, чем кажется: Postfix подставит кривое имя в SMTP-приветствие, и письма начнут отбиваться, а логи в централизованном хранилище станут неразличимы.

Настраивается в двух местах, и оба должны совпадать:

$ sudo hostnamectl set-hostname server1.msk.example.com

# /etc/hosts — первая строка обязана содержать FQDN раньше короткого имени
127.0.1.1   server1.msk.example.com server1

Ограничения формата

Правила заданы стандартом и иногда неожиданно всплывают:

  • Метка (часть между точками) — до 63 символов.
  • Всё имя целиком — до 253 символов.
  • Разрешены буквы, цифры и дефис; дефис не может быть первым или последним символом.
  • Регистр не имеет значения: Example.COM и example.com — одно и то же.
  • Кириллица кодируется в punycode: сервер.рфxn--h1alffa9f.xn--p1ai.

Где FQDN обязателен

  • SSL-сертификаты выпускаются на FQDN. Let's Encrypt не выдаст сертификат на server1 или на IP — только на полное имя, которое он сможет проверить публично.
  • Виртуальные хосты. nginx выбирает конфиг по имени из заголовка Host, а SNI передаёт его же при установке TLS-сессии.
  • Кластеры. Узлы Kubernetes, брокеры Kafka, реплики БД адресуют друг друга по FQDN — при смене IP-адреса имя остаётся прежним, и конфиги не переписывают.
  • Почта. PTR-запись должна разворачивать IP сервера в его FQDN, иначе крупные провайдеры отклонят соединение.

Как это работает при резолвинге

Утилиты умеют достраивать короткое имя до полного, подставляя суффикс из /etc/resolv.conf:

search msk.example.com example.com
nameserver 10.0.0.53

С таким конфигом ping server2 последовательно попробует server2.msk.example.com, затем server2.example.com. Удобно, но коварно: результат зависит от того, на какой машине вы запустили команду. Поэтому в конфигах, скриптах и мониторинге всегда пишите FQDN целиком — «у меня работало» слишком часто объясняется именно строкой search.

Связанные термины

  • Домен — из его уровней собирается FQDN
  • DNS — превращает FQDN в адрес
  • IP-адрес — то, во что имя в итоге разрешается
  • SSL-сертификат — выпускается строго на FQDN
  • Адрес сервера — FQDN как способ адресовать сервер
  • SNI — передаёт имя хоста при установке TLS

Готовы запустить GPU-задачу?

Запустить GPU-сервер