在写测试脚本的时候被莫名其妙的故障坑了一手,经 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 [ 链接 ]