对成年人来说,经常回忆往事,品位细节,能让人更有想象力…

有DNS的地方就能上网

技术文档 29585浏览 0评论

这个小技巧的应用场景是:在机场或者酒吧里,当你输入一个网址比如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). 连接服务器的客户端:PuTTYKiTTYTunnelier

推荐使用Tunnelier,设置代理端口非常的方便。

3). 浏览器的代理插件

你可以在浏览器下设置代理类型,代理IP地址和相应的端口。也可以使用第三方插件设置代理,如Chrome的Switchy和Firefox的AutoProxyFoxyProxy

原文链接

转载请注明:自由的风 » 有DNS的地方就能上网

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (15)

  1. 你好,我用CENTOS设置IODINED的时候无论我设置什么IP都会提示:
    iodined -c -f 192.168.0.2 -P 123456 dns.zhtube.com
    Opened dns0
    Setting IP of dns0 to 192.168.0.2
    Setting MTU of dns0 to 1130
    iodined: bind: Address already in use
    请问这样的问题该怎么解决呢?
    从官网上下载了编译的版本,也是出现问题,
    iodine 192.168.0.2 -P 123456 zhtube.com -T 4.2.2.4
    Opened dns0
    Opened UDP socket
    Sending DNS queries for zhtube.com to 192.168.0.2
    Autodetecting DNS query type (use -T to override)………………
    iodine: No suitable DNS query type found. Are you connected to a network?
    iodine: If you expect very long roundtrip delays, use -T explicitly.
    iodine: (Also, connecting to an “ancient” version of iodined won’t work.)
    能帮我解答一下吗?谢谢

    小白2011-07-14 21:16 回复
  2. iodine是YUM下载安装的,IODINED是官网下载编译的,搞反了,不好意思.

    小白2011-07-14 21:18 回复
  3. 小白 :
    iodine是YUM下载安装的,IODINED是官网下载编译的,搞反了,不好意思.

    没有解决啊,我是说上网那两个描述反了,请问你有解决办法吗?

    小白2011-07-14 22:58 回复
    • @小白
      我也遇到一样的问题 请问同学你解决了吗?

      tort2012-05-21 13:44 回复
    • @小白
      装个OPENVPN然后把端口改成53,就能使用的了。

      小白2012-06-05 20:54 回复
  4. 问下,我们学校提供的dns是内网的,也是一样设置吗??那服务器要学校服务器,还是外面服务器都行吗????

    yanyucheng2011-07-28 14:00 回复
    • 具体你可能需要测试一下,我没有测试过。不好意思。

      自由的风2011-07-29 09:52 回复
  5. 或许这种方法以后特殊情况很有用 不过
    我的VPS是Windows 的 悲剧了 怎么弄?

    laiyingdong2011-08-21 21:48 回复
  6. 什么原理?

    荒野无灯2011-09-14 17:05 回复
  7. 我没有vps 但是我有一台在内网的ubuntu的电脑,行不行?需要映射什么端口?53?

    yAnG2012-02-09 11:14 回复
  8. 你好,我有个问题咨询下,这种情况下,终端用户访问的真实地址等数据是怎么发出去的?是在DNS数据报文中某个字段添加真实的数据么?

    aviton2012-09-04 17:26 回复