借助DNS隧道实现绕过公共 Wifi 热点登陆免费上网

摘要

DNS tunnel的原理
首先,要知道DNS系统的工作原理,见:[DNS系统(服务器)的工作原理及攻击防护方法论] 。你在做 DNS 查询的时候,如果查的域名在 DNS 服务器本机的 cache 中没有,它就会去互联网上查询,最终把结果返回给你。如果你在互联网上有台定制的服务器。只要依靠 DNS 的这层约定,就可以交换数据包了。从 DNS 协议上看,你是在一次次的查询某个特定域名,并得到解析结果。但实际上,你在和外部通讯。你没有直接连到局域网外的机器,因为网关不会转发你的 IP 包出去。但局域网上的 DNS 服务器帮你做了中转。这就是 DNS Tunnel 了。

DNS隧道实现原理

常见的热点都需要登录才能够上网, 而提供热点的ISP对热点的DNS查询服务并不作限制, 这样我们就可以在利用DNS查询机制传递信息.

也就是说, 如果我们的请求数据包中的数据, 不含过滤规则时, 有限制的ISP或者防火墙则不会进行丢包处理.

所以, 我们在发起请求时, 将请求数据包内容通过标准的DNS协议进行加密, 标记解析请求的DNS地址, 则有限制的ISP在解析客户端发起的域名请求时, 无法识别地址, 而去指定的DNS服务器上进行请求查询. 此时, 我们在指定的DNS服务器上进行数据包解密.

再将查询内容返回. 此时, 有限制的ISP或者防火墙会再次检测内容是否为非认证状态, 如果是非认证状态, 则将查询结果内容进行丢包处理.

所以, 在特定的DNS服务器上, 我们需要将结果进行标准DNS协议加密返回客户端. 此时ISP无法识别结果, 而直接返回客户端进行解密处理. 这样我们就完成了一次DNS隧道请求, 而完全绕过的ISP服务商的认证.

建立DNS隧道的环境需求

  1. 可以连接有限制的ISP服务商, 比如连接CMCC的无线热点
  2. 需要一台拥有公网IP的服务器
  3. DNS隧道工具, 用来提供客户端, 服务器通信加解密操作, 以下总结几个流行的工具:
  4. 客户端代理工具

实战操作

本次配置的服务器环境为 CentOS:

[[email protected] ~]# cat /etc/issue
CentOS release 6.7 (Final)
Kernel \r on an \m

为服务器添加A记录和NS记录

a.abc.xyz NS b.abc.xyz
b.abc.xyz A 1.2.3.4 (填你的服务器IP, 这里用 1.2.3.4 为例)

下图是我做的域名解析示例
借助DNS隧道实现绕过公共 Wifi 热点登陆免费上网

配置DNS工具服务端

这里我们选用 DNS2TCP 为例

在服务器上安装 DNS2TCP

wget http://www.hsc.fr/ressources/outils/dns2tcp/download/dns2tcp-0.5.2.tar.gz
tar zxf dns2tcp-0.5.2.tar.gz
cd dns2tcp-0.5.2
./configure
make
make install

在 /etc 建立一个名为 dns2tcpd.conf 的文件, 然后输入以下配置:

listen = 167.114.230.243  #Linux服务器的IP
port = 53
user = nobody
key = lookback
chroot = /tmp/dns2tcpd/
domain = d2t.awk.ovh 上面配置NS记录的域名
resources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128

最后的 resources 里面配置的是 DNS2TCP 供客户端使用的资源. 作用是: 客户端在本地监听一个端口, 并指定使用的资源, 当有数据往端口传送后,DNS2TCP 客户端将数据用DNS协议传动到服务器,然后服务器将数据转发到对应的资源配置的端口中。

服务端执行如下命令启动 DNS2TCP:

dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
#参数意义:
#-f 读取配置文件
#-F 强制前台运行
#-d 2 开启debug, 等级为2

验证端口是否监听了

ss -unl |awk '/:53/'

到此为止,服务端配置完成

配置DNS工具客户端

DNS2TCP 的客户端配置较为简单, 一条命令就行:

dns2tcpc -z d2t.awk.ovh 167.114.230.243 -k password -d 1 -l 3333 -r ssh
#-z 后接NS记录的网址, ip, 注意IP地址最好写上, 可以不写
#-k 配置文件中的密码
#-d 开启 Debug,和debug的级别
#-l 后接本地监听的端口
#-r 后接服务名称, 这里我们用ssh

借助DNS隧道实现绕过公共 Wifi 热点登陆免费上网
注意本地需要安装 DNS2TCP 工具, Windows 用户请从网盘下载:

到此为止, 服务端配置完成

可以用SSH测试一下

ssh [email protected]:3333

连通的话就说明 DNS2TCP 成功了, 可以直接用SSH通道建立代理上网, 客户端 Chrome 再用 SwitchOmega 接入,也可以在客户端那写 http 或 Socks 服务, 前提是服务器那要有对应服务 (可以找Kingate 架设 http 和 Socks5 代理的文章)
放上成果图

资源链接:


iPhone客户端设置

首先iPhone需要越狱,然后安装MobileTerminal, OpenSSH和dns2tcp

在手机终端上运行

输入密码查看隐藏内容:

  • 本文由 发表于 2015年10月30日15:37:46
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

评论:1   其中:访客  1   博主  0
    • rayes 0

      加密内容如何查看?密码如何得到呢