odine可以通過一臺DNS服務器制造一個IPv4數據通道,這個工具可幫助滲透測試人員用于穿越防火墻等情景。這款工具運行于 Linux, Mac OS X, FreeBSD, NetBSD, OpenBSD和Windows,并需要一個TUN/TAP設備。同時對帶寬也有一定要求。
特性:
高性能
跨平臺
安全性
安裝簡單
以前寫過這篇文章,對DNS tunnel進行了詳細介紹,并附了DNS2tcp工具的使用方法,詳見:[DNS tunnel(DNS隧道)技術應用工具-DNS2tcp的使用方法及原理] 。不過那個工具在windows下好像不太好用,我就又找了一個工具,叫iodine。
官方網站:http://code.kryo.se/iodine/
官方下載地址:http://code.kryo.se/iodine/iodine-0.7.0-windows.zip
此外,在服務器及客戶端都需要安裝openVPN。下載地址:http://www.49028c.com/softs/120505.html (Win7 64位測試有效)。
代理軟件:ccproxy(代理服務器)
使用方法:
服務器端:
1.下載openVPN。安裝時僅選擇TAP-Win32 driver即可。安裝后,可以發現服務器多出一塊網卡,我這里給隨便設置了一個IP:10.0.0.100。
2.下載iodine win32 binaries。解壓后可以得到兩個exe文件及一個dll。進入解壓目錄,輸入命令:
iodined -c -f 10.0.0.100 dns.guanwei.org (這里我已經將dns.guanwei.org的NS記錄設置為服務器的IP了詳見上篇文章)
設置一個password,出現“Listening to dns for domain dns.guanwei.org ”代表已經成功!
客戶端:
1.下載openVPN。安裝時僅選擇TAP-Win32 driver即可。安裝后,可以發現服務器多出一塊網卡。
2.下載iodine win32 binaries。解壓后可以得到兩個exe文件及一個dll。進入解壓目錄,輸入命令:
iodine -f -P 剛才設置的密碼 服務器的IP dns.guanwei.org
出現“Connection setup complete, transmitting data.”代表已經成功!
此時,TCP over DNS已經建立成功。在客戶端ping 10.0.0.100可以發現成功ping通。
如果想實現免費上網,只需在服務器端安裝一個代理軟件即可,這里我推薦CCproxy(http://www.49028c.com/softs/2199.html)。
這時,將IE的代理服務器設置為10.0.0.100即可。下面就請免費上網吧!
下面是其他網友的補充:
用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代理端口。配置瀏覽器使用這個代理端口,開始享受免費沖浪吧!
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 熱點能不能用。下次到商業區別忘記試試看。
新聞熱點
疑難解答