DNS隧道实现原理
常见的热点都需要登录才能够上网, 而提供热点的ISP对热点的DNS查询服务并不作限制, 这样我们就可以在利用DNS查询机制传递信息.
也就是说, 如果我们的请求数据包中的数据, 不含过滤规则时, 有限制的ISP或者防火墙则不会进行丢包处理.
所以, 我们在发起请求时, 将请求数据包内容通过标准的DNS协议进行加密, 标记解析请求的DNS地址, 则有限制的ISP在解析客户端发起的域名请求时, 无法识别地址, 而去指定的DNS服务器上进行请求查询. 此时, 我们在指定的DNS服务器上进行数据包解密.
再将查询内容返回. 此时, 有限制的ISP或者防火墙会再次检测内容是否为非认证状态, 如果是非认证状态, 则将查询结果内容进行丢包处理.
所以, 在特定的DNS服务器上, 我们需要将结果进行标准DNS协议加密返回客户端. 此时ISP无法识别结果, 而直接返回客户端进行解密处理. 这样我们就完成了一次DNS隧道请求, 而完全绕过的ISP服务商的认证.
建立DNS隧道的环境需求
- 可以连接有限制的ISP服务商, 比如连接CMCC的无线热点
- 需要一台拥有公网IP的服务器
- DNS隧道工具, 用来提供客户端, 服务器通信加解密操作, 以下总结几个流行的工具:
- tcp-over-dns http://analogbit.com/software/tcp-over-dns/
- dns2tcp http://www.hsc.fr/ressources/outils/dns2tcp/
- iodine http://code.kryo.se/iodine/
- 客户端代理工具
实战操作
本次配置的服务器环境为 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工具服务端
这里我们选用 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
注意本地需要安装 DNS2TCP 工具, Windows 用户请从网盘下载:
到此为止, 服务端配置完成
可以用SSH测试一下
ssh [email protected]:3333
连通的话就说明 DNS2TCP 成功了, 可以直接用SSH通道建立代理上网, 客户端 Chrome 再用 SwitchOmega 接入,也可以在客户端那写 http 或 Socks 服务, 前提是服务器那要有对应服务 (可以找Kingate 架设 http 和 Socks5 代理的文章)
放上成果图
资源链接:
iPhone客户端设置
首先iPhone需要越狱,然后安装MobileTerminal, OpenSSH和dns2tcp
在手机终端上运行
2016年1月7日 下午7:34 1F
加密内容如何查看?密码如何得到呢