近期因项目需要,服务器侧需要收敛53端口,不给客户端提供53端口进行DNS解析,所以需要本地进行特定域名解析,DNS解析的最终目标就是将虚拟域名转换为网关的虚拟IP。
我们项目组是负责零信任产品线的研发,因客户那边不允许大脑开多个端口,所以大脑侧需要收敛端口,DNS解析53端口经调研可以去掉。
原理:在驱动层对本地53端口消息包进行过滤,取出特定域名的DNS请求,然后按照DNS响应消息包的格式对DNS进行定制响应。
DNS可以使用UDP与TCP两种协议。这里我们主要以UDP进行分析。
DNS报文字段解析
DNS报文格式:
桢首部 | IP首部 | UDP首部 | DNS报文 |
DNS字段格式:
发送报文
DNS头部 | DNS query |
接收报文
DNS头部 | DNS query | DNS answer |
DNS报文头部
字段
说明
Transaction ID
辨别DNS应答报文是哪个请求报文的响应
QR
Flags字段,1为响应,0位查询
OpCode
Flags字段,查询或响应类型,0为标准,1为反向,2为服务器状态请求
AA
Flags字段,授权回答
TC
Flags字段,截断,1表示超过512字节并已被截断,0表示没有发送截断
RD
Flags字段,是否希望得到递归回答
RA
Flags字段,响应报文中为1便是得到递归响应
Z
Flags字段,0
AD
Flags字段,真是数据
CD
Flags字段,禁止校验
RCODE
Flags字段,返回码:0-无差错,1-格式错误,2-服务器失效,3-不存在域名,4-查询类型不支持,5-被禁止,6-15保留
Questions
Flags字段,查询数
Answer
Flags字段,资源记录数
Authority
Flags字段,授权资源记录数
Additional
Flags字段,额外资源记录数
按照响应包的结构可定制自行拼包,给与特定的响应
相关代码资源已经上传