1、问题场景
在学校是如果校园网没钱了,难道就不能上网了????
对于从事技术的人来说尤其是学计算机出身的人来说这是不能容忍的
我们看下面场景:当我们校园网没有认证时,连接百度时会出现下面情景:
并且此时ping baidu.com会发现是ping不通的
但是我们可以发现这个时候DNS查询是好用的,如下所示:
并且我们发现这个查询是通过我们学校的DNS服务器查询到的,也就是我们可以绕过校园网认证直接去DNS服务器上进行DNS查询,那么我们就有办法通过DNS伪装进行上网了。同理下面的场景。
办公电脑通过防火墙与互联网相连,防火墙被配置为仅允许DNS数据通过。在此场景下,办公电脑显然无法直接访问互联网。现在我们想做的是通过使用dns2tcp建立DNS隧道,使得办公电脑可以访问互联网。
许多大学的校园网在连接后,打开浏览器会自动跳转到身份认证页面。在认证前,是无法访问互联网的,但一般来说,其DNS解析是可用的。这便是上述问题场景中的一个实例。另一个实例是有些公司的网络出口处有防火墙阻止了普通员工的办公电脑访问互联网的,但有时防火墙的配置会允许DNS数据通过。
2、预备知识
我们假设读者对DNS有最基本的了解,若不了解可先阅读《百度百科:DNS》。这里要介绍的是NS记录。以下内容摘自《阿里云-用户指南-记录类型》。
NS记录不是在设置某个域名的DNS服务器,而是在设置某个子域名的DNS服务器。理解这一点对于成功搭建DNS隧道至关重要。
例如我有域名“werner.wiki”,添加NS记录类型的解析,主机记录值为“test”,记录值为“dns.my.com”。则此记录生效后,所有关于“test.werner.wiki”及其子域名的DNS查询,都会找DNS服务器“dns.my.com”。
3、原材料
为了成功搭建DNS隧道,我们需要一台位于互联网中的(而不是在防火墙里的)服务器,我们将要搭建的隧道的一头是办公电脑,另一头便是这台服务器。在实践中,我们常常会买一台云服务器或vps来搭建DNS隧道。由于DNS的敏感性,这台服务器最好是在中国大陆。为了进行演示,我买了一台腾讯云的云服务器(刚好有快要过期的代金券~)。
我们还需要一个可以设置解析的域名。这个域名是什么无所谓,只要能设置解析就行。所以可以买一个很便宜的域名,第一年的价格在几块钱。在这篇文章中,我们以guojun.tk为例
4、开始搭建
1 设置域名解析(两种类型的域名解析非常重要,我本人掉坑很久)
首先添加一条A类解析,主机记录为“dns”,记录值为“118.xx.xx.120”,这个IP地址就是腾讯云服务器的公网IP地址。
然后添加一条NS解析,主机记录为“dns2tcp”,记录值为“dns.werner.wiki”。
这两条域名解析如下图所示。
这两条域名解析做了什么?(其实就是DNS欺骗)
第一条A类解析是在告诉域名系统,dns.guojun.tk的具体ip地址
第二条NS解析相当于新建一台域名服务器,其实就是在告诉这个域名系统,想要知道“dns2tcp.guojun.tk”的IP地址,就去问这个域名服务器“dns.guojun.tk”(相当于一台域名服务器。),事实上这个域名的服务器的地址前面已经给出了,所以DNS查询数据包就会去dns.guojun.tk这个域名服务器中查询dns2tcp.guojun.tk的ip地址,那么这个DNS查询数据包就会最终到达dns.guojun.tk这个服务器上面,事实上这个只是伪装的DNS数据包。
如何验证域名解析设置是否成功?
在随便一台电脑上ping域名“dns.guojun.tk",若能ping通,且显示的IP地址正确,说明第一条A类解析设置成功并已生效。
在我们自己的服务器上运行抓包,抓目的端口是53的udp包,命令是:
tcpdump -n -i eth0 udp dst port 53
53端口是DNS协议使用的端口。注意上述命令中的参数“eth0”,含义是网卡接口名,在不同的服务器中可能不同。
然后在随便一台电脑上运行命令:
nslookup dns2tcp.guojun.tk
这条命令是在对域名“dns2tcp.guojun.tk”进行查询。如前所述,若我们设置的域名解析生效,则对此域名的DNS查询,会最终被转发到“dns.guojun.tk”,而“dns.guojun.tk”的IP地址是“118.xx.xx.120”,也就是我们自己的服务器上的的公网IP地址。
查看我们自己的云服务器上的抓包情况,若抓到对域名“dns2tcp.guojun.tk”进行查询的DNS请求数据包,则说明第二条NS解析设置成功并已生效。
抓到的数据包如下图所示。图中的目的IP地址是腾讯云服务器的内网IP地址,所以我没有打码。
3、服务器端软件配置
安装配置dns2tcp
在我们自己的云服务器上,我们首先需要安装dns2tcp,命令如下:
sudo apt-get install dns2tcp
安装完成后打开配置文件“/etc/dns2tcpd.conf”,将其中内容修改为:
listen = 192.168.0.143 #这个是内网的ip地址,不能是127.0.0.1这个只能与本机通信
port = 53
user = nobody
chroot = /tmp
domain = dns2tcp.guojun.tk
reources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128
启动dns2tcp
输入命令:
dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
#完成后如下所示
打开Internet属性,依次选择 连接–局域网(LAN)设置–为LAN使用代理服务器–高级
设置套接字 为 127.0.0.1 端口是1080 ,确认即可