Debian.pro/

Про Debian


Большой мануал: часть 5. hostname, файл hosts, ptr и вот это вот всё.

Эта статья — часть Большого Мануала по настройке lamp-сервера на debian.

Предыдущая статья цикла — Настраиваем openssh-server.

Следующая статья цикла — Настраиваем locales и клавиатуру для ipmi/vnc-консолей

Сегодня мы поговорим про одну из самых важных вещей при настройке сервера. Был такой анекдот (дословно не помню):
— чего так сильно задумался?
— да hostname серверу выбираю.
— ну ты прям как имя ребенку выбираешь, час уже сидишь.
— ну ты чо. Ребенку можно имя сменить потом, а вот hostname у сервера хрен сменишь.

И действительно — оооочень много геморроя в моей жизни (а особенно в районе почты) было связано с тем, что предыдущие админы/владельцы сервера/рандомные фрилансеры не понимали важности fqdn. Для чего оно вообще нужно? Сервер при обращении к другим серверам будет «представляться» и называть своё «имя». Это имя должно быть корректным (и у нас должны быть документы, бгыгы, чтобы полиция не арестовала). Шутки шутками, но hostname очень важен во «взаимоотношениях» почтовых серверов — если вы пропустите эту статью, то письма с сервера будут улетать в спам почти на всех почтарях.
Много софта тоже завязан на fqdn и будет работать не совсем корректно, если ваш сервер отвечает херню в ответ на команду hostname -f.

Что такое fqdn в принципе? Это доменное имя (да, обычное доменное имя, вроде www.debian.pro). Можно почитать википедию. Я вам лучше покажу на пальцах на примере корректно настроенного сервера, так будет понятнее.

Возьмём для примера корректно настроенный сервер.
Заходим на него по ssh и проверяем hostname:

root@server:~# hostname -f
messer.qs.biz

В ответ на эту команду мы должны получить именно fqdn сервера, а не короткое имя (не messer, например).

Далее узнаем «дефолтный» IP сервера (если у вас всего один IP на сервере — то можете просто скопировать его из письма).
Вообще нужно иметь в виду, что все исходящие коннекты с сервера (если вы не настраивали маршрутизацию локально) будут проходить с одного IP-адреса, вопреки всяческой мифологии.
Собственно, быстрее всего узнать исходящий IP сервера примерно так:

root@server:~# curl ifconfig.me
46.4.251.93

Или так:

root@server:~# curl ip.vlad.pro
46.4.251.93

Запоминаем — с этого адреса (если вы не предпринимали ничего для того, что было по другому) сервер будет открывать все исходящие коннекты — например, обращаться к другим сайтам курлом из php-кода (даже в том случае, если ваш сайт «смотрит» А-записью во второй-третий-десятый IP сервера).

Теперь проверим, что у этого IP есть PTR-запись:

root@server:~# host 46.4.251.93
93.251.4.46.in-addr.arpa domain name pointer messer.qs.biz.

И напоследок проверим, что мы не совсем сошли с ума и прописали прямую запись для нашего хоста в правильный IP:

root@server:~# host messer.qs.biz.
messer.qs.biz has address 46.4.251.93

Вообще всё это было присказка. Теперь начинается сама 5-я часть мануала.
Нам нужно сделать, чтобы в итоге все команды выше отдавали в ответ правильные данные.

Первым делом выберите fqdn для сервера. Обычно fqdn — это домен третьего уровня, на котором «не будет сайта». Проще говоря, www.qs.biz — хреновый fqdn в перспективе (потому что www.qs.biz домен когда-нибудь захочет переехать на другой сервер), а вот messer.qs.biz — неплохое имя, вряд ли я когда-нибудь решу поднять там сайт.
Так же не очень хорошая идея делать fqdn второго уровня по той же причине (хотя если вам не лень регистрировать домен второго уровня только ради этого и вы точно не собираетесь на него вешать сайт — то милости просим).

Когда выбрали fqdn, прописываем прямую А-запись (и AAAA-запись, если есть ipv6) на IP сервера. Здесь я не возьмусь описывать, как именно прописать — регистраторов миллион, панелей управления DNS ещё больше. Если ваш домен делегирован на NS-ы регистратора, то можете подглядеть в инструкции Яндекс.ПДД — http://help.yandex.ru/pdd/add-domain/hoster-settings.xml , там для некоторых регистраторов есть инструкция с картинками.

Через пару часов после того, как вы прописали прямую запись (или сколько у вас там TTL), можно прописывать PTR-запись (или по-другому — обратную запись). Как это сделать, опять же, нужно уточнить в саппорте своего хостера. Могу только отметить, что у PTR-записи на конце должна быть точка, если будете прописывать сами в веб-морде.

Ну и после всего этого остаётся настроить hostname сервера. Для этого нужно поправить 2 файла.
/etc/hostname:

messer.qs.biz

То есть пишем fqdn без точки на конце.

В файл /etc/hosts нужно добавить такую строку:

46.4.251.93 messer.qs.biz messer

Обратите внимание на порядок столбцов в строке — сначала ip, потом fqdn целиком, потом короткое имя хоста (до первой точки).

И в конце нужно запустить команду:

root@server:~# /etc/init.d/hostname start

Для убунты 14.04 и дебиана 8-го (и новее):

root@server:~# service hostname start

На этом всё. Остаётся только дождаться, когда PTR и A записи созданные ранее разъедутся по всем резолверам (обычно — TTL*2) и можно начинать использовать сервер.

28.06.2015 byinkvizitor68sl|big-manual

Комментарии (36):

  1. FiX :

    Таки какой хостнейм выбирать, еслм собираешься на нем поднять сайт? А если несколько?

  2. FiX :

    На самом деле, сильно не хватает описания как /etc/hosts ломает hostname/hostname -f и пр.

  3. > Таки какой хостнейм выбирать, еслм собираешься на нем поднять сайт?
    Любой домен, на котором не будет сайта крутиться.

    > А если несколько?
    hostname один, условие предложением выше не нарушается и в этом случае.

    > На самом деле, сильно не хватает описания как /etc/hosts ломает hostname/hostname -f и пр.
    Например?
    Или вы имеете в виду, что люди додумкаются перечислить 2 строки в hosts с hostname? Или 2 строки с ip-адресом?
    Я все такие случаи описывать не возьмусь. Люди много могут херни придумать, я столько не придумаю =)

  4. FiX :

    Я про то, что
    ip debian.pro debian
    Не то же самое, что
    ip debian debian.pro

  5. FiX :

    Вообще, в hosts много костылей бывает вроде 127.0.1.1, ipv6-localhost и пр. Каждый что-то одно чинит, а что-то другое ломает.

  6. > Вообще, в hosts много костылей бывает вроде 127.0.1.1, ipv6-localhost и пр. Каждый что-то одно чинит, а что-то другое ломает.
    Эти строки на hostname не влияют.

    А пояснение написал, спасибо.

  7. FiX :

    Просто прочитав в заголовке «hostname, файл hosts, ptr и вот это вот всё» я ожидал немного другого нежели разбора очевидных вещей.

  8. > я ожидал немного другого нежели разбора очевидных вещей.
    Ох нет, это далеко не очевидные вещи подавляющему большинству людей. Честно говоря, вне яндекса я не встречал НИ ОДНОГО сервера, на котором ptr+hostname были бы корректно настроены. Достаточно просто посканить большую сетку (что-то вроде /20) и вы поймете, что я не шучу.

  9. Балда, это не анекдот;) https://xkcd.com/910/

  10. Ну и у меня в конторе всё это дело правильно настроено, кому надо — те заморачиваются. Хочешь, тукни в джаббер, дам примеры хостов, полюбуешься.

  11. > Ну и у меня в конторе всё это дело правильно настроено, кому надо — те заморачиваются
    У меня в «конторе» тоже все до единого хоста правильно настроены.

    Но мануал-то не для контор (и даже не для опытных админов, думаю, разве что для новичков, которые, настраивая лампу, всё ещё не понимают, что именно настраивают и зачем). А у «виртуалок за десять баксов» с хостнеймами всё плохо.

  12. Михаил :

    а для сервера сайтов и почты , с условияем что вебмейл на поддомене mail.mydomen.ru , можно поставить mail.mydomen.ru

  13. Влад :

    Спорная идея. Если потом захочется выносить почту к внешнему провайдеру — он, скорее всего, попросит домен mail.domain в себя (для той же вебморды) направить.

  14. Антон :

    Огромное спасибо! Ну наконец-то с этим все ясно, я всегда домен второго уровня прописывал, но все равно были проблемы после каждого переезда.
    p.s. у меня вот так на debian

    sudo /etc/init.d/hostname.sh start

  15. an :

    Поясните, пожалуйста.

    > Проще говоря, http://www.qs.biz — хреновый fqdn в перспективе (потому что http://www.qs.biz домен когда-нибудь захочет переехать на другой сервер), а вот messer.qs.biz — неплохое имя, вряд ли я когда-нибудь решу поднять там сайт.

    Вот я взял VPS для проекта. Купил домен supermydomain.com. Виртуалке я назначаю адрес supermydomain.com ? Или лучше frodo.supermydomain.com ? А вебсайт лучше делать http://www.supermydomain.com? Мне казалось, сейчас все отказываются от www. Спасибо.

  16. > Мне казалось, сейчас все отказываются от www.
    Отказываться-то они отказываются, но никто не забывает делать редирект с http://www.domain на domain, чтобы не терять упоротых людей, которые руками пишут www

    Так что лучше hostname делать frodo, сайт вешать на domain, делать редирект с www (или вешать на www, а с domain делать редирект — дело вкуса).

  17. Visteras :

    Хм… а имеет ли смысл использовать домен 4 уровня конкретно для серверов?
    Т.е. не server.example.org а main.s.example.org ?

  18. inkvizitor68sl :

    > а имеет ли смысл использовать домен 4 уровня конкретно для серверов?
    Без разницы.

  19. MoonHowl :

    А http://www.qs.biz прописывать в качестве hostname — это нормально? (хостер так по дефолту настроил).

  20. Нет, не очень.
    «Проще говоря, http://www.qs.biz — хреновый fqdn в перспективе (потому что http://www.qs.biz домен когда-нибудь захочет переехать на другой сервер), а вот messer.qs.biz — неплохое имя, вряд ли я когда-нибудь решу поднять там сайт.»

  21. Slam :

    Здравствуйте,

    Подскажите, пожалуйста, есть виртуалка, уже рабочая. На ней крутиться вебсервер + почта.
    Начал колупаться в почте, чтобы настроить DKIM и дошел до того, что с hostname у меня черти что.

    hostname -f — http://www.site.ru
    hostname — http://www.site.ru
    hostname -d — site.ru

    Почту мне вообще настроили на http://www.site.ru, что, как понимаю, не совсем корректно. Виртуальный хост настроен на реддирект www > site.ru

    Почта вроде бы ходит, но на рамблер, к примеру, не попадает.

    Думаю, перенастроить почту на mail.site.ru. Попросил хостера добавить PTR для mail.site.ru и сижу, ломаю голову, как быть с изменениями hostname согласно правильности.
    Во первых, повлияет ли изменения этих параметров на работу сейчас?

    Как понимаю, hostname лучше отредактировать на master.site.ru, hosts также вроде бы понятно. mail.site.ru я уже потом просто в postfix вместо http://www.site.ru подставлю.

    Теоретически должно работать все, но может ткнете пальцем, что не так?

    Спасибо заранее :)

  22. > hostname -f — http://www.site.ru
    > hostname — http://www.site.ru
    > hostname -d — site.ru
    Ну так то оно верно, хоть и имя неудачное.
    Нужно смотреть, что в PTR.

    > Думаю, перенастроить почту на mail.site.ru. Попросил хостера добавить PTR для mail.site.ru и сижу, ломаю голову, как быть с изменениями hostname согласно правильности.
    Почту лучше настроить так, чтобы она уходила с домена @site.ru, от fqdn-а оно не сильно зависит.
    fqdn должен быть валидным, почту же можно отправлять не только с fqdn.

    > Попросил хостера добавить PTR для mail.site.
    PTR должен совпадать с fqdn.

    В общем, перечитывайте внимательно статью.

  23. garcol :

    То что пишет автор противоречит man hostname и тому как debian автоматически заполняет данные файлы.
    Если при установке дебиан задать host.local.ru, то в /etc/hostname будет написано: host. В /etc/hosts: 127.0.1.1 host.local.ru host. В мануале сказано что в файле hostname должно быть только имя.

    Или debian всё врёт?

  24. > В /etc/hosts: 127.0.1.1 host.local.ru host.
    И чем статья противоречит этому?

    > В мануале сказано что в файле hostname должно быть только имя.
    Не должно быть, а «рекомендуется». По большей части это актуально для хостов, которые «бывают в разных сетях с разным доменом» (чего у сервера со статическим адресом, конечно же, не будет).

    Ну и, собственно, цитата из man hostname про файл /etc/hostname:
    /etc/hostname Historically this file was supposed to only contain the hostname and not the full canonical FQDN. Nowadays most software is able to cope with a full FQDN here.

  25. Евгений :

    У меня только вопрос про корректнось хостнайме для спам фильтров, я не пойму кто как пишет мануалы, в заголовках писем разных компаний тоже вижу куча всего по разному — в принципе ты мне частично на это ответил. Я буду отсюда отталкиваться (я очень очень новичок) hostname=recived при этом идеально когда recived=mail from (так пишут многие)

    Ты пишеш что поддомен для хостнаме к примеру mail.domain.ru нужен только для самого админа (переезд там и т.п.). При этом письмо с ads@mail.domain.ru (получиться hosname=recived) хуже мне кажется чем с ads@domain.ru при правеле (recived=mail from)

    Как все таки лучше сделать — если сервер vds — только почтовый

  26. > корректнось хостнайме для спам фильтров
    Всё просто.
    fqdn (hostname + domain) должен иметь прямую А-запись (+АААА, если v6 есть) на адрес сервера из src default rout-а, а эти адреса, в свою очередь, должны иметь PTR-запись, совпадающую с fqdn.

    При этом почтовые домены к этому отношения не имеют — как на веб-сервере можно поселить несколько сайтов, так и почтовик может отправлять почту с разных доменов (главное, чтобы всякие SPF, DKIM и dmarc были на этот сервер настроены). Но «представляться» другим почтовикам он при этом будет своим fqdn-ом.

  27. baxhb :

    Влад, прости, что не догоняю, но с ситуацией supermydomain.com я так и не понял, поэтому подниму вопрос. Я покупаю домен baxhb.ru, почему я должен прописать hostname — dolben, а не baxhb, он же (baxhb.ru) у меня всегда останется (если буду платить). То есть по логике я понимал, что hostname должно быть baxhb. Объяснения матом только приветствуются.

  28. Ты ничего не должен. Просто удобнее назвать _сервер_ отличным от _сайта_ доменом на тот случай, если сайт в будущем будет переезжать на другой сервер.
    И fqdn будет чтототам.baxhb.ru по такой логике.

  29. baxhb :

    Спасибо, просто прошёл затык, сервер-то мы сами подымаем, а сайт это уже вторичный продукт, с практикой, как говорится, уйдут детские болезни.

  30. У меня VDS имеет VestaCP, hostname ruspecs.org прописан для основного сайта: https://ruspecs.org
    Тут же у меня есть сайт https://russkie.hu, вся исходящая почта которого имеет маркировку сервера с hostname ruspecs.org.
    Можно ли настроить, чтобы почта второго сайта имела другие исходящие данные?

  31. Статью прочитайте, она как раз про это.
    В целом — можно. Но не нужно.
    В случае с постфиксом, например — нужно запустить 2 инстанса с разным myhostname в конфиге. Второй при этом не будет проходить проверку PTR и будет отлетать в спам на многих почтовиках.

  32. Спасибо. Статью, конечно, прочитал. Если бы раньше нашел ее, то сделал бы поддомен для хостнейм.

  33. влад :

    Здравствуйте! При установке ОС нужно было задать имя, задал, допустим router. Получилось так, в файле /etc/hosts есть:
    127.0.0.1 localhost
    192.168.8.1 router
    192.168.8.1 router.lan
    192.168.8.1 ns.router ns wpad.router wpad

    есть так же файл /etc/hostname и нём
    router

    Удаление записи «192.168.8.1 router» из /etc/hosts может нарушить работу системы? Squid например начал сообщать что нужно добавить директиву visible_hostname, хотя это не влияло на саму работу, только сообщение в логе исчезло. Другая программа начала падать с «segfault at 0 ip 00007f42b6fe4b645 sp 00006f4b4dfe82f8 error 4 in libc-2.31.so[6f4b6fce5100+177000]», но тут я не уверен т.к. была разница во времени сутки или двое после удаления той записи. В целом интересует, возможно ли такое поведение?

  34. Ну к сегфолтам вряд ли приведет, а про visible_hostname из-за этого ругалось, да (т.к. hostname -f работать перестанет).

  35. Спасибо за статью. Полностью согласен с важностью правильной настройки hostname.

    От себя добавлю, что лучше использовать команду hostnamectl вместо ручного редактирования. Она же и для проверки сойдет.

    Также в man, действительно, как было отмечено в одном из комментариев, рекомендуется рекомендуется в hostname писать только имя хоста, а связывать с fqdn уже через hosts. Вы совершенно правы, когда пишете, что все современное ПО прекрасно корректно обрабатывает и fqdn в hostname. Но зачем идти вразрез с рекомендациями официального мануала, если это ни на что не влияет?

  36. > hostnamectl вместо ручного редактирования. Она же и для проверки сойдет.
    Статья ещё с тех времен, когда systemd был не в ходу. Сейчас вообще /etc/init.d/hostname не завозят, емнип.
    Лень победить можно, но лень. Надо бы переписать всё уже.

    > рекомендуется в hostname писать только имя хоста, а связывать с fqdn уже через hosts.
    И там же написано, что это рекомендуется для хостов, которые перемещаются между сетями.
    У сервера домен меняться не будет, лучше прибить гвоздями.
    Есть много софта, который смотрит напрямую в /etc/hostname (так быстрее и проще), если там будет короткое имя — многие вещи будут работать не так, как ожидаешь.

    Всякие «Blablabla started, open http://86426c964726:8080/123» в докере (у которого как раз short hostname из коробки) — они ровно отсюда.

Написать комментарий