声明:本博文用到的所有图片均来源于博主学校,仅供学习使用
DNS中继服务器的基本功能
首先明确中继器的概念,想象一下赚差价的中间商,DNS客户端明明可以直接访问DNS本地服务器得到自己想知道的域名的IP地址,为了让我们明确DNS的整个运作流程,于是课程设计让我们做出一个中间商——DNS中继服务器。倒卖一样的IP地址,只是中继服务器的货源没有本地服务器充足。
下图说明了三者的概念。
下图展现了当DNS中继服务器中IP地址充足(IP地址能直接在DNS中继服务器找到)时的操作
下图展现了DNS中继服务器IP地址不充足(在DNS中继服务器中找到不到对应的IP地址)时,DNS中继服务器会向厂家,也就是DNS本地服务器请求补货(补充未搜索到的IP地址进文件,下次再搜索相同域名就有对应的IP地址卖)
层次化的域名空间
zone与domain(区与机构域)
区:一个独立的域名管理模块,通常在一个数据库中
机构域:域名树中在同一个节点下的所有节点处于该节点命名的机构域中
关系:区不一定等于机构域
DNS中继服务器的运行过程
1.打开命令行,输入ipconfig/all查询本机DNS服务器地址
找到当前处于连接状态的媒体的DNS服务器地址,记下
找到更改网络适配器选项
双击当前处于连接状态的图标,我是WLAN,双击后界面如下
选择属性,找到并点击IPv4
点击属性,按下图设置
试验调试信息1级(-d)运行情况
使用命令行窗口运行程序,先试验调式信息级别为1级,-d后接之前用ipconfig/all查询的本机原来的DNS服务器地址,不设置配置文件,使用默认配置文件,如下图:
因为没有清除之前的DNS缓存,可以使用ipconfig/displaydns命令查看当前dns cache的内容,可以看到在运行的样例程序的配置文件里没有的网址。
现在抓到的包和在wireshark里面的一样
现在刷新一下dns cache的内容
再查看dns cache内容,发现只有2条记录,这说明样例程序的中继功能做的没问题,在dns cache刷新后重新访问,在短时间内会重新从本地DNS服务器那里补IP地址。
检验一下样例程序的拦截功能,选择配置文件dnsrelay.txt中的一个ip地址设置为0.0.0.0的域名
打开另一个命令行端口,使用nslookup命令查询ip地址
对应的正在运行的样例程序端口出现如下信息:
虽然不知道加*号是什么意思
用wireshark看了一下182那行信息的包,没有answer,应该是个查询包
184那行是响应包,同样没有answer,但flag里显示no such name
目前不太清楚10.21.134.21是谁的地址,我猜测应该是DNS中继服务器的地址,它向本机DNS服务器10.3.9.45发送查询报,本机DNS向它回了一个响应报,说没有这个地址。这个地址一看就是生造的,自然是没有的,这说明本机DNS服务器返回信息没有问题。问题在于,样例测试程序收到在配置表里IP地址为0.0.0.0的包也会往外发。
现在试一个一看就知道是生造的IP地址的网址
下图是两个端口在输入nslookup test1命令后的结果,可以看出样例程序的DNS服务功能没问题,成功查到了设置在配置表里的IP地址。
就是会出现超时的情况
不好意思,刚才发现是因为我之前让中继器停下来看信息的时候,忘记让中继器程序运行,所以它现在输出一大堆错误。。。看样子停不下来了
重启程序,再次试验。这次成功找到test1的查询报和响应报
可以看到本地DNS服务器在flag里还是说没有test1这个域名,但是中继器返回了在配置表里的IP地址
虽然不明白样例程序在自己的配置表里都找到了域名为啥还是会向本地DNS服务器查询。
试验调试信息2级(-dd)运行情况
从输出的信息我们可以看出调试信息二级输出的信息比1级具体。
首先,先输出配置文件里的域名与IP地址
能看到有明显的收发包提示,有包的发送、接收方向和具体大小,还有16进制的包的全部内容的展现。还输出了报文每个字段的大小。感觉和wireshark功能差不多。debug的时候正好可以调用wireshark和-dd输出的信息比较。
小提示:这样运行完程序后,电脑重启的时候记得重新把本地的DNS服务器地址让它自动配置,不然连不上网。下次再运行的时候重复查找本地DNS服务器的地址,重新运行样例程序。