2011年6月30日星期四

DNS 隧道&有DNS的地方就能上网(用DNS隧道实现免费上网)

今天在 greader 上看到这么一篇,用 DNS 隧道实现免费上网。我的思绪猛然回到去年去新西兰度假的日子。
有 那么几天,我们在惠灵顿的海边山顶租了个屋子,一切都很舒服,但是不能上网。甚至于附近连 wifi 信号都收不到,想”借用”一下别人的 wifi 热点都不成。我顶着海边的狂风在院子里竖起天线,捕捉着周围微弱的信号,最终未果。然后转战屋里的有线电视。我发现和国内的有线电视一样,机顶盒是接有网 线的。也就是说,物理上,存在一条链路接入了互联网。但是我插上电脑后,发现 ip 包根本发不出去。不过,好似有个 DNS 服务是可以用的。
当时也没多想,只是觉得有办法可以利用一下。不过隔天就搬走了,没有深入下去。今天回味一下,感觉的确可以利用 DNS 服务和外部建立连接。当然,一开始就需要在外界把接应的程序程序搭建好。
原 理很简单,你在做 DNS 查询的时候,如果查的域名在 DNS 服务器本机的 cache 中没有,它就会去互联网上查询,最终把结果返回给你。如果你在互联网上有台定制的服务器。只要依靠 DNS 的这层约定,就可以交换数据包了。从 DNS 协议上看,你是在一次次的查询某个特定域名,并得到解析结果。但实际上,你在和外部通讯。你没有直接连到局域网外的机器,因为网关不会转发你的 IP 包出去。但局域网上的 DNS 服务器帮你做了中转。这就是 DNS Tunnel 了。
我觉得有趣,就按文章所述做了试验。
这 需要一个自己的域名,一台运行在互联网上的机器可以自由安装软件。这些都有。那个假的 DNS 是由 OzymanDNS 提供的。不过今天我搜到的 OzymanDNS 网站上已经没有了下载包。好在 google 很强大,这个 2004 年编写的小 perl 程序,并不难找到。
不过我反复试验也没有成功,按文章所述的,利用 ssh 在本机上的 proxycommand 我怎么都无法通过 dnstunnel 连上主机。估计是我哪里配置的不对吧。不过接下来 google 到了更好的选择。那就是 iodine 这个小玩意。非常简单的就装好了。第一次运行发现找不到 tun 设备。看来需要手工建一个。在 linux 上可以自己来: mkdir /dev/net ; mknod /dev/net/tun c 10 200 这样即可。
windows 版麻烦一些,需要装软件。安装个 openvpn 包里的 TAP driver 就行了。
然后利用 iodine 可以利用 dns tunnel 建立起虚拟网。接下来可以方便的用 ssh -D 建起 socks5 了。不过我觉得这个都是多余的。为了节约 dns tunnel 上的带宽,我直接建了个 socks5 服务器。就是用的我前段写的一篇 blog 中提到的 ssocks 。同样需要修改一下,把监听端口绑定在 10.0.0.1 上。
最后,居然没遇到什么麻烦就接通了。我想我所在网络出口上的 dns 服务器肯定觉得很疼。这真是一个超级淡疼的 tunnel 方案啊。嗯,可以留作日后翻墙的备用方案,以备不时之需。
ps. 好想知道到处都有的诸如 CMCC 的 wifi 热点能不能用。下次到商业区别忘记试试看。
原文http://blog.codingnow.com/2011/06/dns_tunnel.html

有DNS的地方就能上网
大多数机场、酒店之类场所,当你输入一个网址比如www.google.com时,会弹出一个页面要你输入帐号密码才能上网。这个时候DNS能正确解析,但是上网要付费认证。
可以通过DNS隧道来实现免费上网。具体做法是:
(1)找一个支持DNS解析的域名,现在这类免费域名很多,比如tk的、co.cc的。假设该域名是abc123.tk
(2)在tk的注册机构里,设置abc123.tk的NS服务器为你自己的主机(最好是Linux VPS),例如:
abc123.tk.     IN  NS  ns.abc123.tk.
ns.abc123.tk.  IN  A   74.81.81.81
(3)在74.81.81.81上,以root身份运行一个Perl脚本(这个脚本来自Dan Kaminsky的OzymanDNS包):
./nomde.pl -i 0.0.0.0 abc123.tk
上述脚本会侦听在UDP 53端口,接受DNS请求,并且只解析abc123.tk域。
(4)在客户机上(要求有ssh,最好是Linux系统),运行如下命令:
ssh -ND 7070 -o ProxyCommand=”./droute.pl sshdns.abc123.tk” user@localhost
上述ssh命令,-ND 7070表示在本机打开7070的socks 5代理端口。droute.pl是DNS隧道的客户端工具,同样来自于OzymanDNS包。sshdns是固定的主机名,加在域名abc123.tk前 面。user是你在74.81.81.81上的登录名字,@localhost是固定的,不需要改(因为隧道过去后,就是74.81.81.81本机)。
运行上述ssh命令后,会提示输入密码。输入正确密码后,就和远程主机建立了ssh连接,获取到一个SSH终端。并且,在本机打开了7070的socks 5代理端口。配置浏览器使用这个代理端口,开始享受免费冲浪吧!

原文http://www.nsbeta.info/archives/96

来源:http://igfw.tk/archives/3587

[通吃 http://like-chilli.blogspot.com]


没有评论:

发表评论