项目简介
本项目名为iodine,是一款能让用户将IPv4数据通过DNS服务器进行隧道传输的软件。在互联网访问被防火墙限制,但DNS查询被允许的场景下,该工具具有重要的实用价值。
项目的主要特性和功能
- 跨平台支持:在Linux(arm、ia64、x86、AMD64和SPARC64)、FreeBSD(ia64、x86)、OpenBSD(x86)、NetBSD(x86)、MacOS X(ppc和x86)和Windows等多种系统测试,易移植到有TUN/TAP隧道支持的类Unix系统。
- 自动特性检测:在Linux系统中,SELinux和systemd支持等可选特性会在相关头文件存在时自动启用。
- 多协议支持:服务器默认监听IPv4和IPv6请求,客户端可使用IPv4或IPv6名称服务器连接,支持多种DNS请求类型,自动检测并使用“最佳”请求类型。
- 灵活的配置选项:可通过命令行参数指定多种配置,如指定端口、强制使用特定编码、限制DNS主机名长度等。
- 多域名处理:一个iodine服务器能处理多个域名,支持使用通配符匹配域名模式。
安装使用步骤
编译
- 复制项目源码。
- 若编译服务器和客户端二进制文件,运行make。
- 若要将二进制文件和手册页复制到目标目录,运行make install。
- 若要编译并运行单元测试(需check库),运行make test。
快速开始
- 服务器端:运行./iodined -f 10.0.0.1 test.com,若已使用10.0.0.0网络,可换用其他内部网络;输入密码。
- 客户端:运行./iodine -f -r 192.168.0.1 test.com,将192.168.0.1替换为服务器的IP地址;输入相同密码。此时客户端隧道IP为10.0.0.2,服务器为10.0.0.1,可尝试通过隧道相互ping通。
实际使用
服务器端
- 需控制一个真实域名(如mydomain.com),并在有公共IP地址的服务器上运行iodined。若服务器已运行DNS程序,需更改其监听端口,再使用iodined的-b选项进行DNS请求转发;或从DNS服务器将子域名转发到运行在不同端口(-p)的iodined。
- 将子域名(如t1.mydomain.com)委托给iodined服务器,若使用BIND,需在区域文件中添加相应记录。
- 重新加载或重启名称服务器程序。
- 启动iodined,第一个参数为隧道内的IP地址,第二个参数为分配的域名,可使用-f选项使其在前台运行,可通过命令行(-P pass)或启动后输入密码。
客户端
启动iodine,第一个参数为本地中继DNS服务器(可选),第二个参数为使用的域名。若DNS查询允许访问任何计算机,可直接提供iodined服务器的地址作为第一个参数;若要强制使用DNS隧道,可使用-r选项。输入与服务器相同的密码,可使用-f选项使其在前台运行。
不同系统运行说明
Android
- 获取Android设备的root权限。
- 为特定的Android内核找到或构建兼容的tun.ko。
- 将tun.ko和iodine二进制文件复制到设备:adb push tun.ko /data/local/tmp adb push iodine /data/local/tmp adb shell su cd /data/local/tmp chmod 777 iodine
- 运行iodine(参考手册页获取参数)。
Windows
- 安装TAP驱动,从https://openvpn.net/index.php/open-source/downloads.html 下载OpenVPN TAP驱动(Tap - windows部分),建议使用NDIS5版本。
- 至少安装一个TAP32接口,可使用OpenVPN bin目录中的脚本添加或删除。若安装多个,使用-d指定要使用的接口。
- 确保要使用的接口未设置默认网关。
- 以管理员身份运行iodine/iodined(根据用户权限而定)。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】