有DNS的地方就能上网
这个小技巧的应用场景是:在机场或者酒吧里,当你输入一个网址比如www.google.com时,浏览器会弹出一个页面,要你输入账号和密码后才能上网。也即,你上网需要付费认证。
Google Reader 上分享的最广的“用DNS隧道实现免费上网”这篇文章其实是转载自风河博客上的文章“有DNS的地方就能上网”,同时云风进行了一些改进后的方案:DNS隧道。云风给出的改进方案中,没有使用风河中提到的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.helishi.net,A记录的值为你VPS服务器的IP地址。
最后,再添加一个NS记录,这个NS的名字可以任意,比如iodine.helishi.net,NS记录的值为你上面添加的A记录的名字,即server.helishi.net。
3. 在你VPS服务器上运行iodined程序
通过SSH登入你的服务器,运行iodined这个程序:
iodined -c -f 10.0.0.1 -P password iodine.helishi.net
上面这段代码的10.0.0.1 IP地址是你设置的虚拟局域网的IP地址,如果你所在的局域网的网段刚好也在10.0.0.1,可以换一个网段,比如172.16.0.0。其中的 password是你在服务器端自己设定的一个密码,客户端登入的时候需要用到这个密码。iodine.helishi.net则是你后面添加的那个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.helishi.net
上面的password是你在服务器端运行iodined这个程序时设置的密码,server_ip是你的VPS服务器的ip地址,server.helishi.net是你设置的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). 连接服务器的客户端:PuTTY、KiTTY和Tunnelier
推荐使用Tunnelier,设置代理端口非常的方便。
3). 浏览器的代理插件
你可以在浏览器下设置代理类型,代理IP地址和相应的端口。也可以使用第三方插件设置代理,如Chrome的Switchy和Firefox的AutoProxy或FoxyProxy。
就我测试,速度极慢,连拨号都不如
安照这个原理,是不是能实现以下目的:
家庭有线上网,比如电信的,只要存在硬件连线,即使不拨号(或者帐号到期),仍能用这个方法上网?
安装这个原理,是不是能实现以下目的:
家庭有线上网,比如电信的,只要存在硬件连线,即使不拨号(或者帐号到期),仍能用这个方法上网?
不清楚,需要能网络解析DNS服务器
好文。