DNS 隧道免费上网教程之 iodined

旧博客迁移文章,内容可能已失去价值,仅为留念,做了简单重新排版,勉强可看。

实现免费上网一直是鄙人的终极奋斗目标

近日,在下听说了一种可以通过建立 DNS 隧道免费上网的方式,当然这项技术其实早就有了,只是本人见识短,目光浅,如今才真正知晓。

背景

CMCC、ChinaNet等公共热点一般设置了访问控制,阻止了网络访问,但是对于DNS查询没有限制。因此可以利用DNS查询跟外界服务器沟通,绕过账号认证。

原理

在 Internet 中运行一台假的 DNS 服务器,通过 DNS 查询实现被限制访问 Internet 的主机与该服务器的通讯。(本人的理解很粗浅)

实操

前提条件

  1. 拥有一个具有控制权的域名
  2. 一台 运行于公网的服务器

准备工作:

  1. 下载 iodine 安装包 http://code.kryo.se/iodine/
  2. 下载 openvpn window 版

本次搭建环境为 64 位 CentOS6.5 服务端和 Windows8 客户端

搭建步骤

服务端搭建

1. 安装iodine
 tar -zxvf iodine-0.7.0.tar.gz  
 cd iodine-0.7.0  
 make & make install
2. 设置域名的DNS 假设你的域名为 test.com,你的服务器为192.168.1.10

如果你对DNS服务器具有控制权(一般没有),你可以直接在DNS服务器添加一条NS记录,使iodined.test.com192.168.1.10 来解析

如果你对 DNS 服务器没有控制权,那么也很简单,可以添加一条A记录和一条NS记录

A记录:iodine.test.com 192.168.1.10

NS记录: iodined.test.com iodine.test.com

~~以下是以万网为例的截图 ~~

3. 运行iodined
iodined -f -c -P 密码 10.0.0.1 iodined.test.com

注意P要大写,后面接要设置的密码,10.0.0.1是设置的DNS隧道的ip网段,可以改为其它网段,运行成功之后,如下:

Opened dns0  
Setting IP of dns0 to 10.0.0.1  
Setting MTU of dns0 to 1130  
Opened IPv4 UDP socket  
istening to dns for domain iodined.test.com

客户端搭建

1. 安装TAP Virtual Ethernet Adapter虚拟网卡驱动

下载的 openvpn 不需要最新版,本人下载最新版之后测试不成功。

其实我们只是需要安装它的 TAP Virtual Ethernet Adapter 模块,安装时可以只勾选该模块,这里我使用的是 6kuaibo 里的虚拟网卡模块。

2. 客户端的 iodine 基本不用安装,解压即可。

以管理员身份运行cmd,cd到iodine目录,执行以下命令

iodine -f -r -P 密码 192.168.1.10 iodined.test.com

注意服务端运行的是 iodined,而客户端运行的是 iodine。运行结果如下:

Opening device 本地连接 3  
Opened IPv4 UDP socket  
Opened IPv4 UDP socket  
Opened IPv4 UDP socket  
Sending DNS queries for iodined.test.com to 192.168.1.10  
Autodetecting DNS query type (use -T to override).  
Using DNS type NULL queriesRetrying version check…  
Retrying version check…  
Version ok, both using protocol v 0x00000502. You are user #2  
Enabling interface ‘本地连接 3′  
Setting IP of interface ‘本地连接 3′ to 10.0.0.2 (can take a few seconds)…

Server tunnel IP is 10.0.0.1  
Skipping raw mode  
Using EDNS0 extension  
Retrying upstream codec test…  
Switching upstream to codec Base128  
Server switched upstream to codec Base128  
No alternative downstream codec available, using default (Raw)  
Switching to lazy mode for low-latency  
Server switched to lazy mode  
Autoprobing max downstream fragment size… (skip with -m fragsize)  
768 ok.. 1152 ok.. …1344 not ok.. …1248 not ok.. …1200 not ok.. 1176 ok..  
1188 ok.. will use 1188-2=1186  
Setting downstream fragment size to max 1186…  
Connection setup complete, transmitting data.

现在 ping 10.0.0.1 如果能 ping 通,就大功告成了!

最后在服务器里搭建一个代理,就可以通过 DNS 隧道上网了。

至于 Android 端,需要有 root 权限,执行的命令和 Windows 是一样的。

注意:设置代理的时候要把“终端模拟器”排除在外,比如我使用的是 shadowsocks,不能使用全局代理,要在使用分应用代理,开启绕行模式,并勾选终端模拟器。

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 3489 天前,文中所描述的信息可能已发生改变,请谨慎使用。

Comments