Как переопределить конфигурацию DNS по умолчанию в Ubuntu, чтобы nslookup возвращал статические значения?

1

Nslookup, dig и ping возвращают разные значения для меня. Я хочу, чтобы foo.bar.name всегда статически разрешал localhost на моей машине.

Я использовал команду

host foo.bar.name

и отредактировал / etc / hosts, чтобы включить строку

1.1.1.1 foo.bar.name foo

(где 1.1.1.1 IP-адрес моего хост-компьютера)

Когда я запускаю ping или curl, он ведет себя так, как я хочу.

Но когда я запускаю dig или nslookup, адрес foo.bar.name разрешается совершенно иначе.

Я что-то пропустил?

Какие конфигурации мне нужно изменить, чтобы убедиться, что на этом конкретном хосте разрешение DNS происходит так, как я сказал.

fossy
источник

Ответы:

2

Какие конфигурации мне нужно изменить, чтобы убедиться, что на этом конкретном хосте разрешение DNS происходит так, как я сказал.

Вы можете настроить облегченный сервер пересылки DNS, например, unboundгде вы можете переопределить любые записи DNS.

Используя ваш пример, он будет выглядеть в unboundконфиге так:

local-zone: "foo.bar.name" redirect
local-data: "foo.bar.name A 1.1.1.1"

Если вы хотите переопределить внешний DNS, вы можете использовать:

local-data: "www.google.com.  1800  IN  A    172.16.34.12"
local-data: 'www.google.com.  7200  IN  TXT "My own TXT record for text"'
local-data-ptr: "172.16.34.12        www.google.com"

Когда вы закончите настройку его, проверить его dig @127.0.0.1 foo.bar.name a
Если ваш новый распознаватель работает Ok, а затем установить его в качестве системы ширины изменения nameserverлинии в /etc/resolf.confкnameserver 127.0.0.1

PS

Некоторые из базовых дистрибутивов Debian устанавливаются dnsmasqв качестве DNS-кэша. Если вы будете использовать, unboundто выключитеdnsmasq

Alex
источник
dnsmasq имеет аналогичную конфигурацию и даже загружается /etc/hostsпо умолчанию (если дистрибутив не отключил ее).
Гравитация
1

ping, curlИ все другие приложения на самом деле не использовать DNS непосредственно - они используют функцию ОС , предоставляемые «gethostbyname», который затем вызывает несколько провайдеров. Один из них - «днс» (который говорит с DNS-серверами), другой - «файлы» (то есть /etc/hosts); могут быть дополнительные провайдеры, которые говорят по другим протоколам. Они все настроены через /etc/nsswitch.conf.

Между тем dig, hostи nslookup, по сути, являются клиентами DNS - они обходят функции «gethostbyname» ОС и вместо этого напрямую обрабатывают и отправляют пакеты DNS. (Они были специально написаны таким образом.) В результате они также пропускают /etc/hostsи любые другие механизмы разрешения имен, и вы ничего не можете настроить, чтобы «исправить» это.

(Сама ОС не собирается проверять каждый пакет UDP, чтобы проверить, является ли он DNS, и также не собирается вставлять поддельный ответ DNS из / etc / hosts только потому, что.)

Единственный способ сделать dig& c. Честь / etc / hosts состоит в том, чтобы установить фактический DNS-сервер для приложения, с которым можно разговаривать, что обеспечит требуемые статические ответы. Например, dnsmasq будет действовать как кэш / прокси DNS и по умолчанию загружает статические данные из / etc / hosts. В качестве альтернативы, Unbound имеет расширенную конфигурацию «локальных данных», хотя он не может напрямую читать / etc / hosts.

После настройки dnsmasq или Unbound укажите /etc/resolv.conf127.0.0.1 (или любой другой хост, на котором работает dnsmasq).

grawity
источник
0

Система проверяет по умолчанию в / etc / hosts и затем использует сервер имен. и то, что ты сделал, прекрасно. это просто , что некоторые программы предназначены , чтобы поговорить с серверами имен напрямую, то есть host, nslookupи dig. Вот почему у вас разные результаты.

РСМ
источник