littlebot
Published on 2025-04-09 / 0 Visits
0

【源码】基于C语言的IP数据DNS隧道工具

项目简介

本项目名为iodine,是一款能让用户将IPv4数据通过DNS服务器进行隧道传输的软件。在互联网访问被防火墙限制,但DNS查询被允许的场景下,该工具具有重要的实用价值。

项目的主要特性和功能

  1. 跨平台支持:在Linux(arm、ia64、x86、AMD64和SPARC64)、FreeBSD(ia64、x86)、OpenBSD(x86)、NetBSD(x86)、MacOS X(ppc和x86)和Windows等多种系统测试,易移植到有TUN/TAP隧道支持的类Unix系统。
  2. 自动特性检测:在Linux系统中,SELinux和systemd支持等可选特性会在相关头文件存在时自动启用。
  3. 多协议支持:服务器默认监听IPv4和IPv6请求,客户端可使用IPv4或IPv6名称服务器连接,支持多种DNS请求类型,自动检测并使用“最佳”请求类型。
  4. 灵活的配置选项:可通过命令行参数指定多种配置,如指定端口、强制使用特定编码、限制DNS主机名长度等。
  5. 多域名处理:一个iodine服务器能处理多个域名,支持使用通配符匹配域名模式。

安装使用步骤

编译

  1. 复制项目源码。
  2. 若编译服务器和客户端二进制文件,运行make
  3. 若要将二进制文件和手册页复制到目标目录,运行make install
  4. 若要编译并运行单元测试(需check库),运行make test

快速开始

  1. 服务器端:运行./iodined -f 10.0.0.1 test.com,若已使用10.0.0.0网络,可换用其他内部网络;输入密码。
  2. 客户端:运行./iodine -f -r 192.168.0.1 test.com,将192.168.0.1替换为服务器的IP地址;输入相同密码。此时客户端隧道IP为10.0.0.2,服务器为10.0.0.1,可尝试通过隧道相互ping通。

实际使用

服务器端

  1. 需控制一个真实域名(如mydomain.com),并在有公共IP地址的服务器上运行iodined。若服务器已运行DNS程序,需更改其监听端口,再使用iodined-b选项进行DNS请求转发;或从DNS服务器将子域名转发到运行在不同端口(-p)的iodined
  2. 将子域名(如t1.mydomain.com)委托给iodined服务器,若使用BIND,需在区域文件中添加相应记录。
  3. 重新加载或重启名称服务器程序。
  4. 启动iodined,第一个参数为隧道内的IP地址,第二个参数为分配的域名,可使用-f选项使其在前台运行,可通过命令行(-P pass)或启动后输入密码。

客户端

启动iodine,第一个参数为本地中继DNS服务器(可选),第二个参数为使用的域名。若DNS查询允许访问任何计算机,可直接提供iodined服务器的地址作为第一个参数;若要强制使用DNS隧道,可使用-r选项。输入与服务器相同的密码,可使用-f选项使其在前台运行。

不同系统运行说明

Android

  1. 获取Android设备的root权限。
  2. 为特定的Android内核找到或构建兼容的tun.ko
  3. tun.koiodine二进制文件复制到设备: adb push tun.ko /data/local/tmp adb push iodine /data/local/tmp adb shell su cd /data/local/tmp chmod 777 iodine
  4. 运行iodine(参考手册页获取参数)。

Windows

  1. 安装TAP驱动,从https://openvpn.net/index.php/open-source/downloads.html 下载OpenVPN TAP驱动(Tap - windows部分),建议使用NDIS5版本。
  2. 至少安装一个TAP32接口,可使用OpenVPN bin目录中的脚本添加或删除。若安装多个,使用-d指定要使用的接口。
  3. 确保要使用的接口未设置默认网关。
  4. 以管理员身份运行iodine/iodined(根据用户权限而定)。

下载地址

点击下载 【提取码: 4003】【解压密码: www.makuang.net】