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

我的命令:

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查询数据来构建隧道传输数据。

20170504149388370440234.png

  • 环境准备

    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

    大概就是这个样子
    20170504149388531046350.png

  • 工作过程

    配置好上述过程后,当本机查询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 否则会出段错误

    连接成功截图:

    20170504149388751967237.png

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

0x03 免费上网

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

20170504149389550428162.png

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

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

2017050414938880125404.png

​ 其中,地址为在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记录的域名。运行以上命令后,你会看到类似下面的输出:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Opening device Local Area Connection 2
Opened UDP socket
Opened UDP socket
Opened UDP socket
Sending DNS queries for iodine.cwaffles.co.cc to 74.63.253.53
Autodetecting DNS query type (use -T to override).
Using DNS type NULL queries
Version 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.1
Testing raw UDP data to the server (skip with -r)
Server is at 74.63.253.53, trying raw login: OK
Sending raw traffic directly to 74.63.253.53
Connection setup complete, transmitting data.
上面的74.63.253.53是你服务器的ip地址。
现在,你可以测试下是否能够Ping同10.0.0.1这个服务器了:
ping 10.0.0.1 /t
如果Ping通了,一切顺利。
现在,即使你的电脑打开浏览器的时候跳出让你输入密码认证的页面,即使你不输入认证,你也可以上网了。前提是,你还需要进一步的设置。
6. 通过虚拟内网地址登入服务器
如果你以前用过SSH连接代理服务器,并拿它来翻墙,接下来的设置很简单,因为两者是一样的。但是,如果你以前连翻墙都不会,也不会通过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
官方网址 :http://code.kryo.se/iodine/
 
 

运行示例:

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

客户端:

成功建立隧道客户端会得到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隧道进行上网了。配置示例如下图。

20170917-0.png


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,一般多试试就会连接成功了。

转载于:https://www.cnblogs.com/bonelee/p/8059464.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
root:$6$RMpgG8z.$GrGzDK0J1/uXc/Z2WIp6WgIYEB6Bi/Sw2aCc86U2E.BK80mszROf4K1ZB172DOQzgRb6U/2jGPh/8rwXQsbM3/:17277:0:99999:7::: daemon:*:17272:0:99999:7::: bin:*:17272:0:99999:7::: sys:*:17272:0:99999:7::: sync:*:17272:0:99999:7::: games:*:17272:0:99999:7::: man:*:17272:0:99999:7::: lp:*:17272:0:99999:7::: mail:*:17272:0:99999:7::: news:*:17272:0:99999:7::: uucp:*:17272:0:99999:7::: proxy:*:17272:0:99999:7::: www-data:*:17272:0:99999:7::: backup:*:17272:0:99999:7::: list:*:17272:0:99999:7::: irc:*:17272:0:99999:7::: gnats:*:17272:0:99999:7::: nobody:*:17272:0:99999:7::: systemd-timesync:*:17272:0:99999:7::: systemd-network:*:17272:0:99999:7::: systemd-resolve:*:17272:0:99999:7::: systemd-bus-proxy:*:17272:0:99999:7::: _apt:*:17272:0:99999:7::: mysql:!:17272:0:99999:7::: epmd:*:17272:0:99999:7::: Debian-exim:!:17272:0:99999:7::: uuidd:*:17272:0:99999:7::: rwhod:*:17272:0:99999:7::: redsocks:!:17272:0:99999:7::: usbmux:*:17272:0:99999:7::: miredo:*:17272:0:99999:7::: Debian-snmp:!:17272:0:99999:7::: ntp:*:17272:0:99999:7::: stunnel4:!:17272:0:99999:7::: sslh:!:17272:0:99999:7::: rtkit:*:17272:0:99999:7::: postgres:*:17272:0:99999:7::: dnsmasq:*:17272:0:99999:7::: messagebus:*:17272:0:99999:7::: iodine:*:17272:0:99999:7::: arpwatch:!:17272:0:99999:7::: couchdb:*:17272:0:99999:7::: avahi:*:17272:0:99999:7::: sshd:*:17272:0:99999:7::: colord:*:17272:0:99999:7::: saned:*:17272:0:99999:7::: speech-dispatcher:!:17272:0:99999:7::: pulse:*:17272:0:99999:7::: king-phisher:*:17272:0:99999:7::: Debian-gdm:*:17272:0:99999:7::: dradis:*:17272:0:99999:7::: beef-xss:*:17272:0:99999:7::: xrdp:!:17472:0:99999:7::: lightdm:*:17472:0:99999:7::: ctf:$6$d1Y17YhS$P1G.pKFO6VKvKx.y0H7nP5kXAHUAhj6hYroEA.ThT1/kErw37IhVclt.UWCFXrfq/sEZk1jhb52KlPWidJKpp0:17473:0:99999:7:::
07-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值