« 使用 luajit 的 ffi 绑定 zeromq | 返回首页 | 结组攀爬天柱岩(一) »

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 热点能不能用。下次到商业区别忘记试试看。

Comments

我以前玩过,其实就是搭建一个开放了53端口使用udp通信的vpn,我是用openvpn测试的,发现当时大量无线热点都固定了dns,无法修改了的
你好,我有个问题咨询下,这种情况下,终端用户访问的真实地址等数据是怎么发出去的?是通过SSH加密的DNS数据报文中某个字段添加真实的数据么?这个方案是不是通过SSH加密后伪造DNS数据包,端口号还是53?
http://www.guanwei.org/post/applicationsecurity/07/dns-tunnel-dns2tcp.html
呵呵,我也凑个热闹,沈阳大学/医科大学等多个CMCC-EDU/CMCC热点测试成功,不过不是每一个区域都可以,这个和厂商设备配置严谨性有关系(移动已经重视)。 顺便说明一下:测试中本文中涉及的工具。 PS:关于CMCC下存在DNS Tunnel的问题在2年前就出现了,只是一直在内部培训时我们才会演示。
长春理工大学内CMCC和ChinaNet热点测试失败,不允许53端口连接非指定IP地址的DNS服务器。同时Ping Tunnel、Telnet Tunnel测试失败 是否可以把官方DNS服务器当作跳板,让其完成数据转发,进而规避IP地址限制?貌似loopc的VPN软件就是这么做的。
云风: “用 DNS 隧道实现免费上网”这篇文章是转自你的同事“风河”的博客上的,哈哈。
某些的地方的移动 联通 的 wifi热点 53 udp端口是通的。 直接用openvpn 这样可以走udp端口的 vpn 就搞定了。 读书的时候,直接关闭了网页认证。 直接客户端,还能更好的监控,真绝·
留言失败了??测试成功了 ~哈哈 iodine很好用啊 chinaunicom worked!
试了一下iodine 哈哈 效果刚刚的 话说我们这里晚上熄灯没了网线还这难受呢...这回好了 嘘 chinaunicom works!
我爱风风 Posted by: 我爱风风 | (6) June 28, 2011 12:48 AM 风风就是喜欢学习,喜欢折腾,喜欢蛋疼,我喜欢,我仰慕。 Posted by: 我爱风风 | (5) June 28, 2011 12:48 AM 我擦,风哥的男粉丝可真疯狂 得截图留个念
云风是中南工大的吧,说起来creke是你的学弟了、我也算是
这个,太神了啊啊啊啊啊~~~~~~~~~~~~~~神啊
ip包发不出去?dns怎能发出去呢?
这个有意思。。必须记下来。。回头研究一下
这也行!! 那你千万别再推广了,推广了肯定就会不行了
如果CMCC也能用这种dns方式,就爽呆了
如果CMCC能这样用,就爽呆了。
我爱风风
风风就是喜欢学习,喜欢折腾,喜欢蛋疼,我喜欢,我仰慕。
在机场什么的需要 authentication 才能用的 wifi (可以取得 ip address,但HTTP会被重定向到登陆页面), 貌似可以用这个方法来上网? 另外楼上提的 ping tunnel 似乎也不错,这里有一个: http://www.cs.uit.no/~daniels/PingTunnel/
cmcc的在N年前貌似就封掉了.. btw: error when use typekey login Error Site is not registered: http://linode.codingnow.com/cgi-bin/mt/mt-comments.cgi?__mode=handle_sign_in&static=1&entry_id=675 Go Back
到了关键时刻,如果太多的人使用,会让dns超载,影响很多人。 不如搞ping tunnel吧。
这DNS真的好疼啊。。。。。。。。。。。

Post a comment

非这个主题相关的留言请到:留言本