Hostname — имя сервера в сети. Он используется в приглашении командной строки, логах, почтовых заголовках и PTR-записях. Правильный hostname — это FQDN вида server.example.com.
Типы hostname в Linux
| Тип | Пример | Описание |
|---|---|---|
| static | server.example.com | Основной, хранится в /etc/hostname |
| transient | server | Временный, устанавливается ядром |
| pretty | My Server | Для UI (может содержать пробелы) |
Изменение hostname — современный способ (systemd)
# Посмотреть текущий hostname
hostnamectl status
# Изменить hostname
sudo hostnamectl set-hostname server.example.com
# Проверить
hostname
hostname --fqdn
Обновление /etc/hosts
После смены hostname обязательно обновите /etc/hosts:
sudo nano /etc/hosts
# Добавьте или измените строку:
127.0.1.1 server.example.com server
# Также убедитесь, что публичный IP тоже указан:
YOUR.PUBLIC.IP server.example.com server
Изменение на старых системах (без systemd)
# CentOS 6 / Debian 7 и старше
sudo nano /etc/hostname
# Впишите: server.example.com
# Применить без перезагрузки
sudo hostname server.example.com
Проверка после изменения
# Текущий hostname
hostname
# FQDN
hostname --fqdn
# Полный статус
hostnamectl status
# Новое приглашение появится после:
exec bash # или открыть новую SSH-сессию
mail.yourdomain.com.Hostname и SSL-сертификаты
Let's Encrypt при выдаче сертификата проверяет, что домен указывает на ваш IP. Если hostname сервера — server.example.com, домен server.example.com должен иметь A-запись на IP этого сервера.
localhost или server без домена вызовет проблемы с Postfix, SSL-генерацией и некоторыми панелями управления. Всегда указывайте FQDN.Разбор типичных ошибок
После смены hostname команда "sudo" начинает жаловаться "unable to resolve host" — sudo при запуске пытается разрешить текущий hostname через DNS или /etc/hosts, и если новое имя там не прописано, получает ошибку.
sudo: unable to resolve host server.example.com: Name or service not known
Команда всё равно выполняется, но с задержкой и предупреждением при каждом запуске. Исправляется добавлением строки в /etc/hosts с новым hostname, как описано выше — эта ошибка почти всегда означает, что шаг с /etc/hosts пропущен.
Postfix перестаёт принимать почту с ошибкой "mail for example.com loops back to myself" — возникает, если myhostname в конфигурации Postfix совпадает с доменом, для которого сервер принимает почту, но не с MX-записью.
postfix/smtpd[1234]: warning: mail for example.com loops back to myself
Hostname почтового сервера должен быть поддоменом, а не голым доменом: mail.example.com, а не example.com. После смены hostname обязательно проверьте postconf myhostname и перезапустите Postfix.
Способы задать hostname: сравнение
| Способ | Постоянство | Системы | Требует перезагрузки |
|---|---|---|---|
| hostnamectl set-hostname | Постоянно, до следующей смены | systemd (Ubuntu, Debian, CentOS 7+) | Нет |
| Правка /etc/hostname вручную | Постоянно | Любой Linux, включая без systemd | Да, либо hostname команда |
| hostname (без sudo hostnamectl) | Временно, до перезагрузки | Любой Linux | Нет, но сбрасывается |
| DHCP-опция hostname | Зависит от DHCP-сервера | VPS с автонастройкой сети | Может быть перезаписано |
Когда смену hostname лучше не делать вручную
- Сервер уже настроен для приёма почты, и старый hostname прописан в PTR-записи провайдера — сначала измените PTR на новое имя, иначе почта начнёт отклоняться сразу после смены.
- На сервере выпущены SSL-сертификаты Let's Encrypt на старое имя — после смены hostname сертификаты не перевыпустятся автоматически, нужно запускать certbot заново на новый домен.
- Используются кластерные конфигурации (Galera, Keepalived) — там hostname часто завязан на конфигурацию кластера, и произвольная смена может нарушить связь между узлами.
Проверка результата
- Убедитесь, что новое имя применилось:
hostnamectl statusдолжен показывать нужный Static hostname без ошибок. - Проверьте согласованность с /etc/hosts:
getent hosts $(hostname)должен вернуть корректный IP, а не ошибку. - Проверьте PTR-запись, если сервер используется для почты:
dig -x ВАШ_IP +shortдолжен вернуть новый hostname. - Перезапустите зависимые сервисы (Postfix, панели управления) и проверьте логи на ошибки, связанные со старым именем:
journalctl -u postfix --since "5 min ago".
Для настройки самого почтового сервера после смены hostname см. статью про Postfix, а для выпуска сертификата на новый домен — руководство по SSL с Certbot.
Частые вопросы
Обязательно ли перезагружать сервер после смены hostname?
Перезагрузка не нужна — команда hostnamectl set-hostname применяет изменение сразу, без необходимости рестарта системы. Открытые терминальные сессии и уже запущенные сервисы могут продолжать использовать старое имя, пока их не перезапустят, поэтому после смены стоит перезапустить зависящие от hostname службы вроде Postfix и открыть новую SSH-сессию для проверки.
Hostname — это то же самое, что доменное имя сайта?
Hostname и доменное имя сайта — разные вещи, хотя часто совпадают по формату. Hostname идентифицирует именно сервер в сети и используется системными службами, а домен сайта указывает на IP через DNS и может принадлежать совсем другому серверу или меняться независимо от hostname. Смена одного не переименовывает автоматически другое.
Почему в терминале не сразу видно новое имя в приглашении командной строки?
Приглашение командной строки читает hostname один раз при запуске оболочки, поэтому уже открытая сессия не обновится сама после команды hostnamectl. Новое имя появится только в новой сессии или после команды exec bash, которая перезапускает текущий shell с уже изменёнными переменными окружения без повторного логина по SSH.
Можно ли использовать в hostname заглавные буквы, подчёркивания и цифру в начале?
Заглавные буквы и цифры в hostname допустимы, а вот символ подчёркивания и начало имени с цифры способны вызывать проблемы у части почтовых серверов и старых DNS-резолверов, хотя формально RFC это не всегда прямо запрещает. Безопаснее использовать строчные латинские буквы, цифры и дефис, не ставя дефис или цифру первым символом.