Как запустить локальный кэширующий DNS-резолвер в Ubuntu 14.04?

Как запустить локальный кэширующий DNS-резолвер в Ubuntu 14.04?

Я запускаю экземпляры Ubuntu 14.04 на AWS EC2 в VPC. Они используют сервер имен, предоставленный нашим VPC. Каждый поиск DNS процессом отправляется на сервер имен VPC. Наши процессы выполняют много поисков, и некоторые из них завершаются неудачей, что приводит к блокировке процессов.

Я хочу исправить это, установив локальный кэширующий DNS-резолвер на каждой машине. Этот резолвер будет слушать на 127.0.0.1:53, обслуживая локальные процессы. Резолвер будет указан в , т.е. вместо сервера имен VPC /etc/resolv.confя буду использовать динамически предоставляемый через DHCP.nameserver 127.0.0.1

Для этого есть много альтернативных программ: bind9, nscd, dnsmasq, dnscache, и т. д. Но, похоже, есть много способов ручного управления /etc/resolv.conf, например, пометить файл как доступный только для чтения, или редактировать /etc/network/interfaces, или редактировать /etc/dhcp/dhclient.conf. Что рекомендуется?

У меня есть еще одно требование: локальный резолвер будет пересылать запросы на сервер имен VPC, наш доверенный орган для информации DNS. Однако перечисленные мной программы, похоже, ведут себя не так. Вместо этого они пересылают свои запросы на предварительно настроенные корневые серверы имен.

Теоретически, я мог бы заставить это работать, настроив dhclient-script, resolvconfили что-то в этом роде. Я бы добавил хук, который берет предоставленный DHCP IP сервера имен, внедряет его в конфигурацию моего локального DNS-резолвера, а затем перезапускает демон локального DNS-резолвера. Но это довольно сложно, и я хочу этого избежать. (Скрипты по умолчанию в Ubuntu 14.04, похоже, имеют некоторые встроенные знания и nscd, dnscacheи, возможно, делают то, что я хочу, но это очень неясно.)

Какой "благословенный" способ запустить локальный кэширующий DNS-резолвер на Ubuntu 14.04? В частности, как мне заставить локальный резолвер перенаправлять на DHCP-сервер имен по умолчанию?

решение1

Самый простой способ, наверное, нсд.

Установите nscd, используя конфигурацию по умолчанию.

Обновите /etc/nsswitch.conf и добавьте cacheперед dnsстрокой hosts.(Изменение: эта часть неприменима к glibc, используемой в большинстве дистрибутивов Linux, но необходима для fbsd)

hosts: files cache dns

Тест

tcpdump -v -n 'port 53'
getent hosts superuser.com

Вам не придется искажать /etc/resolve.conf или даже захватывать распознаватель DHCP для обновления upstream nscd. nsswitch будет правильно направлять вызовы gethost* через сервер кэширования, поскольку он является частью glibc.

Связанный контент