Как разрешение имени хоста anyname.localhost разрешается в адрес IPv6 :: 1?

В Ubuntu 20 или 22 LTS, если я пытаюсь использовать имя хоста, такое как anyname.localhost, оно всегда разрешается в адрес IPv6 :: 1.

В старом RHEL 6, если я пытаюсь использовать имя хоста, например anyname.localhost, оно всегда разрешается в адрес IPv4 127.0.0.1.

На компьютере с MS-Windows или MacOS 12.6 этого не происходит. (Это происходит только в том случае, если я вручную редактирую /etc/hosts и вручную добавляю псевдоним хоста в 127.0.0.1.

127.0.0.1 localhost localhost.localdomain somename.localhost

)

Это any.sequence.of.names.localhost разрешение на ::1 (localhost) всегда гарантировано? По какой причине? В каких дистрибутивах Linux?

У меня есть несколько проектов, в которых кажется полезным иметь много псевдонимов локальных хостов без необходимости редактировать /etc/hosts, но я искал причуды TCP и DNS и ничего не нашел об этом поведении. (Не очень уверен, что я должен искать). Не уверен, что могу зависеть от такого поведения.

PS: я нашел RFC2606, но он тоже ничего не объясняет.

user1544553 28.10.2022 19:50

Поведение изначально определяется строкой hosts в /etc/nsswitch.conf

stark 28.10.2022 19:53

/etc/nsswitch.conf указывает только список провайдеров для разрешения DNS. Не объясняет, кто определил, что один из этих провайдеров (какой провайдер?) должен разрешать любую.последовательность.из.имен.окончание.в.локальном хосте в ::1 ?

user1544553 28.10.2022 19:59

Это должно ответить на ваш вопрос (который, кстати, здесь оффтоп, так как не связан с программированием): serverfault.com/a/1065514/396475

Patrick Mevzek 28.10.2022 20:03

Спасибо за подсказку, но я еще больше запутался. В Ubuntu 22 мой nsswitch имеет hosts: files mdns4_minimal [NOTFOUND=return] dns (поэтому он всегда должен останавливаться на NOTFOUND. Но он разрешается в ::1). Конечно, это не вопрос «языка программирования», но я настраиваю обратный прокси-сервер http docker, используя traefik, и я действительно не понимаю, откуда такое поведение. (По крайней мере, Windows и Mac не поддерживают его).

user1544553 28.10.2022 20:21

Действительно ли у «старого хоста RHEL 6» есть IPv6-адрес?

MisterMiyagi 28.10.2022 20:29

Нет. Он должен иметь ::1, но ping ::1 дает ping: unknown host ::1 . Возможно, в RHEL 6 отключен IPv6. $ sysctl -a 2>/dev/null | grep disable_ipv6 net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 net.ipv6.conf.eth0.disable_ipv6 = 0 net.ipv6.conf.lo.disable_ipv6 = 0 net.ipv6. conf.virbr0.disable_ipv6 = 1 net.ipv6.conf.virbr0-nic.disable_ipv6 = 0

user1544553 28.10.2022 20:32
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
7
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, благодаря ссылке, размещенной Патриком Мевзеком в комментариях выше, я смог получить документированное объяснение.

Для Ubuntu 20/22 LTS, похоже, используется systemd-resolved для разрешения DNS. И, как говорится на https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html

Синтетические записи

...

Имена хостов «localhost» и «localhost.localdomain», а также любое имя хоста, оканчивающееся на «.localhost» или «.localhost.localdomain», преобразуются в IP-адреса 127.0.0.1 и ::1.

Таким образом, это, кажется, объясняет, что операционные системы Linux с разрешением DNS на основе systemd будут иметь такое поведение, а другие (например, Windows и MacOS) — нет.

(Итак, это все-таки казалось системным вопросом :-)

(Этот вопрос на самом деле является дубликатом https://serverfault.com/questions/1065513/how-does-linux-resolve-wildcard-locahost-subdomains-e-g-ping-test-localhost/1065514#1065514 - просто используя systemd-resolved вместо nss-myhostname , и если кто-нибудь знает, как связать их в обоих направлениях, может помочь другим искать другими словами).

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