1、问题场景
在学校是如果校园网没钱了,难道就不能上网了????
对于从事技术的人来说尤其是学计算机出身的人来说这是不能容忍的
我们看下面场景:当我们校园网没有认证时,连接百度时会出现下面情景:
并且此时ping baidu.com会发现是ping不通的
但是我们可以发现这个时候DNS查询是好用的,如下所示:
并且我们发现这个查询是通过我们学校的DNS服务器查询到的,也就是我们可以绕过校园网认证直接去DNS服务器上进行DNS查询,那么我们就有办法通过DNS伪装进行上网了。同理下面的场景。
办公电脑通过防火墙与互联网相连,防火墙被配置为仅允许DNS数据通过。在此场景下,办公电脑显然无法直接访问互联网。现在我们想做的是通过使用dns2tcp建立DNS隧道,使得办公电脑可以访问互联网。
许多大学的校园网在连接后,打开浏览器会自动跳转到身份认证页面。在认证前,是无法访问互联网的,但一般来说,其DNS解析是可用的。这便是上述问题场景中的一个实例。另一个实例是有些公司的网络出口处有防火墙阻止了普通员工的办公电脑访问互联网的,但有时防火墙的配置会允许DNS数据通过。
2、预备知识
我们假设读者对DNS有最基本的了解,若不了解可先阅读《百度百科:DNS》。这里要介绍的是NS记录。以下内容摘自《阿里云-用户指南-记录类型》。
NS 记录
(1)什么情况下会用到NS记录?
如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。
(2)NS记录的添加方式
记录类型为NS。
主机记录处填子域名(比如需要将opo.abc.com的解析授权给其他DNS服务器,只需要在主机记录处填写opo即可,NS记录的主机记录(RR值)不能为空,主机记录@不能作为NS记录使用,且NS记录不支持泛解析【将所有子域名解析到同一地址】,授权出去的子域名不会影响其他子域名的正常解析)。
线路类型(默认为必填项,否则会导致部分用户无法解析)。
NS记录值,NS向下授权,请填写DNS域名记录值为要授权的DNS服务器域名,为了保证服务可靠性,建议您添加至少2组DNS服务(例如:ns1.alidns.com, ns2.alidns.com)。
TTL不需要填写,添加时系统会自动生成,默认为600秒(TTL为缓存时间,数值越小,修改记录各地生效时间越快)。
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地址,所以我没有打码。
仔细分析上面图片,其实就是DNS查询数据包先去学校的DNS服务器上面查询,找不到之后,然后去根域名服务器guojun.tk找到了腾讯的域名服务器,腾讯的域名服务器告诉这个数据包去找dns.guojun.tk这个域名服务器,最终数据包达到了我们自己的服务器上面。
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
内网与外网的理解,记住,其实我们每一台电脑都是在一个内网里面,如果电脑有公网ip的话,那么就会将这个内网ip地址与公网ip地址绑定在一起,应该是有某种方式(具体目前我还不知道,也就是数据包带着的是公网ip,但是进入内网之后有个软件可以实现这个公网ip定位到内网Ip,这个和Net技术有点相似。
启动dns2tcp
输入命令:
dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
#完成后如下所示
window下载dns2tcpc.exe 该工具
具体连接如下:
https://download.csdn.net/download/a15608445683/79527478
CMD下运行软件 — 运行之后千万不要关闭该命令提示符
dns2tcpc.exe -r ssh -z dns2tcp.guojun.tk -l 8888 -d 2
-r 后接服务名称<ssh/socks/http中的任意一个>
-z 后接你设置的NS记录,和你的VPS公网ip
-l 后接本地端口,随便一个常用端口就行
-d 开启 Debug
Xshell 新建会话 IP:127.0.0.1 端口8888
进行连接,然后会要求你输入服务器的账号密码。选择记住密码,方便下次使用。
然后这个时候。运行dns2tcpc的命令你个提示符会出现大量数据,说明电脑与服务器已经在传输数据了
打开Internet属性,依次选择 连接–局域网(LAN)设置–为LAN使用代理服务器–高级
设置套接字 为 127.0.0.1 端口是1080 ,确认即可
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)