🔥 EDNS简述与利用

  • A+
所属分类:linux学习 moeCTF笔记

EDNS的由来

1、什么是EDNS?

    EDNS就是在遵循已有的DNS消息格式的基础上增加一些字段,来支持更多的DNS请求业务。

需要注意的是,像DNS服务器这样一个大型且广泛应用的系统软件,新增加扩展协议的时候一定要考虑到向后兼容性(backward compatibility),即你增加了你这个特性的消息传输给未支持该特性的服务器时,后者依然能正确处理。

2、为什么要有 EDNS?

    RFC2671中指出EDNS被提出来的几个理由:

        1)DNS协议头部的第二个16字节中都已经被用的差不多了,需要添加新的返回类型(RCODE)和标记(FLAGS)来支持其他需求;

        2)只为标示domain类型的标签分配了两位,现在已经用掉了两位(00标示字符串类型,11表示压缩类型),后面如果有更多的标签类型则无法支持;

        3)当初DNS协议中设计的用UDP包传输时包大小限制为512字节,现在很多主机已经具备重组大数据包的能力,所以要有一种机制来允许DNS请求方通知DNS服务器让其返回大包;

        以后我们会看到,DNSSEC机制和edns-client-subnet机制等都需要有EDNS的支持。

3、EDNS 的内容是什么?

        怎样在DNS消息协议的基础上再增加一些字段呢?为了保持向后兼容性,更改已有的DNS协议格式是不可能的,所以只能在DNS协议的数据部分中做文章。

        所以,EDNS中引入了一种新的伪资源记录OPT(Resource Record),之所以叫做伪资源记录是因为它不包含任何DNS数据,OPT RR不能被cache、不能被转发、不能被存储在zone文件中。OPT被放在DNS通信双方(requestor和responsor)DNS消息的Additional data区域中。


EDNS特性的运用

1.EDNS与普通DNS的区别

总所周知,现在有数量庞大的服务器部署着DNS负载均衡(GSLB),这种负载均衡是根据LocalDNS的位置分配最佳区位的IP地址以提升用户访问体验。但是存在一个问题,如果用户的DNS与实际IP不在一个区位,很可能分配不合适的IP导致访问体验下降。而EDNS有一种特殊的功能,可以指定ClientIP的值便于GSLB判断用户真实区位(注意,不同于修改UDP包,这种方式不会修改向DNS服务器发送UDP时的SrcIP)。

2.linux安装带有 edns-client-subnet 功能的DIG

linux默认的dig没有该功能需要另行安装,网络上的安装方法较为复杂,此处搬运一种最简单的方法:

下载解压BIND

wget ftp://ftp.isc.org/isc/bind9/9.9.3/bind-9.9.3.tar.gz
tar xf bind-9.9.3.tar.gz
cd bind-9.9.3

下载补丁

这个patch貌似只有9.3.3版本

wget http://wilmer.gaa.st/edns-client-subnet/bind-9.9.3-dig-edns-client-subnet-iana.diff

给代码打补丁

patch -p0 < bind-9.9.3-dig-edns-client-subnet-iana.diff

编译

./configure --without-openssl
make

--without-openssl是因为我们只需要dig,不需要其他东西。但是这样会失去DNSSEC支持。
建议还是完整configure。
make之后不要make install,这样会把bind完整安装了。直接在bin文件里找出dig的二进制文件使用。

测试

把编译好的dig文件放到/usr/bin文件夹

dig @ns1.google.com www.google.es +client=157.88.0.0/16

查看CLIENT-SUBNET行是否有回应。
并不是所有DNS都支持此功能,而且udp模式支持,tcp模式可能不支持。使用前必须进行测试。

或者直接使用google的服务

https://dns.google.com 支持EDNS功能

eqqie

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:1   其中:访客  0   博主  0   引用   1

    来自外部的引用: 1

    • 对DNS的进一步认识 – Hed9eh0g's home