Я искал через google.com, но не нашел ответа ... Поэтому я спросил здесь.
Это проблема:
Я создаю тестовую среду DNS на своем ПК с именем хоста gamepc
.
DNS-сервер (bind9) имеет запись с подстановочными знаками:
* IN A 192.168.0.1
А в файле /etc/resolv.conf есть запись:
domain bogus.
nameserver 127.0.0.1
Итак, когда я пингую somehost
он вернется как:
PING somehost.bogus (192.168.0.1) 56(84) bytes of data.
64 bytes from gamepc.bogus (192.168.0.1): icmp_req=1 ttl=64 time=0.042 ms
...
И когда я пингую google.com
он вернется как:
PING google.com (74.125.71.99) 56(84) bytes of data.
64 bytes from hx-in-f99.1e100.net (74.125.71.99): icmp_req=1 ttl=51 time=68.0 ms
...
Пока все хорошо. Но если я пингую какой-то несуществующий домен, например sldfjsldjflksdjf.com
он все равно вернется как:
PING sldfjsldjflksdjf.com.bogus (192.168.0.1) 56(84) bytes of data.
64 bytes from gamepc.bogus (192.168.0.1): icmp_req=1 ttl=64 time=0.043 ms
...
И ожидаемый результат должен быть:
ping: unknown host sldfjslkdfjlksdjfklsdjf.com
Я могу подумать, как это случилось. Сначала решатель попробуй sldfjslkdfjlksdjfklsdjf.com
но получить NXDOMAIN
ответ. Затем добавьте часть домена и попробуйте sldfjslkdfjlksdjfklsdjf.com.bogus
очередной раз. На этот раз имя хоста соответствует записи с подстановочным знаком на DNS-сервере и возвращает 192.168.0.1
...
У кого-нибудь есть такая же проблема? И как вы это решили?
Большое спасибо за чтение!
Из man resolv.conf
:
domain Local domain name.
Most queries for names within this domain can use short names relative
to the local domain. If no domain entry is present, the domain is
determined from the local hostname returned by gethostname(2); the domain
part is taken to be everything after the first '.'. Finally, if the
hostname does not contain a domain part, the root domain is assumed.
search Search list for host-name lookup.
The search list is normally determined from the local domain name;
by default, it contains only the local domain name. (...)
Итак, если вы запросите sldfjslkdfjlksdjfklsdjf
затем bind не находит подходящей записи, поэтому ваш преобразователь пытается sldfjslkdfjlksdjfklsdjf.bogus
, который, в свою очередь, возвращает адрес.
Если вы пингуете sldfjslkdfjlksdjfklsdjf.
(обратите внимание на конечную точку) все должно быть в порядке (т.е. поиск завершится ошибкой). Завершающая точка означает, что вы указали полное доменное имя хоста, поэтому суффиксы домена пробовать не следует.
У кого-нибудь есть такая же проблема?
У всех есть проблема. Это стандартная часть большинства клиентских библиотек DNS. Его по-разному называют путь поиска домена или Путь поиска DNS или Передача DNS.
И как вы это решили?
Используя полные доменные имена где я их желаю. Ты не с использованием полных доменных имен.
браузер не использует полное доменное имя для разрешения имени домена хоста
Это ваше первое упоминание о браузере WWW. Вы не упомянули об этом в вопросе. WWW-браузеры - это странность, не в последнюю очередь потому, что у них есть два, а иногда и больше, путей поиска доменов, работающих один над другим. люди делать используйте полностью определенные доменные имена в URL-адресах именно по этой причине. Если вы собираетесь настроить клиентскую библиотеку DNS таким образом, чтобы ее механизм пути поиска успешно сопоставлял имена с подобными адресами, вам также придется это сделать. Это следствие вашего выбора пути поиска и подстановочного знака, который соответствует всему во всем поддереве. Нужно считать об использовании подстановочных знаков.
Я не думаю, что вы действительно сможете решить проблему из-за того, что у вас есть подстановочный знак в вашей конфигурации DNS.
Если не использовать подстановочный знак, u получит сообщение об ошибке, но с подстановочным знаком и параметрами resolv.conf все неизвестное будет разрешено в вашем домене.