DNS隧道传输
最后更新于
最后更新于
DNS隧道是一种相对隐蔽的隧道, 通过将其他协议封装到DNS协议中来进行传输通信
因为DNS协议是网络中的基础协议且必不可少, 所以大部分防火墙和入侵检测设备是不会对DNS流量进行拦截, 这就给DNS作为隐蔽通信提供了有力条件, 从而可以利用它实现诸如僵尸网络或木马的远程控制通道和对外传输数据等等
DNS隧道依据其实现方式大致可分为直连和中继两类:
直连: 用户端直接和指定的目标DNS服务器建立连接,然后将需要传输的数据编码封装在DNS协议中进行通信。这种方式的优点是具有较高速度,但蔽性弱、易被探测追踪的缺点也很明显。另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过
中继隧道: 通过DNS迭代查询而实现的中继DNS隧道,这种方式及其隐秘,且可在绝大部分场景下部署成功。但由于数据包到达目标DNS服务器前需要经过多个节点的跳转,数据传输速度和传输能力较直连会慢很多
在自己的云服务器上执行如下命令安装dns2tcp工具
修改dns2tcp配置文件: vim /etc/dns2tcpd.conf
, 设置域名及DNS隧道密码, 注意监听地址要修改成0.0.0.0
检查云服务器的53端口是否被占用: netstat -anp | grep "53"
, 发现53端口上运行了systemd-resolve
服务, 此服务无法使用kill命令进行关闭, 只能使用: systemctl stop systemd-resolved
此处我选择的是godaddy的域名: henry666.xyz
添加一条A记录,主机记录为dns, 记录值为124.71.209.202
再添加一条NS记录, 主机记录为dns2tcp, 记录值为dns.henry666.xyz
解释: A记录表示dns.henry666.xyz指向124.71.209.202; NS记录表示若想要知道dns2tcp.henry666.xyz的ip地址, 就要通过dns.henry666.xyz去查询
上述配置完成后, 在我们的云服务器上对53端口抓包来验证NS记录是否设置成功, 命令如下所示:
在客户端cmd命令输入: nslookup dns2tcp.henry666.xyz
, 随后查看云服务上的抓包情况, 发现有很多数据回显, 说明这些二数据最终都流向了dns.henry666.xyz这个域名服务器
这里我简单说明下DNS查询数据的流程: 首先解析此域名会先去本地的hosts文件查询数据, 查询不到再去学校的DNS服务器查询(此处我用的是校园网), 再查询不到又去根域名henry666.xyz的godaddy域名服务器查询, 然后godaddy域名服务器告诉我们此数据要去找dns.henry666.xyz这个域名服务器, 最后数据包流向了我们的云服务器
服务端(云服务器)输入如下命令运行dns2tcpd工具
将dns2tcp工具解压至客户主机, 并在文件夹打开cmd命令输入: dns2tcpc -r ssh -k henry666 -z dns2tcp.henry666.xyz 124.71.209.202 -l 8888 -c -d 3
-r : 后接服务名称
ssh/socks/http
中的任意一个 -z : 后接你设置的NS记录以及云服务器ip -l : 后接本地监听端口 -d : 开启Debug模式
使用xshell连接本机的8888端口, 随后输入要登录的用户名及密码, 即可连接上云服务器
鼠标右键ssh会话, 添加隧道转发规则, 此处选择SOCKS, 侦听端口为1080
随后点击查看->隧道窗格, 查看刚刚创建的转移规则是否生效
点击配置文件->代理服务器
, 添加代理服务器127.0.0.1:1080
打开火狐浏览器, 搜索IP可发现本机IP为云服务器的IP
我用其他浏览器访问网页总是显示“代理服务器连接失败”, 只有使用火狐浏览器才能正常访问页面
在运行浏览器的期间, 可在proxifier界面看到浏览器的网页数据流向至socks代理服务器
https://blog.csdn.net/a15608445683/article/details/122803795
https://blog.csdn.net/jd_cx/article/details/122660833
https://www.baidu.com/link?url=8_ioEY96YssEa3B_EXOcBNLrb4YDg6sngpAj93DiGuWOX_zZEC8qIUADERWQAsFY&wd=&eqid=d0ca3b550000fa500000000663650fe8