Почему полное доменное имя хоста неправильно задано в Digital Ocean?

Я наблюдал эту проблему с каплями Ubuntu 16.04, но я полагаю, что это происходит с другими каплями на основе Debian. Больше объяснений ниже.

После создания нового экземпляра я заметил, что hostname --fqdn не возвращает полное доменное имя (полное доменное имя), как я ожидал, а возвращает только имя хоста без добавления к нему имени домена.

$ hostname
mydroplet
$ hostname --fqdn
mydroplet

Я ожидал увидеть что-то вроде этого:

$ hostname --fqdn
mydroplet.example.com

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

Как решить эту проблему?

Stack Overflow - это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. О каких темах я могу спросить здесь в Справочном центре. Возможно, лучше спросить Суперпользователь или Обмен стеков Unix и Linux.

jww 08.08.2018 22:13
mydroplet.example.com - это полное доменное имя нет. Окончание FQDN в точке (.) обозначает верхнюю часть дерева DNS. mydroplet.example.com. и localhost. являются полными доменными именами. Когда присутствует точка, преобразователь не следует добавляет суффиксы к путям поиска. Другое дело, чей DNS вы используете. Также см. Расширенное программирование в среде UNIX У. Ричарда Стивенса.
jww 08.08.2018 22:13

@jww hostname --fqdn не добавляет точку в конце, что бы ни говорилось в RFC.

Richard Gomes 29.06.2020 11:25

Потому что точка неявная. Это не его присутствие, которое обязательно говорит о том, что имя является FQDN или нет, вопреки тому, что говорит @jww. См. RFC 8499: «Но поскольку каждое имя в конечном итоге имеет общий корень, имена часто записываются относительно корня (например,« www.example.net ») и по-прежнему называются« полностью определенными ».

Patrick Mevzek 29.06.2020 16:15

@ Патрик Мевзек: Ничего страшного. Я только что показал вывод команды, чтобы читатели могли понять, в чем проблема, что можно было бы ожидать в результате вывода команды (независимо от того, стоит ли начальная точка или нет) и что нужно сделать, чтобы устранить проблему. Большое спасибо за ваше объяснение. :-)

Richard Gomes 30.06.2020 10:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
2 261
1

Ответы 1

Для нетерпеливых

Эти команды ниже устраняют проблему с существующей каплей:

echo "domain example.com" | sudo tee /etc/resolvconf/resolvconf.d/head
sudo service resolvconf restart

В чем проблема?

Команда hostname --fqdn должна вернуть FQDN (полное доменное имя), например:

$ hostname --fqdn
mydroplet.example.com

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

$ hostname --fqdn
mydroplet

Хьюстон у нас проблема!

Маршрут для фиксации

Вкратце, нам нужно сделать так, чтобы /etc/resolv.conf выглядел так:

$ cat /etc/resolv.conf
domain example.com
nameserver 8.8.8.8
nameserver 8.8.4.4

Если вы не видите в нем domain example.com, рано или поздно у вас возникнут проблемы.

Вы можете подумать, что это просто вопрос редактирования файла, верно? Не так быстро! ... Мы не можем изменить этот файл вручную, потому что он поддерживается самим Debian. Если вы измените его вручную, через некоторое время он сам вернется в исходное состояние.

Создание капель через веб-интерфейс Digital Ocean

Добавьте следующий фрагмент кода в текстовую область, зарезервированную для пользовательских данных облако-инициализация:

#cloud-config
manage_etc_hosts: false
write_files:
  - path: /etc/resolvconf/resolv.conf.d/head
    content: |
      domain example.com
runcmd:
  - service resolvconf restart

Приведенный выше фрагмент гарантирует, что hostname --fqdn вернет то, что вы ожидаете, сразу после первого входа в систему.

Не используйте вслепую 8.8.8.8 или 8.8.4.4, и это совершенно не имеет отношения к установке имени локального хоста.

Patrick Mevzek 08.08.2018 18:35

@Patrick Mevzek :: Я сам не использую Google DNS. Это просто пример.

Richard Gomes 29.06.2020 11:23

Другие вопросы по теме