DNS协议实战:从报文捕获到权威解析【头歌】
1. DNS协议基础与实战环境搭建DNSDomain Name System就像互联网世界的电话簿负责把人类易记的域名翻译成机器识别的IP地址。每次你在浏览器输入网址背后都藏着至少一次DNS查询。这次我们不用枯燥的理论直接上手实战——用Wireshark抓包工具把DNS通信过程扒个精光。先说说实验环境。我推荐在Linux系统下操作Windows和Mac也能跑但命令稍有不同。你需要准备Wireshark最新版就行别用老古董nslookup系统自带但Windows和Linux用法略有差异一个能联网的电脑废话但真的有人问过断网能不能做这实验安装Wireshark时有个坑要注意普通用户默认没权限抓包。在Ubuntu下用这个命令快速解决sudo usermod -aG wireshark $USER然后注销重新登录。不这么搞的话待会儿抓包时会发现网卡列表是灰的别问我怎么知道的——说多了都是泪。2. 捕获NS记录查询全过程NS记录好比域名界的114查号台告诉你该找谁问路。比如查询baidu.com的NS记录相当于问百度这个地盘归哪个DNS服务器管实战步骤开Wireshark选网卡选正在用的那个wifi选wlan0有线选eth0在过滤器栏输入dns后回车别输引号打开终端执行nslookup -typeNS baidu.com这时候Wireshark会突然刷出一堆数据包别慌。找到那个显示Standard query NS baidu.com的请求包和对应的响应包。重点看三个地方请求包的Question部分会显示Name: baidu.com Type: NS (authoritative name server)响应包的Answer部分藏着宝baidu.com nameserver ns1.baidu.com baidu.com nameserver ns2.baidu.com ...这就是百度的官方指路人有个骚操作你可能不知道在Wireshark里右键任意DNS包选Follow UDP Stream能看到原始报文对比。我上次用这招发现某公共DNS居然篡改响应吓得赶紧换了服务商。3. 反向DNS解析的玄机PTR记录玩的是反查——通过IP找域名。比如黑客追踪时常用这招查IP归属运维也用它做访问控制。但反向查询有个奇葩设定IP要倒着写操作实录nslookup -typePTR 39.156.69.79.in-addr.arpaWireshark里你会看到Query部分长这样Name: 39.156.69.79.in-addr.arpa Type: PTR如果响应包里有Answer可能会返回类似39.156.69.79.in-addr.arpa www.baidu.com为什么倒着写这得从DNS的树状结构说起。想象IP是电话号码国家码-区号-本地号DNS从右往左解析就像打电话先拨国家码。有次我手贱没倒置直接查结果收到个NXDOMAIN错误愣是查了半小时文档才明白过来。4. 指定DNS服务器查询技巧默认用ISP的DNS太天真了用nslookup 域名 DNS服务器IP可以指定问谁。比如nslookup baidu.com 114.114.114.114Wireshark里会清晰看到请求直接发往114DNS目标IP 114.114.114.114响应包里可能有不同的Answer不同DNS策略不同有次我比较三大DNS的响应速度发现谷歌8.8.8.8平均200ms阿里223.5.5.5平均80ms腾讯119.29.29.29竟然有50%丢包 后来才知道那天腾讯DNS在升级...5. DNS报文结构深度拆解抓到的包在Wireshark里展开看DNS报文其实分五个部分Header头部12字节固定ID会话标识像快递单号QR0是查询1是响应RD要求递归查询打钩服务器就得负责到底RA服务器支持递归打钩表示我能接这活Question问题区QNAME查询的域名如baidu.comQTYPE查询类型A/NS/MX等QCLASS查询类通常都是IN指InternetAnswer回答区可能多个记录NAME域名TYPE记录类型TTL缓存有效期单位秒RDATA记录数据比如IP地址实战技巧在Wireshark搜索栏输入dns.flags.response 1可以只看响应包。有次排查DNS污染我就是用这招快速定位到被篡改的响应。6. 常见问题排查实录场景1抓不到DNS包检查过滤器是不是输错了是dns不是DNS确认网卡没选错虚拟机用户经常选成NAT虚拟网卡试试ping baidu.com同时抓包先确认基础抓包功能正常场景2响应报文中TC标志位为1表示报文被截断通常因为UDP包超过512字节解决方案是改用TCP查询dig tcp baidu.com NS场景3响应码RCODE非02服务器故障SOA记录配置错误我见过3域名不存在输错域名常见5查询被拒绝企业内网DNS常有权限控制记得有次内网开发RCODE5折腾半天最后发现是IT部门新加了白名单。所以看到错误码先查RFC文档比瞎猜高效多了。7. 高阶玩法与安全分析EDNS扩展 现代DNS支持扩展机制RFC6891允许更大的UDP包。Wireshark里看OPT记录Type: OPT UDP payload size: 4096没这个的话DNSSEC等高级功能会受限。DNSSEC验证 在响应包找AD标志位AD1表示数据经过完整验证但要注意客户端必须配置信任锚才能验证缓存投毒攻击 观察异常现象相同Query ID连续出现权威服务器突然变成陌生IPTTL异常大攻击者希望持久化有次我抓包发现某公共WiFi的DNS响应TTL高达86400秒24小时明显不正常后来证实是路由器的DNS劫持功能被黑产利用。