Iodine DNS隧道实验记录

本文介绍了Iodine,一种用于建立DNS隧道的C语言工具,支持多种编码和连接方式。重点讲解了Linux和Windows的安装步骤,以及在Ubuntu搭建DNS服务器后的服务端和客户端配置。还涵盖了DNS隧道的原理、常见问题解决方案及其实战应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Iodine介绍

Iodine,直译过来就是碘。碘元素在元素周期表中序号为53,正好是DNS使用的端口号。
该工具用于建立DNS隧道,其分为服务端和客户端两部分(也常称为主控端和被控端),客户端对服务器端发送DNS请求建立连接。这两部分都是用C语言编写,支持EDNS、base32、base64、base128等多种编码规范。
DNS隧道常分为中继直连两种类型,中继是指DNS通过外网DNS服务器转发到服务端,直连是指直接通过服务端IP进行连接。Iodine对这两种类型都有支持。同时,Iodine支持多种DNS查询类型,包括NULL,TXT,SRV,MX,CNAME,A等。
iodine原理:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接,处于同一局域网(可以通过ping命令通信),在客户端和服务端之间建立连接后,客户机上会多出一块 “dns0” 的虚拟网卡。
DNS隧道流程:iodine客户端 -> DNS服务商 -> iodined服务端,由于客户端和服务端都在一个局域网,那么只需要直接访问服务端,如 3389 (直接使用 mstsc) 、22 (ssh 建立连接) 。
与同类工具相比,iodine具有如下几种特点:

->不会对下行数据进行编码
->支持多平台(Linux、Windows、MacOS)
->支持16个并发连接
->支持强密码机制
->支持同网段隧道IP低质(不同于服务器——客户端网段
->支持多种DNS记录类型
->提供了丰富的隧道质量检测措施

Iodine下载与安装

linux版本可以从github上clone相应库
https://github.com/yarrick/iodine
或者是从gitee上的镜像库进行克隆
https://gitee.com/mirrors_yarrick/iodine
然后进入安装的克隆的路径中使用make install命令对二进制文件进行编译。
如果在Win上的话,可以直接下载应用,但是需要先下载tap支持虚拟网卡。
tap:http://www.qudong51.net/qudong/981.html
Iodine: http://code.kryo.se/iodine/
然后在cmd上运行(需要使用管理员权限)

Iodine的使用

服务端

首先需要在服务端配置DNS服务器,具体方法见Ubuntu搭建DNS服务器。这里使用的服务器是Ubuntu 20.0.4版本。
接着使用命令行
sudo iodined -f -DD -c 192.168.206.130 zjytest1.com
这里192.168.206.130是新建的dns0网卡ip,zjytest1.com是DNS服务器中记录的域名。
随后键入DNS隧道的密钥
在这里插入图片描述

客户端

在客户端,键入命令行
sudo iodine -f -r -T A 192.168.1.110 zjytest1.com
这里使用的是直连模式,192.168.1.110是服务器端在内网的IP地址,-T A代表查询类型为A。
在这里插入图片描述
更多使用方法可以看官方文档

问题记录

1、无法连接到服务器端(已解决)
解决方法:第一步,检查服务器端与客户端是否能互ping。如果不能,解决互ping的问题。
第二步,检查服务器端的DNS服务(这里是bind9)是否正常。可以通过 host <域名>完成。如果正常的话,结果如下
在这里插入图片描述
如果不是,请检查bind配置是否正确。如配置无误,请删除/etc/resolv.conf中所有内容。
一般到这里,基本都可以正常连接。

2、如何利用DNS隧道(已解决)
理论上,在DNS隧道建立后,可以通过ssh进行远程控制,也可以通过nc发送文件,但是,出现端口无法连接的问题。
简单点说,就是我傻了。Iodine本身的功能仅仅是建立DNS隧道,绕过网关的防火墙,但是对于隧道的利用方式完全由使用者自己决定。所以,只要在服务端打开ssh,然后使用scp传输文件就可以了(傻球了,这种小事花了一天才想明白)。

### DNS隧道技术原理 DNS隧道是一种利用域名系统(DNS)协议在网络上传输数据的方式。其核心在于将其他类型的流量伪装成合法的DNS请求和响应,从而绕过网络安全设备的检测[^2]。 #### 数据封装过程 在DNS隧道中,用户的数据被分割并编码为DNS查询的形式发送给远程服务器。这些查询通常会触发一系列子域名称解析操作,而实际的有效载荷则隐藏于这些子域名称之中。当目标服务器接收到此类请求后,它能够解码其中的信息并将之还原为原始形式再加以处理或转发回客户端[^3]。 ### 实现方式 实现DNS隧道需要以下几个关键要素: 1. **自定义域名与公网服务器配置** 需要拥有一个可控制的域名以及相应的公网服务器来接收来自内部网络发起的所有特殊构造过的DNS请求。例如,在案例中提到的是`matrika.cn`这个域名绑定到了IP地址`47.96.116.171`上,并设置了特定的TXT记录用于支持这种特殊的通信模式。 2. **软件工具的选择** 使用专门设计用来创建DNS隧道的应用程序如`iodine`等可以帮助简化整个设置流程。这类工具有助于自动完成从本地机器向外部互联网资源传递信息的任务,同时也提供了加密选项以保护敏感资料免受窃听威胁。 ```bash # 在公网服务器运行服务端 sudo iodined -f -c -P yourpassword 10.0.0.1 matrika.cn # 在CentOS内网安装iodine yum install epel-release -y && yum install iodine -y ``` 3. **测试验证功能正常运作** 确认所有的组件都已经正确部署完毕之后,可以通过简单的命令行指令来进行初步的功能检验,比如尝试ping某个已知应该通过该渠道可达的目标主机名或者执行基本文件下载动作等等。 ### 安全风险 尽管DNS隧道提供了一种有效手段让受限环境下的计算实体突破常规防护机制获取更广泛的连接能力,但它同样带来了显著的安全隐患: - **滥用作为恶意活动载体**: 攻击者可能利用此途径实施诸如APT攻击中的C&C通讯、数据渗漏等活动。 - **规避传统防御体系监测**: 大多数现有的入侵检测/预防解决方案难以识别经过精心掩饰后的非法行为流经标准允许开放的服务接口——即此处所讨论的DNS通道。 - **增加管理复杂度**: 组织为了防范上述情况发生不得不投入额外精力去监控分析海量日志寻找可疑迹象, 同时还要权衡业务连续性和用户体验之间的平衡点[^1]. 综上所述,DNS隧道虽然具备强大的功能性优势但也伴随着不容忽视的风险挑战.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值