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

823
fossy

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 происходит так, как я сказал.

0

3 ответа на вопрос

2
Alex

What configurations do I need to modify to make sure that on that particular host DNS resolution happens the way I've stated.

You can setup lightweight DNS forwarder such as unbound where you can override any DNS records.

Using your example it would looks in unbound config like:

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

If you want to override external DNS you may use:

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"

When you finish setting it up, test it with dig @127.0.0.1 foo.bar.name a
If your new resolver works Ok, then set it as a system wide by changing nameserver line in the /etc/resolf.conf to nameserver 127.0.0.1

P.S.

Some of debian base distros installs dnsmasq as a DNS cacher. If you will use unbound then turn off dnsmasq

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

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).

0
rsm

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