DNS tunnel

DNS tunnel

来源 https://zhuanlan.zhihu.com/p/88728822

参考 https://github.com/alex-sector/dns2tcp

参考 https://github.com/zfl9/dns2tcp

随着网络的迅速发展,无线通信技术越来越重要。当我们身处机场、酒店、校园等公共场所,我们随处都能够搜寻到无线WIFI信号,但通常我们搜寻到的无线WIFI信号都需要我们访问一个特定的网站,需要输入用户名密码等信息登录才能够连接网络。

如果此时没有账号,即使连接了无线WIFI网络,但也无法实现上网。通常情况下,此刻获取到的DNS地址是有效的,并且可以进行DNS查询。这时便可通过DNS tunnel技术来绕过登录,实现免费上网。

DNS简介

DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。 域名是Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。域名是由一串用点分隔的名字组成的,通常包含组织名,而且始终包括两到三个字母的后缀,以指明组织的类型或该域所在的国家或地区。

DNS的解析过程可以分为两种类型:迭代查询和递归查询。通常本机到Local DNS Server的过程属于递归查询,而Local DNS Server对查询域名的解析过程属于迭代查询。为了减轻Local DNS Server的压力,提高解析速度,引入了缓存机制。缓存和TTL紧密相连,当TTL过期,Local DNS Server则会丢弃缓存的数据,重新从权威域名服务器上获取新的数据。

所谓域名服务器(即Domain Name Server,简称Name Server)实际上就是装有域名系统的主机。它是一种能够实现名字解析(name resolution)的分层结构数据库。

锐捷Web认证的典型组网方式

Web认证的角色:

1、认证客户端:通常是一个浏览器,运行HTTP协议,用户通过浏览器上网时浏览器将发出HTTP请求。
2、接入设备:在网络拓扑中一般是接入层设备与用户终端设备直接相连接,在接入设备上需要启动Web认证功能。
3、Portal Server:提供Web认证的认证界面和相关操作。Portal Server接受认证客户端发出的基于HTTP的认证请求,提取其中的账号信息,将此信息发送到认证服务器进行认证,然后通告用户和接入设备认证结果。
4、Radius Server:提供基于radius协议的远程用户认证,Portal Server从HTTP中获取用户的认证账号信息,然后通过radius协议向RADIUS Server请求认证。Radius Server通过radius协议向Portal Server反馈认证结果。

Web认证的流程:

1、在认证之前,接入设备将未认证用户发出的所有HTTP 请求都拦截下来,并重定向到Portal服务器去,这样在用户的浏览器上将弹出一个认证页面。
2、在认证过程中,用户在认证页面上输入认证信息(用户名、口令、校验码等等)与Portal服务器交互。
3、Portal服务器和认证服务器(SAM)完成身份认证的功能。
4、在认证通过后,Portal服务器将通知接入设备该用户已通过认证,接入设备将允许用户访问互联网资源。

DNS tunnel简介

DNS tunnel(DNS隧道),就是利用DNS查询过程建立起隧道,传输数据。

DNS tunnel原理

当终端设备在做DNS查询的时候,如果查的域名在DNS服务器本机的缓存中没有,它就会去互联网上查询,最终把结果返回给终端设备。如果在互联网上有台定制的服务器。只要依靠 DNS的这层约定,就可以交换数据包了。从DNS协议上看,终端设备是在一次次的查询某个特定域名,并得到解析结果。但实际上,终端设备已经实现了外部通讯。因为没有直接连到局域网外的机器,因此网关不会转发你的IP包出去。但实际上局域网上的DNS服务器帮我们做了中转。这就是DNS tunnel。

DNS tunnel可以分为直连和中继两种。直连也就是Client直接和指定的目标DNS Server(Authoritative NS Server)连接,通过将数据编码封装在DNS协议中进行通信,这种方式速度快,但是隐蔽性比较弱,很容易被探测到,另外限制比较高,很多场景不允许自己指定DNS Server。而通过DNS迭代查询而实现的中继隧道,则更为隐秘,但同时因为数据包到达目标DNS Server前需要经过多个节点,所以速度上较直连慢很多。

DNS tunnel技术的实现

dns隧道工具将进入隧道的其他协议流量封装到dns协议内,在隧道上传输。这些数据包出隧道时进行解封装,还原数据。

在建立隧道之前,我们需要让dns隧道的客户端找到隧道的服务端,其过程大致如下:

①、本地主机A发送一条dns请求,查询一个我们设定好的域名;
②、因为沿途的dns服务器都没有这个域名的相关信息,最终这条请求被转发到权威域名服务器B(假如是阿里云上注册的域名,阿里的域名服务器就是针对你的域名的权威服务器);
③、我们添加了一条NS记录,关于要查询的域名,需要转到我们的公网服务器C做解析,B就会把C的地址返回给A;
④、A知道了C的地址,就可以建立起dns隧道了。

 

=========== End

 

原文地址:https://www.cnblogs.com/lsgxeva/p/14260534.html