项目简介
本项目名为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】