BIND9 中的 DNSCookies

在写测试脚本的时候被莫名其妙的故障坑了一手,经 sukka 介绍时因为 DNS Cookies 的问题。


1、什么是 DNS Cookies

DNS Cookies 是一种轻量级的 DNS 交易安全机制,为 DNS 服务器和客户端提供有限的保护,用以防止 越来越常见的 各种拒绝服务攻击、放大攻击、以及缓存中毒攻击。

DNS Cookies 可以容忍 NAT,NAT-PT 和任意播,并且可以作为增量部署。(由于 DNS Cookies 只返回到最初接收到请求的 IP 地址,因此不能用于跟踪互联网用户。)

DNS Cookies 是扩展 DNS(EDNS)选项,当客户端和服务器都支持时,它允许客户端检测和忽略路径外欺骗响应,并由服务器确定客户端的地址未被欺骗。


2、为什么会对我产生影响

在 BIND 9.10.3 及更高版本中,它作为实验性编译时选项受支持,名称为 Server Identity Tokens(SIT),但默认情况下在 BIND 9.11.0 中启用。

  • 要在 BIND 9.10 分支中使用它,请使用 “configure –enable-sit” 构建 BIND 。
  • 对于 BIND 9.10.3 及更高版本的 Windows 构建,默认情况下启用此功能。
  • 从 BIND 9.11.0 开始的所有版本中都启用了此功能。

3、解决方案

在 BIND 9.11 版本后,你需要为 dig 命令额外添加 +nocookie 参数,即可回复到以往的方式使用。

截至当前时间 2019 年 12 月 16 日 ,支持 DNSCookie 的情况如下

  • 119.29.29.29 不支持
  • 114.114.114.114 支持
  • 223.5.5.5 支持
  • 180.76.76.76 支持
  • 1.2.4.8 支持
  • 9.9.9.9 不支持
  • 208.67.222.222 支持
  • 8.8.8.8 支持(似乎被污染时不支持)
  • 1.1.1.1 支持(似乎被污染时不支持)

4、参考文章

BIND 9 中的 DNS Cookies [ 链接 ]

Domain Name System (DNS) Cookies [ 链接 ]

点赞