目录
EDNS
一、前言
1、EDNS的作用
edns-client-subnet是一种扩展DNS(DNS Extensions,简称EDNS)的选项,它允许DNS服务器了解查询的客户端的IP地址范围,以便提供更快和更准确的响应。EDNS客户端子网选项通常可以被用于两种情况:
- 帮助DNS服务器提供对特定地理区域更准确的解析
当客户端需要域名解析时,通常是向本地递归服务器或是配置的递归服务器去查询,递归服务器再去向权威DNS服务器发送查询请求时,权威DNS服务器只能递归服务器的IP地址,而没法准确的知道客户端所在的网络。因此,如果客户端使用CDN(内容分发网络)或者在某个大型网络的背后,那么请求将被发送到距离递归服务器最近的节点,而不是最接近用户的节点。这样会导致一些响应时间的延迟,用户可能会不满意。为了解决这个问题,EDNS(扩展DNS)引入了edns-client-subnet选项。
2、举例描述EDNS的使用场景
简单举一个例子,比如一个客户端在中国,配置了位于欧洲的递归服务器,它查询了位于欧洲的权威dns服务器,权威dns服务器根据递归服务器的地理位置,将返回一个同位于欧洲的最近的IP地址,这时如果位于中国的客户端去访问这个欧洲的ip,势必会有一定的网络延迟,从而影响了用户的体验。但是,如果该客户端使用了edns-client-subnet选项,将自己的客户端ip携带到dns请求包中,则权威DNS服务器就会知道该客户端位于中国区域,因此它将返回一个离客户端地址最近的位于中国数据中心的CDN地址,这样就可以尽可能的减少网络传输上带来的延迟,提高用户的体验。
二、DNS服务器部署EDNS
1、配置 BIND 支持 EDNS
BIND 是最常用的 DNS 服务器之一,它默认就支持 EDNS。但是,为了确保您的 BIND 服务器配置正确地启用了 EDNS,可以按照以下步骤操作:
-
确认 BIND 版本 确保您的 BIND 版本支持 EDNS。BIND 9.2 及以上版本默认支持 EDNS。
-
检查配置文件 打开 BIND 的主配置文件
named.conf
,通常位于/etc/bind/
目录下。 -
启用 EDNS 在
options
块中,确保启用了 EDNS 支持。以下是一个示例配置:options { directory "/var/cache/bind"; // 启用 EDNS0 edns 0; edns-buffer-size 1232; // 其他配置项... };
edns 0;
表示启用 EDNS0。edns-buffer-size 1232;
设置最大 UDP 数据包大小为 1232 字节。这个值应该略小于 1500 字节(以太网 MTU)以适应大多数网络环境。
-
启用 DNSSEC 如果您计划使用 DNSSEC,也需要在配置文件中启用它。以下是一个示例配置:
options { // ... dnssec-validation yes; // ... };
-
测试配置 使用命令
named-checkconf
来检查配置文件是否有语法错误。 -
重启服务 保存更改并重启 BIND 服务以使配置生效。在大多数 Linux 发行版中,可以使用以下命令重启服务:
sudo systemctl restart named
2、注意事项
- 确保防火墙规则允许 UDP 端口 53 的通信,因为 DNS 默认使用 UDP 进行传输。
- 如果您的 DNS 区域文件很大,可能需要增加
edns-buffer-size
的值以适应更大的响应。 - 如果您还配置了 DNSSEC,确保您的 DNS 区域已经正确签名。
3、示例架构图
以下是一个简化的架构图,展示了使用 BIND 作为 DNS 服务器并支持 EDNS 的典型设置:
1+------------+ +----------------+ +-------------------+
2| 客户端 | ---> | BIND DNS Server | --> | Internet |
3+------------+ +----------------+ +-------------------+
4 | | | | |
5 | | | | |
6 | | | | |
7 | | | | |
8 | | | | |
9 | | | | |
10 | | | | |
11 | | | | |
12 | | | | |
13 | | | | |
14 | | | | |
15 | +----------------+ +-------------------+
在这个架构中,客户端发送 DNS 请求给 BIND 服务器,BIND 服务器处理请求并返回响应,如果需要的话,它还会利用 EDNS 支持来处理更大的数据包。
三、客户端封装ECS
使用dig工具插入 ECS 字段
1、dig介绍
dig
是一个非常有用的 DNS 查询工具,可以用来测试 DNS 服务器的功能,包括 EDNS 支持。
2、dig命令插入ECS字段
使用 dig
的 +edns
参数来启用 EDNS 支持,并使用 +bufsize
参数来指定缓冲区大小。例如,要查询一个域名并启用 EDNS 支持,可以使用以下命令
dig example.com @your-dns-server +subnet=X.X.X.X
这里 example.com
是要查询的域名,@your-dns-server
是您的 DNS 服务器的 IP 地址。+subnet=插入的源地址
。
3、查看发出EDNS 信息
在 dig
的输出中,查找 EDNS: version: 0
和 EDNS: flags:
部分,以确认 EDNS 是否被启用。
例如,成功的输出可能类似于这样:
这里的关键部分是 EDNS: version: 0, flags:; udp: 4096
,表明 EDNS 已经被启用并且设置了 UDP 缓冲区大小。
四、DNS服务器抓包分析ECS
到这里说明ECS功能已经开启成功!!!