Назад | Перейти на главную страницу

Подстановочный знак DNS и проблема /etc/resolv.conf

Я искал через 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 все неизвестное будет разрешено в вашем домене.