最近遇到了國內(nèi)某大牛,聽說了一個(gè)叫做DNS tunnel的技術(shù),經(jīng)過一番研究,發(fā)現(xiàn)很有趣,記錄一下。
什么是DNS tunnel?
DNS tunnel 即 DNS隧道。從名字上來看就是利用DNS查詢過程建立起隧道,傳輸數(shù)據(jù)。
為什么使用DNS tunnel?
當(dāng)你在酒店、機(jī)場等公共場所,通常有Wifi信號(hào),但是當(dāng)你訪問一個(gè)網(wǎng)站時(shí),如www.guanwei.org,可能會(huì)彈出個(gè)窗口,讓你輸入用戶名、密碼,登陸之后才可以繼續(xù)上網(wǎng)(該技術(shù)一般為透明http代理,不在本文討論范圍之內(nèi),以后再講)。這時(shí),你沒有賬號(hào),就無法上網(wǎng)。但是有時(shí)你會(huì)發(fā)現(xiàn),你獲取到得DNS地址是有效的,并且可以用以進(jìn)行DNS查詢,這時(shí)你便可以用DNS tunnel技術(shù)來實(shí)現(xiàn)免費(fèi)上網(wǎng)了!
DNS tunnel的原理
首先,要知道DNS系統(tǒng)的工作原理,見:[DNS系統(tǒng)(服務(wù)器)的工作原理及攻擊防護(hù)方法論] 。你在做 DNS 查詢的時(shí)候,如果查的域名在 DNS 服務(wù)器本機(jī)的 cache 中沒有,它就會(huì)去互聯(lián)網(wǎng)上查詢,最終把結(jié)果返回給你。如果你在互聯(lián)網(wǎng)上有臺(tái)定制的服務(wù)器。只要依靠 DNS 的這層約定,就可以交換數(shù)據(jù)包了。從 DNS 協(xié)議上看,你是在一次次的查詢某個(gè)特定域名,并得到解析結(jié)果。但實(shí)際上,你在和外部通訊。你沒有直接連到局域網(wǎng)外的機(jī)器,因?yàn)榫W(wǎng)關(guān)不會(huì)轉(zhuǎn)發(fā)你的 IP 包出去。但局域網(wǎng)上的 DNS 服務(wù)器幫你做了中轉(zhuǎn)。這就是 DNS Tunnel 了。
上圖簡單介紹了DNS tunnel的原理。當(dāng)你連接上wifi后,你可以使用DNS服務(wù)器,向這個(gè)服務(wù)器的53端口發(fā)送數(shù)據(jù),請(qǐng)求一個(gè)域名,比如b.guanwei.org 。這臺(tái)DNS服務(wù)器上沒有b.guanwei.org,那么它將向root,也就是根域名服務(wù)器請(qǐng)求,看看根知道不。root一看是.org的域名,就交給.org域名服務(wù)器進(jìn)行解析。.org的域名服務(wù)器一看是.guanwei.org那么就會(huì)去找.guanwei.org的域名服務(wù)器(f1g1ns1.dnspod.net),看看它有沒有這條記錄。.guanwei.org的域名服務(wù)器上一看是b.guanwei.og,如果它有這條A記錄,那么就會(huì)返回b.guanwei.org的地址。
但是,如果沒有,你可以再在guanwei.org的域名服務(wù)器上設(shè)定一個(gè)NS類型的記錄人,如:guanwei.org NS 111.222.333.444(通常這里不讓設(shè)置為地址,那么也好辦,你可以先在DNS服務(wù)器上添加一條A記錄,如ns.guanwei.org 111.222.333.444,再添加NS記錄:guanwei.org NS ns.guanwei.org),這里指定一個(gè)公網(wǎng)服務(wù)器,也就是上圖綠色的服務(wù)器,這臺(tái)服務(wù)器中跑著DNS tunnel的server端,是一臺(tái)假的DNS服務(wù)器,他不會(huì)返回b.guanwei.org的地址,但是它會(huì)將你的請(qǐng)求轉(zhuǎn)發(fā)到已經(jīng)設(shè)定的端口中,比如SSH的22端口,22端口返回的數(shù)據(jù)它將轉(zhuǎn)發(fā)到53端口返回給客戶端(也就是你的電腦)。這時(shí),你就可以用這臺(tái)公網(wǎng)服務(wù)器的資源了,如果是一臺(tái)http或者sock代理,那么你就可以用這個(gè)代理免費(fèi)上網(wǎng)了。
DNS tunnel實(shí)現(xiàn)的工具
DNS tunnel實(shí)現(xiàn)的工具有很多,比如:OzymanDNS、tcp-over-dns、heyoka、iodine、dns2tcp。由于BT4、5系統(tǒng)自帶了dns2tcp工具。這里僅介紹dns2tcp的使用方法。
DNS2TCP的DNS tunnel實(shí)驗(yàn)
環(huán)境準(zhǔn)備
前期配置
客戶端client可以使用域名服務(wù)器查詢域名,這里設(shè)定該域名為dnstunnel.guanwei.org(該域名不能在dnspod的域名服務(wù)器上有任何記錄,因?yàn)檫@個(gè)記錄是由server進(jìn)行應(yīng)答的)
在guanwei.org的域名服務(wù)器上建立兩條DNS記錄
ns.guanwei.org A 111.222.333.444(這里的目的就是給DNS服務(wù)器設(shè)定一個(gè)域名,按原理來說是可以舍去的,但是DNSpod上不可以將NS記錄配置為IP,只能配置為域名,所以需要加上這條記錄)
guanwei.org NS ns.guanwei.org(這里建立一條NS記錄,意思是如果本臺(tái)DNS服務(wù)器上沒有客戶端查詢的域名(dnstunnel.guanwei.org),請(qǐng)去ns.guanwei.org(也就是111.222.333.444)上去查詢)
在server上開啟SSH服務(wù)。用以進(jìn)行測試,如果DNS tunnel建立,client可以使用SSH連接到服務(wù)器上。
詳細(xì)配置方法
server端:
編輯/etc/dns2tcpd.conf文件,內(nèi)容如下:
listen = 192.168.10.88(Linux服務(wù)器的IP)
port = 53
user = nobody
chroot = /var/empty/dns2tcp/
domain = dnstunnel.guanwei.org(對(duì)該域名的請(qǐng)求進(jìn)行轉(zhuǎn)發(fā),將返回?cái)?shù)據(jù)包進(jìn)行封裝)
resources = ssh:127.0.0.1:22(可以為客戶端提供的服務(wù),也可以為http:127.0.0.1:3128,如果該服務(wù)器開啟了http代理服務(wù))
然后,運(yùn)行dns2tcpd服務(wù)器程序: #./dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf
================================================
client端: #./dns2tcpc -z dnstunnel.guanwei.org ns.guanwei.org
如果ns.guanwei.org生效了,便可以連接服務(wù)器,提示:
Available connection(s):
ssh
但是如果ns.guanwei.org還沒有生效,會(huì)提示:no response from dns server 。這時(shí)可以先使用: #./dns2tcpc -z dnstunnel.guanwei.org 202.96.64.68
如果成功連接服務(wù)器,則說明dnstunnel可以成功建立了,如果沒有,請(qǐng)測試你獲取到得dns服務(wù)器地址是否可用,并且guanwei.org的ns記錄是否生效。測試方法:將111.222.333.444映射到另外一個(gè)真正的dns服務(wù)器上,加一條A記錄,如:test.guanwei.org A 192.168.10.254 。然后使用nslookup test.guanwei.org 202.96.64.68,觀察能否成功解析。如果不能解析,請(qǐng)檢查dnspod的配置及dns記錄生效情況。
測試可以成功連接服務(wù)器后,使用#./dns2tcpc -r ssh -l 4430 -z dnstunnel.guanwei.org 202.96.64.68 這時(shí)會(huì)在本地監(jiān)聽一個(gè)端口,類似一個(gè)反彈木馬。使用ssh 127.0.0.1 -p 4430 便可以成功連接server的22端口。如果server提供http代理服務(wù),那么你就可以設(shè)置http代理服務(wù)器免費(fèi)上網(wǎng)了!
PS:我發(fā)現(xiàn)客戶端在監(jiān)聽4430端口時(shí)是監(jiān)聽127.0.0.1:4430端口,只能本機(jī)訪問,其他機(jī)器不能連接,如果有牛發(fā)現(xiàn)該問題的解決辦法,請(qǐng)聯(lián)系我,謝謝!
聯(lián)系客服