1

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

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

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

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

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

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

1 ответ1

1

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

Установите 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 resolver для обновления восходящего потока nscd. nsswitch будет правильно маршрутизировать вызовы gethost * через сервер кеша, поскольку он является частью glibc.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .