流量操控技术-DNS协议隧道

DNS协议隧道

  • 防火墙禁止TCP出战访问流量
    • SSH隧道、端口转发全部失效
    • DNS的工作原理适合用于实现隧道
  • DNS工作原理
    • DNS隧道原理:注册受自己控制的DNS记录

DNS2TCP

  • 利用合法DNS服务器实现DNS隧道
  • C/S(dns2tcp/dns2tcpd)结构
  • 通过txt记录加密传输数据(A记录长度有限)
  • 隧道建立后保持连接
  • 默认记录生存时间3秒
安装
  • apt-get install dns2tcp
  • Kali默认安装
环境配置1(直接通过防火墙访问外网DNS服务器)
  • Win2003:安装DNS服务器;配置转发器;创建区域lab.com;指派二级域test.lab.com;NS记录指向Kali

  • 防火墙:只允许UDP 53端口出站

  • 客户端(Bodhi Linux)

    • dns2tcpc -c -k pass -d 1 -l 2222 -r ssh -z test.lab.com
      • -c 启动压缩,提高网络效率
    • -k 服务端配置文件中设置的密码,可以不设置。
      • -l 本地侦听端口
      • -r resources
      • -z 服务端的域名
  • 服务端(Kali)

    • 服务端配置文件:
      • /etc/dns2tcpd.conf
      • .dns2tcprcd(也可以在当前用户主目录下创建这个文件,就不需要指定-f参数了)
      • 资源可以是其它地址
    • 启动
    • dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf
      • -F:前端运行
      • -d:debug level 1-3
      • -f :指定配置文件
环境配置2(防火墙内DNS服务器访问指定外网DNS服务器)
  • 同样的操作
资源访问
  • 本地ssh资源
  • socks代理
  • 隧道嵌套

iodine

  • 对下行数据不进行编码,因此性能优秀
  • 支持多平台:Linux、BSD、MacOS、Windows
  • 最大16个并发连接
  • 强制密码支持
  • 支持同网段 隧道IP(在客户端和服务器端分别创建虚拟网卡,分别绑定一个新的ip。这两个新ip处于同一网段,而这个网段与客户端服务端的网段都不同)
  • 支持多种DNS记录类型
  • 丰富的隧道质量检测措施
操作

服务端:

-f -c 2.2.2.1 test.lab.com```
1
2
3
4
5
6
7
8
9
10

-f: 前台运行

-c:检查ip地址

ip地址:本机上隧道网段的ip地址(ifconfig查看,dns0)

客户端:

```iodine -f 1.1.1.2 test.lab.com
  • 这里指定的是本地DNS服务器ip,也可以不指定,自己检测

curl --socks5 -hostname 127.0.0.1:7001

隧道网络接口
  • 不基于资源的通用隧道,如同本网段内两台相邻的主机。
  • 服务器端和客户端分别生成隧道网络接口dns0
  • 隧道两端接口的IP地址应不同于客户端和服务端网段
  • 隧道可以嵌套其它隧道,如ssh