Вопрос по networking, dns, linux, operating-system – DNS-кеширование в linux

46

Я запутался в кешировании DNS. Я пишу небольшой прямой прокси-сервер и хочу использовать кэш DNS ОС в системе Linux.

Если я правильно понимаю, то на уровне браузера есть кеширование DNS. Затем происходит кеширование DNS на уровне ОС (в Windows оно есть. Я не уверен, что в дистрибутивах Linux оно есть по умолчанию).

Итак, как браузер / proxy_server использует DNS-кэширование ОС? Я пытаюсь выяснить, могу ли я полагаться на Linux для кеширования DNS вместо того, чтобы делать это самостоятельно в моем прокси.

Спасибо

полагаться на кеширование ОС. Quinn Wilson
Если у вас есть прокси, кеш DNS находится в прокси. Squid, например, имеет собственный DNS-кеш и распознаватель. Diego Woitasen

Ваш Ответ

4   ответа
71

вероятно, в большинстве Unix) нет кэширования DNS на уровне ОС, если толькоNscd установлен и работает. Даже в этом случае функция DNS-кэширования nscd отключена по умолчанию, по крайней мере, в Debian, потому чтоон сломан, Практический результат заключается в том, что ваша Linux-система, скорее всего, не выполняет кэширование DNS на уровне ОС.

Вы могли бы реализовать свой собственный кеш в своем приложении (как они сделали для Squid, согласноdiegowsкомментарий), но я бы рекомендовал против этого. Это большая работа, ее легко понять неправильно (nscd понял неправильно !!!), она, вероятно, не будет настолько легко настраиваемой, как выделенный кэш DNS, и дублирует функциональность, которая уже существует за пределами вашего приложения. ,

Если конечный пользователь, использующий ваше программное обеспечение, должен иметь DNS-кэширование, поскольку нагрузка DNS-запроса достаточно велика, чтобы вызвать проблемы, или RTT на внешний DNS-сервер достаточно велика, чтобы создать проблему, они могут установить DNS-сервер кэширования, напримернесвязанный на той же машине, что и ваше приложение, настроенное на кеширование ответов и пересылку пропусков обычным распознавателям DNS.

@Celada можете ли вы предоставить источник дляOn Linux (and probably most Unix), there is no OS-level DNS caching unless nscd is installed and running.? Я погуглил без удачи ...
Эй спасибо Еще один вопрос. Знаете ли вы, как это работает в браузерах на Windows. Я читал, что Chrome опирается на кэш ОС ОС. Таким образом, это означает, что приложения могут получить доступ к кэш ОС ОС? В общем, каков поток для разрешения DNS (в контексте кэширования.) Браузер проверяет свой собственный кеш, если он поддерживает его. Тогда он спрашивает ОС или читает кэш ОС днс? Если запись не найдена, она выходит на разрешение. agent.smith
Note: в настоящее время наsystemd есть & APOS; sa service to cache DNS, это может быть включено сsystemctl enable systemd-resolved.
Вы можете осмотреться вresolv подкаталог исходного кода glibc, это все там. Я понимаю, что это не конкретный ответ, но все сводится к тому, что там нет кода, который реализует кэш, и в любом случае вы можете увидеть, проследив ли его, что он не использует какой-либо файл или сегмент разделяемой памяти или другое место, где этот кэш потенциально может храниться.
Когда кэш на уровне операционной системы доступен, он автоматически и прозрачно используется всеми приложениями, если только приложение не обходит стандартные API запросов имен (getaddrinfo() и др.) и реализует свои собственные DNS-запросы напрямую. Это безусловно относится к MacOS X и к Linux, если по какой-то причине nscd работает и активен (не может говорить за MS Windows). Если приложение реализует свой собственный кэш, то оно применяется в дополнение к любому кэшу на уровне ОС, который может присутствовать или не присутствовать (опять же, если только приложение не обходит ОС и не запрашивает напрямую).
2

Open your browser Type in about:config in the address bar Right click on the list of Properties and select New > Integer in the Context menu Enter 'network.dnsCacheExpiration' as the preference name and 0 as the integer value

При отключении Firefox будет использовать кэш DNS, предоставляемый ОС.

22

которые можно использовать для кэширования DNS в Linux:

dnsmasq bind

После настройки программного обеспечения для пересылки и кэширования DNS вы затем устанавливаете для DNS-преобразователя системы значение 127.0.0.1 в /etc/resolv.conf.

Если ваша система использует NetworkManager, вы можете попробовать использоватьdns=dnsmasq вариант в/etc/NetworkManager/NetworkManager.conf или вы можете изменить настройки подключения на Автоматически (только адрес), а затем использовать скрипт в/etc/NetworkManager/dispatcher.d каталог, чтобы получить сервер имен DHCP, установите его в качестве сервера пересылки DNS в программном обеспечении кеша DNS, а затем запустите перезагрузку конфигурации.

В настоящее время наsystemd is one more, это может быть включено сsystemctl enable systemd-resolved.
7

Кеширование DNS в Debian используя dnsmasq.

Сводка конфигурации:

/etc/default/dnsmasq
# Ensure you add this line
DNSMASQ_OPTS="-r /etc/resolv.dnsmasq"
/etc/resolv.dnsmasq
# Your preferred servers
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 2001:4860:4860::8888
/etc/resolv.conf
nameserver 127.0.0.1

Затем просто перезапустите dnsmasq.

Тест производительности с использованием DNS 1.1.1.1:

for i in {1..100}; do time dig slashdot.org @1.1.1.1; done 2>&1 | grep ^real | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'

Тест производительности с использованием локального кэшированного DNS:

for i in {1..100}; do time dig slashdot.org; done 2>&1 | grep ^real | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'

Похожие вопросы