当我运行dig example.com ,响应返回SERVER: 192.168.0.1 ,即使在后续运行。 这意味着DIG始终在进行networking调用来parsingDNSlogging。
我(而不是无知)认为我的操作系统将根据其TTLcachingDNSlogging,并且DIG将使用该caching。
DIG是否忽略TTL /默认不使用caching? 如果是这样,我怎样才能让DIG使用caching和荣誉TTLs?
背景/ XY问题:
我想要一种快速解决我正在编写的nginx脚本的DNS TXTlogging的方法。 该脚本将根据这些TXTlogging的内容来路由请求,所以我希望使用哪种方法来实现TTL,并在适当情况下使用本地cachinglogging。
dig (domain information groper)是一个查询DNS名称服务器的灵活工具,它不查询或使用你本地的DNScaching(和/或hosts文件),而是直接查询你指向的名字服务器。 默认情况下,这将是/etc/resolv.conf 。
要从命令行使用您的系统DNScaching,请使用getent hosts [ip-address | hostname] getent hosts [ip-address | hostname]或在脚本/代码中使用man 3 gethostbyname系统调用的本地版本。
诚然,这不会帮助你超越AAAA或PTRlogging。
在dig输出SERVER标签是名称服务器 dig用的IP地址,这将永远不会有一个TTL …
dig ANY www.google.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6 <<>> www.google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27695 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 173 IN A 216.58.212.132 ;; AUTHORITY SECTION: google.com. 146915 IN NS ns2.google.com. google.com. 146915 IN NS ns3.google.com. google.com. 146915 IN NS ns1.google.com. google.com. 146915 IN NS ns4.google.com. ;; ADDITIONAL SECTION: ns2.google.com. 145115 IN A 216.239.34.10 ns1.google.com. 145115 IN A 216.239.32.10 ns3.google.com. 145115 IN A 216.239.36.10 ns4.google.com. 145115 IN A 216.239.38.10 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) <========== My Name SERVER is localhost ;; WHEN: Tue Aug 30 22:51:26 2016 ;; MSG SIZE rcvd: 184
我在本地运行自己的cachingDNS服务器,而不是使用ISP或Google的公共parsing器(8.8.8.8),主要用于spamassassin,它具有本地优势,但caching不会被其他用户预先填充/填充。
这真的是一个操作系统parsing器问题,但你没有指定操作系统。 由于提到了dig ,我将假设我们正在这里尝试一些UNIX的风格。
基于UNIX的操作系统在内核本身中不实现DNScaching。 在讨论如何实施之前,有几个主题需要总结。
对parsing器库的调用通常使用名称服务开关(NSS)来实现他们的查找,NSS是一个用于指定要使用的数据源的模块化系统,以及它们的查找顺序。 您可以在/etc/nsswitch.conffind这些模块堆栈的列表。 作为参考,我们在这里关心的是hosts 。
除非你真的知道你在做什么,否则不build议使用/etc/nsswitch.conf的hosts条目。 对这些模块进行重新sorting可能会导致在/etc/hosts文件之前查询DNS /etc/hosts时髦的东西!
在查阅模块栈之前,NSS检查是否存在正在运行的nscd套接字并尝试查询它。 如果将nscdconfiguration为维护有问题的NSS数据库的caching,则可能会返回由nscdcaching的条目,而不会查询NSS模块。 我知道的大多数Linux发行版默认情况下都不启用hosts数据库的caching,而必须自定义/etc/nscd.conf 。
也就是说,应该指出的是,许多pipe理员认为“股票” nscd守护进程是不可靠的,至less在Linux下。 那里至less有一个替代实施。 你的旅费可能会改变。
了解以上内容,主机数据库的查找顺序按以下顺序工作:
nscd (如果正在运行,其套接字存在,并且主机的caching被启用) /etc/nsswitch.conf列出的顺序 这就把我们带到了这个等式的地方。 你几乎可以参考HBrujin的全部答案( dig不使用NSS,只能通过TCP / IP进行通信),但是可以避免的是,除非1) nscd正在运行,否则NSS根本就没有caching,2)它是configuration为cachinghosts数据库。
让DNScaching在NSS内很好地发挥作用的复杂性通常是为什么大多数pipe理员使用运行他们自己的recursionDNS服务器的“更简单”的解决scheme。 你不需要知道关于NSS的一件事情。 只需将/etc/resolv.conf指向您的shiny的新DNScaching,并让它隐藏NSS的恶意。 (至less在您需要了解LDAP集成的工作原理之前)