我的命令:

server端:

sudo iodined -P passwd -f -DD 10.0.0.100 abc.com

client端(直连模式,-r表示使用xxx.abc.com的xxx来转发数据,不加-r表示raw):

sudo iodine -P passwd -f -r -T TXT 45.77.39.243 abc.com

然后访问:ssh root@10.0.0.100 本质上和 ssh root@45.77.39.243 是一样的效果。

如果你在45.77.39.243上开shadowsocks client和server,然后连接 10.0.0.100 的 1080端口 不就是在穿-墙了嘛!

补充,中继模式下,在我的测试环境中必须加-r和-M,否则无法建立连接:sudo iodine -r -f -P passwd <domain.com> -M 200

DNS Tunnel

DNS隧道利用的正是DNS的查询过程,通过构造特殊的加密的DNS查询数据来构建隧道传输数据。

  • 环境准备

    1台有公网IP的服务器1个可自行配置DNS的域名DNS Tunnel工具,此处用 [iodine](https://github.com/yarrick/iodine)
  • DNS配置

    假设我有个域名zemal.tk,需要设置两条DNS:

    A aaa xx.xx.xx.xx(Your IP)NS b aaa.zemal.tk

    大概就是这个样子

  • 工作过程

    配置好上述过程后,当本机查询b.zemal.tk时,此处略过根域名服务器和顶级域名服务器的查询,当到达DNSPOD时。

    1. b.zemal.tk需要aaa.zemal.tk这个DNS服务器来获取IP
    2. 发现aaa.zemal.tk的A记录,得到aaa.zemal.tk这个DNS服务器的IP
    3. 向2中得到的DNS服务器查询b.zemal.tk的IP

    可见我们需要将自己的服务器伪装成一台DNS服务器,就需要DNS Tunnel工具了

    Server端:

    iodined -f -P testforme 192.168.100.1 b.zemal.tk# -f 开启前台显示# -P 连接密码,自己设置# 192.168.100.1 是自设的内网网段 也可用172.16.. 10...这些# b.zemal.tk 监听b.zemal.tk的DNS查询请求

    Client端:

    iodine -f {YourServerIP} b.zemal.tk# Mac用户需要加 -d utunx 否则会出段错误

    连接成功截图:

此时访问192.168.100.1和访问你的远程服务器就是一样的了

0x03 免费上网

在肯德基,麦当劳甚至校园网中往往都需要一次认证才可以,比如:

​ 而这些地方往往是允许未认证的DNS查询的,那我们就可以利用DNS隧道上网了

​ 常见的方式一是利用一层ssh反向隧道,另一种方式就是大家熟知的shadowsocks。在服务器搭建好ss服务 器并搭建好DNS隧道,就可以这样添加代理服务器来上网了

​ 其中,地址为在Server设置的网段的地址,设置好后就可以愉快的上网了。我在校园网内测试成功。由于DNS查询基于UDP,其实就是用UDP模拟TCP,因此效率很低,导致网速真心比较慢慢,我测试的大概每秒几十k,貌似也就能上个QQ。。

通过虚拟内网地址连接服务器

下载最新版本的iodine Windows客户端。解压后,通过命令行(cmd程序。如果你的系统是Windows XP,直接打开cmd即可。如果你的是Windows 7系统,需要以管理员的身份运行这个程序)进入这个目录。然后,通过以下这个命令运行这个程序:
iodine -f -P password server_ip server.urdomain.com
上面的password是你在服务器端运行iodined这个程序时设置的密码,server_ip是你的VPS服务器的ip地址,server.urdomain.com是你设置的NS记录的域名。运行以上命令后,你会看到类似下面的输出:
12345678910111213 141516
Opening device Local Area Connection 2Opened UDP socketOpened UDP socket Opened UDP socketSending DNS queries for iodine.cwaffles.co.cc to 74.63.253.53Autodetecting DNS query type (use -T to override).Using DNS type NULL queriesVersion ok, both using protocol v 0x00000502. You are user #0 Enabling interface 'Local Area Connection 2'Setting IP of interface 'Local Area Connection 2' to 10.0.0.2 (can take a few seconds)... Server tunnel IP is 10.0.0.1Testing raw UDP data to the server (skip with -r) Server is at 74.63.253.53, trying raw login: OKSending raw traffic directly to 74.63.253.53Connection setup complete, transmitting data.
上面的74.63.253.53是你服务器的ip地址。
现在,你可以测试下是否能够Ping同10.0.0.1这个服务器了:
ping 10.0.0.1 /t
如果Ping通了,一切顺利。
现在,即使你的电脑打开浏览器的时候跳出让你输入密码认证的页面,即使你不输入认证,你也可以上网了。前提是,你还需要进一步的设置。
6. 通过虚拟内网地址登入服务器
如果你以前用过SSH连接代理服务器,并拿它来FQ,接下来的设置很简单,因为两者是一样的。但是,如果你以前连FQ都不会,也不会通过SSH登入服务器,那就有点麻烦了。本文不再详述这些设置,只给出几个客户端和浏览器插件:
1). 所连接服务器的IP地址:10.0.0.1
你可以通过SSH登入10.0.0.1这个服务器了,这个服务器跟你的VPS服务器是一样的,只不过是以不同的地址登入。你原有的是外网IP地址,现在多了一个10.0.0.1内部地址。登入的用户名和密码还是跟你原来登入VPS的用户名和密码一样的。
2). 连接服务器的客户端:PuTTYKiTTYTunnelier
推荐使用Tunnelier,设置代理端口非常的方便。
3). 浏览器的代理插件
你可以在浏览器下设置代理类型,代理IP地址和相应的端口。也可以使用第三方插件设置代理,如Chrome的Switchy和Firefox的AutoProxyFoxyProxy
 
 

运行示例:

服务端(需要在域名提供商处添加两条DNS记录):

iodined -f -c -P password 192.168.99.1 d0.geeshell.com
# -f 前端运行(windows版不可用)
# -c 禁用客户端每一个请求的IP/端口检查
# -P 设置密码,不启用此选项运行则需要交互输入密码
# 192.168.99.1 隧道服务端IP
# d0.geeshell.com查询域
1
2
3
4
5
6
iodined -f -c -P password 192.168.99.1 d0.geeshell.com
# -f 前端运行(windows版不可用)
# -c 禁用客户端每一个请求的IP/端口检查
# -P 设置密码,不启用此选项运行则需要交互输入密码
# 192.168.99.1 隧道服务端IP
# d0.geeshell.com查询域

客户端:

iodine -f -P password d0.geeshell.com
# 选项说明见上
1
2
iodine -f -P password d0.geeshell.com
# 选项说明见上

成功建立隧道客户端会得到192.168.99.0/24段的一个IP,可以通过ping 192.168.99.1测试连通性。

以前写过这篇文章,对DNS tunnel进行了详细介绍,并附了DNS2tcp工具的使用方法,详见:[DNS tunnel(DNS隧道)技术应用工具-DNS2tcp的使用方法及原理] 。不过那个工具在windows下好像不太好用,我就又找了一个工具,叫iodine。

官方网站:http://code.kryo.se/iodine/
官方下载地址:http://code.kryo.se/iodine/iodine-0.6.0-rc1-win32.zip
此外,在服务器及客户端都需要安装openVPN。下载地址:http://www.skycn.com/soft/60781.html (Win7 64位测试有效)。
代理软件:http://www.cngr.cn/dir/207/228/2011010465002.html(代理服务器)

使用方法:

服务器端:

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.cngr.cn/dir/207/228/2011010465002.html
这时,将IE的代理服务器设置为10.0.0.100即可。下面就请免费上网吧!

安装后:

iodine -f YourServerIP a.qiuri.org
# Mac用户需要加 -d utunx 否则会出段错误
例: iodine -f -d utunx YourServerIP a.qiuri.org

运行成功后

bash-3.2# iodine -f -d utunx 101.254.176.228 a.qiuri.org
Enter password:
Opened utun2
Opened IPv4 UDP socket
Sending DNS queries for a.qiuri.org to 101.254.176.228
Autodetecting DNS query type (use -T to override).
Using DNS type NULL queries
Version ok, both using protocol v 0x00000502. You are user #0
Setting IP of utun2 to 192.168.100.2
Adding route 192.168.100.0/27 to 192.168.100.2
add net 192.168.100.0: gateway 192.168.100.2
Setting MTU of utun2 to 1130
Server tunnel IP is 192.168.100.1
Testing raw UDP data to the server (skip with -r)
Server is at 101.254.176.228, trying raw login: ....failed
Using EDNS0 extension
Switching upstream to codec Base128
Server switched upstream to codec Base128
No alternative downstream codec available, using default (Raw)
Switching to lazy mode for low-latency
Server switched to lazy mode
Autoprobing max downstream fragment size... (skip with -m fragsize)
768 ok.. 1152 ok.. ...1344 not ok.. ...1248 not ok.. ...1200 not ok.. 1176 ok.. 1188 ok.. will use 1188-2=1186
Setting downstream fragment size to max 1186...
Connection setup complete, transmitting data.

这时候我们ping 192.168.100.1,相当于ping了我们的服务器IP。所以可以理解成访问192.168.100.1就等于访问了我们远程服务器。

最后,我们就可以通过dns隧道来进行免费上网。利用ssh或者socks等,这里我用到的是socks,用了大家比较常见的shadowsocks,首先在服务器搭建好shadowsocks。然后直接shadowsocks全局代理即可绕过认证透过dns隧道进行上网了。配置示例如下图。


DNS2TCP

同理,我们在域名准备阶段先解析好域名。

Server端:

因为我使用的vps是ubuntu 14.04,同样的,源里面已经包含了这个软件,所以可以直接apt-get install dns2tcp来进行安装。

运行这个软件之前,我们首先要配置一下:

在 /etc 建立一个名为 dns2tcpd.conf 的文件,然后输入以下内容

listen = 1.2.3.4 #你的远程服务器IP
port = 53
user = nobody
chroot = /tmp
domain =a.qiuri.org #上面配置NS记录的域名
resources = ssh:127.0.0.1:22,socks:127.0.0.1:1082,http:127.0.0.1:3128 #可供客户端使用的资源

大致原理,以ssh为例。客户端本地监听22端口,将数据传送到指定端口,DNS2TCP将数据以dns协议传送到服务器端口,最后服务器再把数据转发到对应资源的端口去。

配置好之后,运行

dns2tcpd -f /etc/dns2tcpd.conf -F -d 2
-f 读取配置文件
-F 强制前台运行
-d 2 开启debug, 等级为2

如无错误,服务端已经没有问题了。

Client端:

Windows的话,我们需要下载一个软件 dns2tcp.zip 解压到任意路径就好

然后运行cmd,进入你刚刚解压软件的目录,也就是dns2tcp.exe所在目录,运行dns2tcp

dns2tcpc -r ssh -z a.qiuri.org 1.2.3.4 -l 6666 -d 2
#-r 后接服务名, 这里我们用到ssh
#-z 后接NS记录的地址和远程服务器IP,Tips:IP地址最好写上, 可以不写
#-l 后接本地端口,可以随意,只要不冲突
#-d 开启 Debug模式

运行成功时候,会显示如下图,这时候就把这cmd放着,切记不要关闭

缺图

接下来我们要配置本地ssh,将会用到xshell,直接去官网下载安装即可 https://www.netsarang.com/products/xsh_overview.html

安装好后,打开,添加如下配置:

缺图

然后连接,直接输入远程服务器账户密码即可。

缺图

连接成功后,我们就可以开始建立ssh代理。

查看–隧道窗格,点击转移规则,然后右键添加,类型选择Dynamic (SOCK4/5),默认端口不必修改,最后确定。

缺图

如果单纯只用浏览器上网的话,我们可以在IE代理进行如下设置。

Internet选项-连接-局域网设置,勾选为LAN使用代理服务器,点击高级,套接字地址127.0.0.1端口填1080

缺图

完成后,即可绕过绝大多数认证。注意,如果xshell连接不上的话,请在远程服务器和本地重启一下dns2tcp,一般多试试就会连接成功了。

iodine免费上网——本质就是利用dns tunnel建立tcp,然后tcp proxy来实现通过访问虚拟dns0网卡来访问你的dns 授权server的更多相关文章

  1. dnscapy使用——本质上是建立ssh的代理(通过dns tunnel)

    git clone https://github.com/cr0hn/dnscapy.git easy_install Scapy 服务端: python dnscapy_server.py a.fr ...

  2. DNS Tunnel隧道隐蔽通信实验 && 尝试复现特征向量化思维方式检测

    1. DNS隧道简介 DNS隧道技术是指利用 DNS协议建立隐蔽信 道,实现隐蔽数据传输.最早是在2004年 DanKaminsky 在 Defcon大会上发布的基于 NSTX 的 DNS隐蔽 隧道工 ...

  3. DNS tunnel的原理及实战

    DNS tunnel的原理及实战 摘自:http://netsec.ccert.edu.cn/zhengming/2011/11/01/%E8%BD%AC%E8%BD%BD%EF%BC%9Adns-t ...

  4. DNS Tunnel判定方法

    DNS Tunnel判定方法: 1.查询DNS请求的域名是否存在备案: 2.查询DNS请求的域名情报信息(以及域名的alex排名): 3.查看相同主域名下子域名编码格式及长度:(存在Base32和Ba ...

  5. XP教育网用户免费上网

      本文针对 XP 教育网用户免费上网,其他系统未作测试.若有疑问百度空间留言 http://hi.baidu.com/itas109 http://blog.csdn.net/itas109 步骤 ...

  6. win7系统用笔记本共享wifi热点 让手机免费上网

    之前一直在用这个方法把自己的笔记本变成一个wifi热点,让手机也可以直接连wifi上网,节省网费和路由器购买费. 其实就是开启了windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP ...

  7. python dig trace 功能实现——通过Querying name server IP来判定是否为dns tunnel

    dns tunnel确认方法,查询子域名最终的解析地址: 使用方法:python dig_trace.py  "<7cf1e56b 67fc90f8 caaae86e 0787e907 ...

  8. dns tunnel C&C

    通过DNS控制主机以及执行命令 我的ubuntu 安装过程 1854 mkdir dns_tunnel_tool 1855 cd dns_tunnel_tool/ 1856 ls 1857 git c ...

  9. [Tool]利用Advanced Installer建立x86/x64在一起的安装程式

    原文 [Tool]利用Advanced Installer建立x86/x64在一起的安装程式 之前使用InstallShield做安装程式时,如果要将程式放在Program Files的话,需要分别针 ...

随机推荐

  1. C# How to convert MessageBodyStream to MemoryStream?

    通过WCF服务从数据库取文档数据时,返回的是Stream对象,在DevExpress的PDFViewer显示时,用PDFViewer.LoadDocunent(Stream stream);方法时,报 ...

  2. swi prolog 与c#

    最近,玩了一下prolog语言,感觉还是很有意思.由于我是学c#的,所以就不禁想看看c#如何与prolog进行结合,在网上找了一下,发现有个swi prolog对c#的dll,下载官网:http:// ...

  3. IE不支持 ES6 Promise 对象的解决方案

    * 引入bluebird.js即可完美解决. /*ie兼容 Promise*/ isIE(); function isIE() { //ie? if ( !! window.ActiveXObject ...

  4. 数据结构——栈的实现(数组、Java)

    巩固数据结构 栈是一种有限制的线性表 只能对表尾进行操作 package com.shine.test.datastruct; import java.util.Arrays; public clas ...

  5. mach-o可执行文件结果

    使用工程:machoview

  6. jQuery 插入元素

    在被选元素的内部 prepend() 方法在被选元素的开头(仍位于内部)插入指定内容. append() 方法在被选元素的结尾(仍然在内部)插入指定内容.

  7. codeforce 788 A. Funtions again

    链接 A. Functions again 题意 这是一道求最大连续子序列和变形题. 做法 先将abs(a[i+1]-a[i]算出来,然后用两个数组dp[i],cp[i],dp维护其最大值,cp维护其 ...

  8. Django使用中常见的错误

    Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED   Django 执行makemigrations  的时候报错 ...

  9. 分治FFT/NTT 模板

    题目要我们求$f[i]=\sum\limits_{j=1}^{i}f[i-j]g[j]\;mod\;998244353$ 直接上$NTT$肯定是不行的,我们不能利用尚未求得的项卷积 所以要用$CDQ$ ...

  10. P1265 公路修建 (prim)

    题目描述 某国有n个城市,它们互相之间没有公路相通,因此交通十分不便.为解决这一"行路难"的问题,政府决定修建公路.修建公路的任务由各城市共同完成. 修建工程分若干轮完成.在每一轮 ...