В Linux, как /etc/hosts
и DNS работают вместе, чтобы преобразовать имена хостов в IP-адреса?
- если имя хоста может быть разрешено в
/etc/hosts
, применяется ли DNS после этого/etc/hosts
для разрешения имени хоста или обрабатывать разрешенный IP-адрес/etc/hosts
как «имя хоста» для рекурсивного разрешения? В моем браузере (Firefox и Google Chrome), когда я добавляю в
/etc/hosts
:127.0.0.1 google.com www.google.com
введя www.google.com в адресную строку браузера и нажав клавишу ввода, вы не подключитесь к сайту. После удаления этой строки
/etc/hosts
я могу подключиться к веб-сайту. Означает ли это, что/etc/hosts
переопределяет DNS для разрешения имен хостов?После повторного добавления строки
/etc/hosts
я могу подключиться к веб-сайту, даже после обновления веб-страницы. Почему/etc/hosts
снова не подать заявку, чтобы я не смог подключиться к сайту?
Спасибо.
/etc/hosts
и локально определенные серверы имен. Довольно странно наблюдать за первым разом. (Глядя на вас, браузеры на основе Chromium!)/etc/hosts
и системные DNS-серверы: ( github.com/Eloston/ungoogled-chromium ). Установка на MacOS с Homebrew:brew cask install eloston-chromium
.Ответы:
Это продиктовано конфигурацией NSS (Name Service Switch), то
/etc/nsswitch.conf
естьhosts
директивой файла . Например, в моей системе:Здесь
files
относится к/etc/hosts
файлу иdns
относится к системе DNS. И, как вы можете себе представить, что будет первым, кто победит .Кроме того, посмотрите,
man 5 nsswitch.conf
чтобы получить больше идей по этому вопросу.Как и в сторону, чтобы следовать упорядоченности разрешения НСС хоста, использование
getent
с ,hosts
как , например , базы данных:источник
systemd.resolver
влияет на разрешение? Где NIS и LDAP вписываются в систему разрешения? Какой порядок следует за системой MacOS или системой Windows?Чтобы ответить только на ваш последний вопрос:
/etc/hosts
не применяется снова сразу, потому чтоfirefox
кэширует последнее имя хоста, за которое он получилgoogle.com
; если вы хотите, чтобы он всегда получал его снова, вам нужно установитьnetwork.dnsCacheExpiration
значение0
inabout:config
. Больше информации (хотя и немного устаревшей) здесь . Извините, если это оффтоп.Как примечание, многие программы не используют стандартный преобразователь (
getaddrinfo(3)
,getnameinfo(3)
[1]), потому что это отстой .Во-первых, интерфейс не асинхронный; любая умеренно сложная программа должна будет порождать отдельный поток, выполняющий только то,
getaddrinfo()
и затем изобретать свой собственный протокол для связи с ним (и даже не будем входить в негоgetaddrinfo_a()
, который отправляет сигнал по завершении, так что это еще хуже).Во-вторых, реализация распознавателя в
glibc
(стандартной C-библиотеке в linux) ужасна, ожидая, что вы позволите ей перетаскивать случайные динамические объекты в адресное пространствоdlopen()
за вашей спиной, и сделав невозможным ее сдерживание или использование в статических целях. связанные исполняемые файлы.Поскольку многие программы не используют стандартный распознаватель непосредственно, они не удосужились воспроизвести ее поведение в точности, и игнорировать некоторые или все
/etc/resolv.conf
,/etc/hosts
,/etc/nsswitch.conf
или/etc/gai.conf
.[1], и даже не упоминайте не входящего, ipv4-only
gethostbyname()
, который устарел с давних пор.источник
google = GHBN("google.com"); facebook = GHBN("facebook.com")
вы можете в конечном итогеgoogle
иfacebook
с адресомfacebook.com
. Когда два вызова выполняются в разных потоках, это даже смешнее: вы можете закончить адресом, который наполовину гугл, наполовину фейсбук или полный мусор.gethostbyname()
сейчас?getaddrinfo
это стандартная функция для этого, но она сама по себе brokrn, как я уже объяснил, поэтому она не используется как браузеры или другие реальные приложения.Файл
/etc/hosts
и DNS не работают вместе. Они обеспечивают независимые разрешения имен (сетевых имен).Клей, который связывает их, находится внутри
/etc/nsswitch.conf
для систем Linux . В случае/etc/netsvc.conf
серверов AIX, в системе для Windows и может быть указан сlookupd -configuration
(поиск LookupOrder, аналогично:)Cache FF DNS NI DS
в системах MacOS.Фактический порядок становится сложным и, как правило, запутанным, поскольку каждая служба разрешения имен может (и часто это делает) заглядывать внутрь других уровней разрешения. Как
dnsmasq
(легкий DNS-сервер обычно на127.0.0.1:53
или::1:53
(или оба)) обычно читает и включает/etc/hosts
содержимое файла. Или, какsystemd.resolver
(базовый распознаватель, который должен разрешать только имена без точек, например ), при некоторых условияхmycomputer
напрямую вызывает разрешение DNS для точечных имен (mycomputer.here.dev.
).В общем, сервисы вызываются по порядку, и первый, который не отказывает, выигрывает и принимается как правильный адрес. Общий основной порядок:
/etc/hosts
(файл), mDNS (без точечных имен), DNS, NIS, NIS +, LDAP. В некоторых системах Linux есть последнее решение для компьютераhostname
в службеmyhostname
Например, в этой системе (из
cat /etc/nsswitch
):Обратите внимание, что очень старая (glibc 2.4 и более ранняя)
order
запись установлена/etc/host.conf
как:Применяются только к файлам (файлам
/etc/hosts
) службы имен.Эффекты на этом (linux) клиентском компьютере, связанные с NIS и LDAP (обычно), контролируются используемым DNS-сервером (привязка, освобождение и т. Д.).
так:
Никто.
Если имя хоста может быть разрешено
/etc/hosts
,DNS
оно не применяется (если файлы до DNS).ни является разрешенным IP - адрес рассматривается как «имя хост».
Это просто есть: разрешенный адрес.
браузер
Браузер может использовать любой метод для разрешения имени (после того, как он проверил свой кеш разрешенных имен). Только если он использует метод, предоставленный системой, применяется порядок, указанный выше. Браузер, как и любая другая программа, может напрямую связываться с любым DNS-сервером.
Если системный порядок имеет
/etc/hosts
ранееDNS
, это означает, что запись в этом файле будет иметь приоритет дляDNS
службы разрешения.Так:
Да (если браузер использует предоставленное системой разрешение).
Только до тех пор, пока внутренний кеш браузера не будет очищен (или истечет время ожидания) для этого конкретного имени, это имя будет снова найдено за пределами браузера.
Если у браузера есть имя, разрешенное в его кэше, браузер использует его снова.
Используйте это, чтобы очистить кеш .
Или просто закройте (подождите немного) и перезапустите браузер.
источник