在数字化时代,域名解析是每一个网络应用的基础。当你尝试访问一个网站时,你的设备会向DNS服务器发送请求,DNS服务器则会返回对应的IP地址。这个过程看似简单,但其中却隐藏着许多不为人知的秘密。今天,就让我们一起揭开CoreDNS缓存与EDNS的神秘面纱,解决你在容器中无法访问公司域名的问题。
问题背景
业务反馈显示,在容器中无法访问公司域名。这可能是由于多种原因造成的,比如DNS解析失败、网络链路问题等。为了找出问题的根源,我们首先进行了排查。
排查过程
在主机中,使用dig
命令解析域名失败,但nslookup
命令却能正常解析。这让我们产生了疑问:是不是dig
与nslookup
在某些参数上有所不同,导致在服务器上被拦截?
于是,我们在云上部署了一个CoreDNS服务,并通过15353端口暴露服务。然后,从服务器上分别使用dig
和nslookup
进行解析,分析中间链路是否有问题。结果发现,通过15353端口,在服务器上,两种方式都可以正常解析!
问题确认
非53端口没有影响,说明问题并不在于端口本身。通过tcpdump
在云上抓包后分析,发现dig
比nslookup
的包多了EDNS OPT。这让我们确认了问题的存在:在服务器上,53端口加上EDNS的DNS包会被拦截。
接下来,进一步到容器中排查,发现nslookup
也会解析失败。于是,我们在主机上访问CoreDNS,此时的网络链路是:主机 -> CoreDNS -> 公网DNS服务器。即:经过CoreDNS的流量带上了EDNS参数。
问题根源
原来,问题的根源在于CoreDNS中的缓存插件。在查看CoreDNS配置、源码(版本: 1.8)时,发现缓存插件中设置payload为2048。因为CoreDNS开启了cache,从而导致集群向公网发出的DNS流量都带上了EDNS。
解决方案
由于我们无法配置更改服务器网络,可以采取以下措施:
在v1.8.3版本,关闭cache。
升级CoreDNS版本,在其他版本,比如v1.11.1,cache plugin已经迁移了EDNS的代码,可以调整到其他插件(rewrite)。
总结
通过这次排查,我们不仅解决了无法访问公司域名的问题,还深入了解了CoreDNS的工作原理以及EDNS的作用。希望这篇文章能对大家有所帮助,让你在遇到类似问题时能够更加从容应对。
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。
Copyright 2005-2024 yuanmayuan.com 【源码园】 版权所有 备案信息
声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告