DNS隧道之DNS2TCP使用心得教程——是可以用來穿透qiang的,ubuntu下直接apt install dns2tcp


DNS隧道之DNS2TCP使用心得教程

轉自:http://blog.creke.net/750.html

DNS2TCP是在上次DNS隧道大檢閱時提到的一個DNS隧道。

在2010年6月的更新(也是迄今為止最新的更新)后,其源代碼支持編譯為Windows平台的可執行程序。而且此工具使用C語言開發編寫,不需要TUN/TAP,所以大大加強了它的可用性。

下載

當前最新的0.5.2版源代碼下載請點擊這里

Windows下客戶端可執行文件下載請點擊這里

安裝DNS2TCP

本配置所在環境為Linux。以下命令的執行均以root用戶身份執行,如果不是root用戶,CentOS的請用“su -”,Ubuntu請在各個命令前加上“sudo”,分別提權到root用戶權限。

下載、解壓、編譯、安裝

wget http://www.hsc.fr/ressources/outils/dns2tcp/download/dns2tcp-0.5.2.tar.gz

tar zxf dns2tcp-0.5.2.tar.gz

cd dns2tcp-0.5.2

./configure

make

make install

配置DNS2TCP服務端

首先,將你的某個域名(這里以creke.net為例)開個二級域名a.creke.net,類型為NS,NS記錄指向b.creke.net。然后將b.creke.net建立A記錄指向你的Linux服務器IP(這里以1.2.3.4為例)。如下表所示。

a.creke.net NS b.creke.net

b.creke.net A 1.2.3.4

在/etc目錄建立一個名為dns2tcpd.conf的文件,然后輸入以下配置:

listen = 1.2.3.4(Linux服務器的IP)
port = 53
user = nobody
chroot = /var/empty/dns2tcp/
domain = a.creke.net(上面配置NS記錄的域名)
resources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:8082

最后的resources里面配置的是dns2tcp供客戶端使用的資源。作用是:客戶端在本地監聽一個端口,並指定使用的資源,當有數據往端口傳送后,dns2tcp客戶端將數據用DNS協議傳動到服務器,然后服務器將數據轉發到對應的資源配置的端口中。

好了,DNS2TCP的服務端配置到此完畢。接下來就是要慢慢等待域名記錄的生效了。

啟動與關閉DNS2TCP服務端

以下命令用於啟動DNS2TCP的服務端:

dns2tcpd -f /etc/dns2tcpd.conf

以下命令用於關閉DNS2TCP的服務端:

killall dns2tcpd

啟動DNS2TCP客戶端

這里再次提醒,要等待a.creke.net的NS記錄生效后,才能夠繼續正常使用客戶端。查詢是否生效可以使用從各個在線網站查詢。

啟動DNS2TCP客戶端的命令如下;

dns2tcpc -c -d 1 -l 8118 -r http -z a.creke.net

其中:-c表示啟用數據壓縮;-d表示啟動調試,1為調試等級;-l表示監聽本地端口,8118為端口名;-r為使用服務端上的哪個資源,http為資源名;-z后的a.creke.net為前面配置的NS記錄的域名。

然后就可以通過將瀏覽器的代理服務器地址設為127.0.0.1:8118,代理類型為HTTP代理,來通過DNS隧道上網了。

如果要使用SOCKS代理,則為:

dns2tcpc -c -d 1 -l 7070 -r socks -z a.creke.net

以上是通過系統DNS來發送DNS請求的,如果要通過某個DNS服務器,如87.65.43.21來發送DNS請求,則為:

dns2tcpc -c -d 1 -l 8118 -r http -z a.creke.net 87.65.43.21

這里要注意,需要首先在Linux服務器配置好HTTP代理或者SOCKS代理。才能利用DNS隧道轉發數據包來實現代理。具體可以參考如何使用Kingate假設HTTP代理和SOCKS代理。

 

就是這樣,采用DNS2TCP搭建了DNS隧道,慢慢折騰吧!

 

 

有些網絡的防火牆設置只允許端口53的UDP流量,就不能通過tcp搭建隧道,這種情況下我們可以通過UDP搭建DNS隧道,通過搭建一個DNS服務器委派的子域,這個子域因為使我們自己搭建的主機,這時候就可以通過這個子域搭建DNS隧道,和網絡被限制的主機1交互。

主機3為DNS服務器需要設置為固定的IP地址

它的原理是通過DNS請求頭域名的信息 TXT記錄加密傳輸信息,我們可以通過抓取DNS隧道數據包,可以看到DNS的查詢請求的域名信息test.lab.com前的一串數據,里面就是加密過后的交互數據。DNS隧道建立后,客戶端(主機1)還是會不斷地發包給服務器端(主機2),類似心跳一樣,確認服務器端處於存活狀態,保證傳輸的順暢。

 

在主機3上搭建一個DNS服務器,並委派一個子域給主機2,配置轉發器,除test.lab.com之外的域名用別的域名地址解析

 

搭建DNS隧道

在主機2

修改dns2tcpd的配置

vim /etc/dns2tcpd.conf 

ssh:127.0.0.1:22

smtp:127.0.0.1:25 

socks:127.0.0.1:1080

http:192.168.1.1:80

https:127.0.0.1:8087

在DNS服務器主機2上開啟ssh,smtp,socks,http,https服務,開放22,25,1080,80,8087端口

配置一下ssh,使其能夠在root權限下使用

主機2開啟ssh服務。

service ssh start

主機2開啟dns隧道

dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf

 

主機1通過DNS隧道連接主機2使用ssh服務

dns2tcp -c -k pass123 -d 1 -l 2222 -r ssh -z test.lab.com

-c 啟動流量壓縮

-d debug查看信息

-l 設置本地偵聽端口

-r 指定資源 

在主機1上訪問2222端口就相當於在主機2上訪問的22端口

在主機1另開一個終端

ssh root@127.0.0.1 -p 2222

主機1就通過ssh登錄上了主機2

 

 

主機1通過DNS隧道連接主機2使用http服務

在主機1上

輸入dns2tcp -c -k pass123 -d 1 -l 2222 -r http -z test.lab.com 

打開瀏覽器,輸入http://127.0.0.1:2222/,就相當於是在主機2上訪問192.168.1.1一樣

 

主機1通過DNS隧道連接主機2使用https服務

dns2tcp -c -k pass123 -d 1 -l 7001 -r https -z test.lab.com

 

DNS隧道設置網關功能

DNS隧道是沒有網關功能的,假如想將DNS隧道的客戶端主機1作為一個網卡的話,先建立一個DNS隧道里再嵌套一個ssh隧道,用ssh隧道作為一個網關使用

主機3為DNS服務器需要設置為固定的IP地址

主機2開啟ssh服務。

service ssh start

主機2開啟dns隧道

dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf

主機1通過DNS隧道連接主機2使用ssh服務,將2222端口作為DNS隧道的入口。

dns2tcpc -k pass123 -d 1 -l 2222 -r ssh -z test.lab.com

再再開一個終端,在主機1的DNS隧道里再搭建一個ssh隧道,並作為網關使用

ssh -CfNg root@127.0.0.1 -p 2222 -D 7002

 主機1網關搭建好了,在主機4上打開瀏覽器設置代理,將主機1的ip和端口作為代理

 然后主機4就能上網了,就相當於在主機2上網差不多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM