age*_*ith 52 linux dns networking operating-system
我对DNS缓存感到困惑.我正在编写一个小型转发代理服务器,并希望在Linux系统上使用OS DNS缓存.
如果我理解正确,那么在浏览器级别就有DNS缓存.然后在操作系统级别有DNS缓存(Windows有它.我不确定Linux发行版是否默认拥有它).
那么,browser/proxy_server如何使用OS DNS缓存?我试图找到我是否可以依靠Linux进行DNS缓存,而不是在我的代理中自己做.
谢谢
Cel*_*ada 77
在Linux(可能是大多数Unix)上,除非安装并运行nscd,否则没有操作系统级别的DNS缓存.即使这样,nscd的DNS缓存功能默认至少在Debian中被禁用,因为它已经坏了.实际结果是你的linux系统很可能不会进行任何操作系统级别的DNS缓存.
你可以在你的应用程序中实现自己的缓存(就像他们为鱿鱼所做的那样,根据diegows的评论),但我建议反对它.这是很多工作,很容易弄错(nscd错了!!!),它可能不像专用的DNS缓存那么容易调整,它复制了应用程序之外已经存在的功能.
如果使用您的软件的最终用户需要进行DNS缓存,因为DNS查询负载足够大,或者外部DNS服务器的RTT足够长而成为问题,他们可以安装缓存DNS服务器,例如Unbound与您的应用程序在同一台计算机上,配置为缓存响应并将未命中转发到常规DNS解析器.
Zan*_*ynx 22
以下是另外两个可用于Linux上的DNS缓存的软件包:
配置软件进行DNS转发和缓存后,在/etc/resolv.conf中将系统的DNS解析器设置为127.0.0.1.
如果您的系统正在使用NetworkManager,您可以尝试使用该dns=dnsmasq
选项,/etc/NetworkManager/NetworkManager.conf
或者您可以将连接设置更改为自动(仅限地址),然后使用/etc/NetworkManager/dispatcher.d
目录中的脚本获取DHCP名称服务器,将其设置为您的DNS转发服务器DNS缓存软件然后触发配置重新加载.
Tk4*_*421 10
您可以使用dnsmasq 在Debian中获得DNS缓存的示例.
配置摘要:
# Ensure you add this line
DNSMASQ_OPTS="-r /etc/resolv.dnsmasq"
Run Code Online (Sandbox Code Playgroud)
# Your preferred servers
nameserver 1.1.1.1
nameserver 8.8.8.8
nameserver 2001:4860:4860::8888
Run Code Online (Sandbox Code Playgroud)
nameserver 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
然后重新启动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}'
Run Code Online (Sandbox Code Playgroud)
使用本地缓存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}'
Run Code Online (Sandbox Code Playgroud)