利用dns上网和利用iodine翻墙

原文:http://briteming.blogspot.com/2012/02/dnsiodine.html

“用 DNS隧道实现免费上网”这篇文章其实是转载自 文章"有DNS的地方就能上网"(http://www.nsbeta.info/archives/96),同时云风进行了一些改进后的 方案:DNS隧道( http://blog.codingnow.com/2011/06/dns_tunnel.html)。云风给出的改进方案中,没有使用风河中提到的 OzymanDNS,而是使用了另外一个小玩意儿iodine。云风也并没有提供很方便的设置代码,只是用文字将涉及到的相关问题和技巧说明了下。
翻到iodine的主页,查看其Wiki上的How to Setup,文中的The quick way讲的很清楚。只需将其下下来,在服务器端运行iodined,在客户端运行iodine就行了。但其实它还需要你有一个域名,能够设置域名的DNS之类的。讲的最清楚的一篇文章,当属How to Setup末尾提供的一个链接:Guide for debian server and win32 client
要进行这项工程,你需要一台能够让自己自由安装软件的服务器,和一个能够设置NS记录的域名。对于服务器,iodine很强大,支持各种各样的系统:FreeBSD、Linux、Mac OS X、NetBSD、OpenBSD以及Windows。在Linux下,编译安装就行。在Mac OS X下,还需要安装一个TunTap,很简单,下载下来一路点下去就行。在Windows下,需要安装OpenVPN的TAP Virtual Ethernet Adapter模块。
下面以Ubuntu或者Debian作为服务器,Windows作为客户机,说明如何配置。
1. 设置服务器
在服务器上,只需安装iodine这个小工具就可以了。如果你的服务器系统是最新版本的Ubuntu,即Ubuntu Natty,可以这样通过添加源的方式来安装iodine:
1
2
3
4
5
6
cat >> /etc/apt/sources.list < <END
deb http://archive.ubuntu.com/ubuntu natty main restricted universe
END
apt-get update
apt-get -t natty install iodine
sed -i '$d' /etc/apt/sources.list
在Debian上可以这样安装:
1
2
3
4
5
6
cat >> /etc/apt/sources.list < <END
deb http://ftp.debian.org/debian sid main
END
apt-get update
apt-get -t sid install iodine
sed -i '$d' /etc/apt/sources.list
2. 设置域名的DNS
首先需要设置域名服务器。
其次,在域名下面添加一个A记录,A记录的名字可以任意,如server.urdomain.com,A记录的值为你VPS服务器的IP地址。
最后,再添加一个NS记录,这个NS的名字可以任意,比如iodine.urdomain.com,NS记录的值为你上面添加的A记录的名字,即server.urdomain.com
3. 在你VPS服务器上运行iodined程序
通过SSH登入你的服务器,运行iodined这个程序:
iodined -c -f 10.0.0.1 -P password iodine.urdomain.com
上 面这段代码的10.0.0.1 IP地址是你设置的虚拟局域网的IP地址,如果你所在的局域网的网段刚好也在10.0.0.1,可以换一个网段,比如172.16.0.0。其中的 password是你在服务器端自己设定的一个密码,客户端登入的时候需要用到这个密码。iodine.urdomain.com则是你后面添加的那个 NS记录。
运行上面的代码之后,程序会输出如下信息,表示你的服务器端成功运行iodine小程序:
1
2
3
4
5
OOpened dns0
Setting IP of dns0 to 10.0.0.1
Setting MTU of dns0 to 1130
Opened UDP socket
Listening to dns for domain iodine.yourdomain.com
4. 设置客户端
接下来就要用客户机去链接服务器了。无论你的客户机是什么系统,只需在这里把iodine下下来就行了。在Linux下,需要自己编译安装一下即可运行。在Mac下,需先安装TunTap这个小工具,再编译安装即可运行。在Windows下,需安装OpenVPN的Tap模块。下面以Windows客户端做说明。
OpenVPN官网下载最新版本的OpenVPN,在安装的时候只勾选TAP Virtual Ethernet Adapter这个模块。
5. 通过虚拟内网地址连接服务器
下载最新版本的iodine Windows客户端。解压后,通过命令行(cmd程序。如果你的系统是Windows XP,直接打开cmd即可。如果你的是Windows 7系统,需要以管理员的身份运行这个程序)进入这个目录。然后,通过以下这个命令运行这个程序:
iodine -f -P password server_ip server.urdomain.com
上面的password是你在服务器端运行iodined这个程序时设置的密码,server_ip是你的VPS服务器的ip地址,server.urdomain.com是你设置的NS记录的域名。运行以上命令后,你会看到类似下面的输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Opening device Local Area Connection 2
Opened UDP socket
Opened UDP socket
Opened UDP socket
Sending DNS queries for iodine.cwaffles.co.cc to 74.63.253.53
Autodetecting DNS query type (use -T to override).
Using DNS type NULL queries
Version ok, both using protocol v 0x00000502. You are user #0
Enabling interface 'Local Area Connection 2'
Setting IP of interface 'Local Area Connection 2' to 10.0.0.2 (can take a few seconds)...
 
Server tunnel IP is 10.0.0.1
Testing raw UDP data to the server (skip with -r)
Server is at 74.63.253.53, trying raw login: OK
Sending raw traffic directly to 74.63.253.53
Connection setup complete, transmitting data.
上面的74.63.253.53是你服务器的ip地址。
现在,你可以测试下是否能够Ping同10.0.0.1这个服务器了:
ping 10.0.0.1 /t
如果Ping通了,一切顺利。
现在,即使你的电脑打开浏览器的时候跳出让你输入密码认证的页面,即使你不输入认证,你也可以上网了。前提是,你还需要进一步的设置。
6. 通过虚拟内网地址登入服务器
如果你以前用过SSH连接代理服务器,并拿它来翻墙,接下来的设置很简单,因为两者是一样的。但是,如果你以前连翻墙都不会,也不会通过SSH登入服务器,那就有点麻烦了。本文不再详述这些设置,只给出几个客户端和浏览器插件:
1). 所连接服务器的IP地址:10.0.0.1
你可以通过SSH登入10.0.0.1这个服务器了,这个服务器跟你的VPS服务器是一样的,只不过是以不同的地址登入。你原有的是外网IP地址,现在多了一个10.0.0.1内部地址。登入的用户名和密码还是跟你原来登入VPS的用户名和密码一样的。
2). 连接服务器的客户端:PuTTYKiTTYTunnelier
推荐使用Tunnelier,设置代理端口非常的方便。
3). 浏览器的代理插件
你可以在浏览器下设置代理类型,代理IP地址和相应的端口。也可以使用第三方插件设置代理,如Chrome的Switchy和Firefox的AutoProxyFoxyProxy

发表评论