DNS隧道之DNS2TCP實現——dns2tcpc必須帶server IP才可以,此外ssh可以穿過牆的,設置代理上網


我自己的命令:

server端:

dns2tcpd -F -d 1 -f ./dns2tcpd.conf
輸出:
09:08:59 : Debug options.c:97    Add resource ssh:127.0.0.1 port 22
09:08:59 : Debug options.c:97    Add resource smtp:127.0.0.1 port 25
09:08:59 : Debug options.c:97    Add resource socks:127.0.0.1 port 1080
09:08:59 : Debug options.c:97    Add resource http:127.0.0.1 port 80
09:08:59 : Debug options.c:97    Add resource https:127.0.0.1 port 8087
09:08:59 : Debug socket.c:55    Listening on 0.0.0.0:53 for domain a.xxxxxxxxxxxxxxx.com
Starting Server v0.5.2...
09:08:59 : Debug main.c:132    Chroot to /tmp/
09:09:00 : Debug main.c:142    Change to user root
  Creating session id: 0x7a69 address = 106.38.75.154 (compression  wanted)
09:10:14 : Debug auth.c:60    Ask for resource 'ssh'
09:10:14 : Debug socket.c:183    Connecting to 127.0.0.1 port 22
Bind client id: 0x7a69 address = 106.38.75.154 to resource ssh
      delete_client 0x7a69 

        Creating session id: 0x243a address = 106.38.75.154 (compression  wanted)
09:17:22 : Debug auth.c:60    Ask for resource 'ssh'
09:17:22 : Debug socket.c:183    Connecting to 127.0.0.1 port 22
Bind client id: 0x243a address = 106.38.75.154 to resource ssh

配置文件dns2tcpd.conf內容:

listen = 0.0.0.0
port = 53
user = root
chroot = /tmp/
domain = a.xxxxxxxxxxx.com
key = fuckoff
resources = ssh:127.0.0.1:22,smtp:127.0.0.1:25,socks:127.0.0.1:1080,http:127.0.0.1:80,https:127.0.0.1:8087

其中xxxx.com是你注冊的域名,並且設置了a的解析,見后文。

客戶端:

dns2tcpc -c -k fuckoff -d 1 -l 2222 -r ssh -z a.xxxxxx.com 45.77.39.243
其中 45.77.39.243 是我的server IP,我測試是必須寫的。

測試下:

ssh root@127.0.0.1 -p 2222

可以直接登陸你的server ssh。

 

然后設置ssh隧道(偶爾會提示reset peer或許要多試幾次):

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

輸入密碼后,看下端口是否開啟:

bonelee@bonelee-VirtualBox:~/dns_tunnel_tool$ lsof -i:2222
COMMAND    PID    USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
dns2tcpc 28938 bonelee    4u  IPv4 11154775      0t0  TCP localhost:2222 (LISTEN)
dns2tcpc 28938 bonelee    5u  IPv4 11157735      0t0  TCP localhost:2222->localhost:46296 (ESTABLISHED)
ssh      28953 bonelee    3u  IPv4 11157734      0t0  TCP localhost:46296->localhost:2222 (ESTABLISHED)
bonelee@bonelee-VirtualBox:~/dns_tunnel_tool$ lsof -i:7002
COMMAND   PID    USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
ssh     28953 bonelee    4u  IPv4 11160083      0t0  TCP *:afs3-prserver (LISTEN)
ssh     28953 bonelee    5u  IPv6 11160084      0t0  TCP *:afs3-prserver (LISTEN)

瀏覽器里直接socks5代理127.0.0.1 7002端口即可上網了!上谷歌也是可以的。。。不過速度就不咋地。。。

下面是參考文章,全部讀完大概就知道來龍去脈了。

------------------------------------------------------------------------------

DNS隧道之DNS2TCP實現

轉自:http://blog.csdn.net/gsls200808/article/details/50318947
 

原理:通過DNS建立隧道
准備條件:有獨立IP的公網服務器,能設置NS記錄的域名。
總體思路:服務器端運行DNS2TCP,域名提供商設置NS記錄,客戶端運行DNS2TCP
本文服務器采用CentOS6.6,客戶端采用Windows XP

1.服務器安裝DNS2TCP

CentOS6.6安裝DNS2TCP
檢查CentOS版本

[plain] view plain copy
  1. cat /etc/redhat-release  

結果

[plain] view plain copy
  1. CentOS release 6.6 (Final)  

在http://www.hsc.fr/ressources/outils/dns2tcp/download/上下載源碼,然后編譯安裝,命令如下:

[plain] view plain copy
  1. wget http://www.hsc.fr/ressources/outils/dns2tcp/download/dns2tcp-0.5.2.tar.gz  
  2. tar zxf dns2tcp-0.5.2.tar.gz  
  3. cd dns2tcp-0.5.2  
  4. ./configure  
  5. make & make install  

編譯過程中出現錯誤請先安裝開發包

[plain] view plain copy
  1. yum groupinstall "Development Tools"  

2.設置域名服務器

登錄你的域名服務器商如:DNSpod
在域名下面添加一個A記錄,A記錄的名字可以任意,如ns1.vvvtimes.com,A記錄的值為你VPS服務器的IP地址。
最后,再添加一個NS記錄,這個NS的名字可以任意,比如tcp.vvvtimes.com,NS記錄的值為你上面添加的A記錄的名字,即ns1.vvvtimes.com。


3.在服務器上運行DNS2TCPD

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

[plain] view plain copy
  1. listen = 0.0.0.0(Linux服務器的IP)    
  2. port = 53    
  3. user = nobody    
  4. chroot = /tmp    
  5. domain = tcp.vvvtimes.com(上面配置NS記錄的域名)    
  6. resources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128   


服務端執行如下命令啟動 DNS2TCP:

[plain] view plain copy
  1. dns2tcpd -f /etc/dns2tcpd.conf -F -d 2  


注意:騰訊雲服務器不給實際網卡分配公網IP,所以要監聽0.0.0.0
附:使用screen加入后台(非必須項),下面的命令執行到快捷鍵Ctrl+a d后面的基本就不用管了。
安裝screen

[plain] view plain copy
  1. yum install screen  

創建screen會話

[plain] view plain copy
  1. screen -S dns2tcpd  

執行我們想要的命令

[plain] view plain copy
  1. dns2tcpd -f /etc/dns2tcpd.conf -F -d 2  

暫時離開,保留screen會話中的任務或程序

[plain] view plain copy
  1. 快捷鍵Ctrl+a d(即按住Ctrl,依次再按a,d)  

恢復screen會話

[plain] view plain copy
  1. screen -r dns2tcpd  

列出當前的會話列表

[plain] view plain copy
  1. screen -ls  

強行終止

[plain] view plain copy
  1. screen -S dns2tcpd -X quit  

4.客戶端運行DNS2TCPC

DNS2TCP 的客戶端配置較為簡單, 一條命令就行:

[plain] view plain copy
  1. dns2tcpc -r ssh -z tcp.vvvtimes.com 1.2.3.4 -l 8888 -d 2  

-r 后接服務名稱, 這里我們用ssh
-z 后接NS記錄的網址, ip, 注意IP地址最好寫上, 可以不寫
-l 后接本地端口
-d 開啟 Debug

注意本地需要安裝 DNS2TCP 工具, Windows 用戶請從網盤下載:
http://pan.baidu.com/s/1c05APFE 密碼:rem5

5.putty登錄測試

將登錄端口和IP改成127.0.0.1:8888,其余設置與登錄原服務器一致

6.Xshell登錄轉成Socks4/5通用代理

由於IE無法使用Socks5協議,所以通過Xshell轉成Socks4/5通用代理比較方便

登錄設置與putty類似,同樣是127.0.0.1:8888

騰訊雲下需要使用密鑰登錄,我們需要將putty使用的ppk文件轉成openssl格式

打開puttygen,File-->Load private key,找到自己的ppk文件,Conversions-->Export-->OpenSSH key,保存即可

在Xshell中連接填入主機127.0.0.1端口號填8888

用戶身份驗證,方法選Public,用戶名填root,用戶密鑰選擇puttygen導出的OpenSSH密鑰即可,點擊確定,成功連接如圖

連接成功后,我們來建立代理

查看-->隧道窗格,點擊轉移規則,右鍵添加,在類型里選Dynamic (SOCK4/5),默認端口1080不用改,點擊確定


7.IE代理設置

工具-->Internet選項-->連接-->局域網設置,勾選為LAN使用代理服務器,點擊高級,套接字地址填127.0.0.1端口填1080

速度非常慢,打開百度要一分鍾左右。。。

經過多次測試遼寧移動的Wifi熱點已經修復了這個漏洞,筆者用其他運營商的熱點測試的。

筆者最開始用的是iodine,但是在騰訊雲服務器上並不能正常開啟53端口


后記:騰訊雲配置外網的時候比較特殊,阿里雲是雙網卡,騰訊雲是單網卡內網IP而且使用了自制的TGW網關,配置時需要把配置中的外網IP直接改成內網IP


本文參考
1.DNS隧道 - 繞過公共 Wifi 熱點登陸免費上網 http://www.myhack58.com/Article/54/93/2015/67717.htm

 

 

 

有些網絡的防火牆設置只允許端口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