Я пытаюсь изменить имя хоста на моем общем сервере с помощью Slicehost, чтобы я мог настроить Postfix как нулевой клиент.
Я редактировал / etc / hosts
и после перезагрузки имя хоста все еще неверное.
Что я делаю не так?
username@mail Fri Jul 01 13:01:32 ~
$ sudo cat /etc/hostname
mail.domain1.com
username@mail Fri Jul 01 13:01:45 ~
$ cat /etc/hosts
127.0.0.1 localhost localhost.localdomain
208.78.100.198 mail.domain1.com
username@mail Fri Jul 01 13:02:13 ~
$ hostname -f
pop.where.secureserver.net
Я также собираюсь добавить к этому серверу еще один домен, как мне это правильно настроить.
Попробуйте установить вторую строку в hosts на 208.78.100.198 mail.domain1.com mail
. Кроме того, перезагрузка не требуется: полное доменное имя нигде не хранится, его ищут на лету.
Я считаю, что полное доменное имя можно найти, выполнив DNS-запрос на IP-адрес сервера, а затем получив первый ответ, поэтому это работает. Должна быть возможность установить полное доменное имя без изменения хостов, используя только DNS (или NIS, или LDAP, или что-то еще. nsswitch.conf
ищет хосты), но если он находится в файле hosts, нет необходимости в сетевом трафике, который может истечь по таймауту или иным образом вызвать проблемы в чрезвычайной ситуации.
Больше информации Вот все, что происходит (это только для Linux, другие ОС могут и будут делать что-то несколько иначе):
hostname
использует gethostname(2)
функция, указанная в unistd.h
чтобы получить имя хоста. Эта функция реализована как вызов uname(2)
, где nodename
поле структуры извлекается и возвращается. Это будет установлено ранее в процессе загрузки с соответствующим sethostname(2)
вызов, поскольку у ядра нет другого способа узнать имя хоста. В вашем случае это будет mail
. (Кстати, это то, что вам нужно в /etc/hostname
).
Затем это решается с помощью стандартного системного преобразователя, который будет либо getaddrinfo(3)
или gethostbyname(3)
в зависимости от года выпуска ваших системных утилит. Поле h_name
, определенное как "официальное имя хоста", возвращается. Я считаю, что это соответствует первому имени, указанному в файле hosts.
Что касается вашего вопроса о нескольких доменах, hostname
не может правильно работать с несколькими именами. Каждый интерфейс (даже виртуальный) может иметь свой собственный IP-адрес, а иногда даже несколько физических интерфейсов могут иметь общий IP-адрес.
Вы должны убедиться, что каждый IP-адрес, подключенный к вашему хосту, разрешается через обратный поиск IP в соответствующее имя и правильно настроить ваш почтовый сервер.