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 229:08:59 : Debug options.c:97 Add resource smtp:127.0.0.1 port 259:08:59 : Debug options.c:97 Add resource socks:127.0.0.1 port 10809:08:59 : Debug options.c:97 Add resource http:127.0.0.1 port 809:08:59 : Debug options.c:97 Add resource https:127.0.0.1 port 80879: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/9: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'9: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'9: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实现
原理:通过DNS建立隧道
准备条件:有独立IP的公网服务器,能设置NS记录的域名。
总体思路:服务器端运行DNS2TCP,域名提供商设置NS记录,客户端运行DNS2TCP
本文服务器采用CentOS6.6,客户端采用Windows XP
1.服务器安装DNS2TCP
CentOS6.6安装DNS2TCP
检查CentOS版本
- cat /etc/redhat-release
结果
- CentOS release 6.6 (Final)
在http://www.hsc.fr/ressources/outils/dns2tcp/download/上下载源码,然后编译安装,命令如下:
- 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
编译过程中出现错误请先安装开发包
- 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 的文件, 然后输入以下配置:
- listen = 0.0.0.0(Linux服务器的IP)
- port = 53
- user = nobody
- chroot = /tmp
- domain = tcp.vvvtimes.com(上面配置NS记录的域名)
- resources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128
服务端执行如下命令启动 DNS2TCP:
- dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
注意:腾讯云服务器不给实际网卡分配公网IP,所以要监听0.0.0.0
附:使用screen加入后台(非必须项),下面的命令执行到快捷键Ctrl+a d后面的基本就不用管了。
安装screen
- yum install screen
创建screen会话
- screen -S dns2tcpd
执行我们想要的命令
- dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
暂时离开,保留screen会话中的任务或程序
- 快捷键Ctrl+a d(即按住Ctrl,依次再按a,d)
恢复screen会话
- screen -r dns2tcpd
列出当前的会话列表
- screen -ls
强行终止
- screen -S dns2tcpd -X quit
4.客户端运行DNS2TCPC
DNS2TCP 的客户端配置较为简单, 一条命令就行:
- 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上网差不多。

DNS隧道之DNS2TCP实现——dns2tcpc必须带server IP才可以,此外ssh可以穿过墙的,设置代理上网的更多相关文章
- DNS隧道之DNS2TCP使用心得教程——是可以用来穿透qiang的,ubuntu下直接apt install dns2tcp
DNS隧道之DNS2TCP使用心得教程 转自:http://blog.creke.net/750.html DNS2TCP是在上次DNS隧道大检阅时提到的一个DNS隧道. 在2010年6月的更新(也是 ...
- DNS隧道工具dns2tcp
DNS隧道工具dns2tcp 在很多网络环境中,防火墙会限制出站流量,主机往往只能访问外网主机有限的几个端口,如DNS的53端口.这时,就可以通过DNS请求和响应机制,建立通信隧道.Kali Li ...
- dns隧道 dns2tcpd
有些网络的防火墙设置只允许端口53的UDP流量,就不能通过tcp搭建隧道,这种情况下我们可以通过UDP搭建DNS隧道,通过搭建一个DNS服务器委派的子域,这个子域因为使我们自己搭建的主机,这时候就可以 ...
- DNS隧道 iodns
通过iodns这个工具也能搭建DNS隧道 iodns的优点: 对下行数据不进行编码,速度快 支持多平台 最大16个并发连接 强制密码设定 iodns创建的DNS隧道网段不能喝服务器,客户端同一网段,比 ...
- 基于常规DNS隧道进行的tcp端口转发dns2tcp的使用
0x01 安装Dns2TCP dns2tcp 是一个利用DNS隧道转发TCP连接的工具,使用C语言开发. sudo apt-get install dns2tcp 0x02配置dns2tcp 配置DN ...
- DNS隧道和工具
DNS Tunneling及相关实现 转自:http://www.freebuf.com/sectool/112076.html DNS Tunneling,是隐蔽信道的一种,通过将其他协议封装在DN ...
- dns隧道攻击原理及常用工具流量分析
DNS协议是一种请求应答协议,也是一种可用于应用层的隧道技术.虽然DNS流量的异常变化可能会被发现,但是在基于传统socket隧道已经濒临淘汰,TCP.UDP通信大量被安全设备拦截的大背景下,DNS. ...
- DNS隧道实战&&cobaltstrike利用dns隧道
前言 使用 dns 隧道进行 tcp 通信. 正文 首先配置域名 配置一个 A 记录指向我们的 vps, 然后配置几个 ns 记录,指向刚刚设置的 A 记录 然后在服务端安装 wget https:/ ...
- DNS隧道工具汇总——补充,还有IP over DNS的工具NSTX、Iodine、DNSCat
github上有一堆的工具:https://github.com/search?utf8=%E2%9C%93&q=DNS+tunnel+&type= DNS隧道大检阅 研究了一天的DN ...
随机推荐
- BZOJ 2073
思路: 状压DP 枚举子集 //By SiriusRen #include <cstdio> #include <cstring> #include <algorith ...
- C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- .net 获取当前网页的的url
正确的方法是:HttpContext.Current.Request.Url.PathAndQuery1.通过ASP.NET获取 如果测试的url地址是http://www.test.com/test ...
- centos6.6--------正向DNS配置
一.正向区: 将域名解析为IP====================================================================================注 ...
- c++中的强制转换
一.C语言的强制转换1.1 隐性转换 不同数据类型之间赋值和运算,函数调用传递参数等等,由编译器完成 int nTmp = 10; short sTmp ...
- angular中ng-bind指令小案例
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- python 编码问题解决方案
1.UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128) ...
- 3 Python+Selenium的元素定位方法(id、class name、name、tag name)
[环境] Python3.6+selenium3.0.2+IE11+Win7 [定位方法] 1.通过ID定位 方法:find_element_by_id('xx') 2.通过name定位 方法:fin ...
- SQL表查询
CREATE TABLE student( Sno ) NOT NULL PRIMARY KEY, Sname ) NOT NULL, Ssex ) NOT NULL, Sbirthday DATET ...
- UNIX时间转换ASP代码.txt
'参数:strTime:要转换的时 间:intTimeZone:该时间对应的时区 '返回值:strTime相对于1970年1月1日午夜0点经过的秒数 '示例:ToUnixTime("2008 ...