使用lodine建立DNS隧道

最近我在我的一个VPS上设置了DNS隧道。这项技术对于绕过captive portals(强制登录门户),过滤器等非常有用。由于DNS是互联网不可或缺的重要服务,因此在大多数网络中通常都会放行53端口的进出数据流量。

虽然有时这些DNS请求仅限于白名单服务器或特定域,但你通常会发现DNS几乎是完全不受限制的,如果我们能控制管道的两端,那么我们就可以通过隧道来传输数据。

我们可以在端口53上设置一个SSH服务器或其它类似服务器,但在某些情况下ssh协议会被过滤,从而导致隧道建立失败。因此,通过DNS建立隧道才是我们最好的选择。

Iodine

为此,我们将用到一款名为iodine的工具。Iodine是一款DNS隧道制造工具,通过一台DNS服务器就可以为我们建立一个IPv4的数据通道,该工具常被渗透测试人员用于防火墙绕过等场景。

Iodine由我们在服务器上运行的DNS daemon(守护进程)组成,该守护进程侦听传入的DNS请求并解包隧道数据。另外,我们还有一个客户端用于处理隧道的另一端。

注册DNS服务器

首先,我们要做的就是将我们的服务器注册为DNS服务器。为此,我们需要一个域名。GoDaddy上有一些非常便宜的域名,并且支持隐私选项。这样也避免了我们的个人详细信息,被通过whois轻松地查找到。

获取域名后,我们必须在域名控制面板中为其配置NS记录,例如:

t1        IN    NS    ourdomain.com.        ; note the dot!

如果你手头已有一个现成的域,并希望你的iodine服务器能够使用其它的服务器,那么你可以先设置子域并注册iodine服务器的IP,然后将你的NS记录指向此子域即可。

t1        IN    NS    t1ns.ourdomain.com.        
t1ns        IN    A    <iodine-server-ip>

设置daemon(守护进程)

接下来我们要做的是在服务器上安装iodine。如果你当前使用的系统是基于debian的发行版,那么你可以像我一样使用apt install iodine命令进行安装。

使用以下命令运行iodine daemon:

iodined -fcP secretpassword 10.0.1.1 ourdomain.com

-f 在前台运行 -c 禁用检查所有传入请求的客户端IP地址 -P secretpassword 客户端和服务器之间用于身份验证的共享密钥详情 10.0.1.1 是服务器将在tun接口客户端上提供的IP。客户端将在该范围内给出下一个IP。 ourdomain.com 是我们之前设置的DNS服务器的域名。

如果你想要将iodine设置为在启动时运行,你可以使用以下命令启用该服务:

update-rc.d iodine enable

以及

service iodine start

来启动该服务。但你会发现此时启动会失败。想要顺利启动服务,我们必须要在/etc/defaults/iodine文件中设置daemon参数,如下:

START_IODINED true IODINED_ARGS -c 10.0.1.1 ourdomain.com IODINED_PASSWORD secretpassword

配置检查

基本配置完成后,我们可以通过iodine check页面来检查我们的配置是否正确。

如果配置无误但仍无法正常工作,那么请检查流量是否有被服务器上的防火墙捕获的情况。

运行客户端

在客户端机器上,我们只需运行iodine客户端即可。iodine的安装方法与上面是一样的,然后运行:

iodine -fP secretpassword ourdomain.com

你应该能够看到像Connection setup complete, transmitting data这样的输出信息。

DNS隧道已成功建立!

设置代理

为了使我们的浏览器或其他工具能够使用隧道,我们必须设置代理。我们将利用SSH动态端口转发,在本地创建SOCKS代理,所有的数据流量都将使用DNS tunnel并通过SSH连接到我们的服务器。

通过以下命令来设置代理:

ssh -N -D 8080 user@10.0.1.1

-N 指示SSH不要启动shell,因为我们只是想创建代理 -D 设置动态端口转发,SOCKS代理端口为8080 user 我们服务器上的用户 10.0.1.1 tun接口上的iodine服务器

设置完成后,我们就可以在浏览器中使用代理了。例如我们可以使用Firefox或Chrome中的FoxyProxy。如果一切顺利,你应该能够在浏览器中检查你的IP并获取你服务器的IP。

*参考来源:jmpesp,FB小编 secist 编译,转载请注明来自FreeBuf.COM

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-07-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在Ubuntu 14.04上保护Nginx

即使使用默认设置,Nginx也是一个非常安全可靠的Web服务器。但是,有很多方法可以进一步保护Nginx。

18120
来自专栏王清培的专栏

聊下 git 使用前的一些注意事项

连接方式https、ssh 在使用git的时候,不管你的服务器是开源平台github还是私服gitlab,你都需要clone仓库到本地,这个clone的时候就需...

21180
来自专栏Java后端技术栈

一步步带你了解前后端分离利器之JWT

HTTP 是无状态协议,它不对之前发送过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的 Web 页面本身无法进行...

12220
来自专栏Java技术栈

WEB攻击手段及防御第3篇-CSRF

概念 CSRF全称即Cross Site Request forgery,跨站点请求伪造,攻击者通过跨站点进行伪造用户的请求进行合法的非法操作,其攻击手法是通过...

34880
来自专栏网络

一步步带你了解前后端分离利器之JWT

一、HTTP的无状态性 HTTP 是无状态协议,它不对之前发送过的请求和响应的状态进行管理。也就是说,无法根据之前的状态进行本次的请求处理。假设要求登录认证的 ...

36750
来自专栏网络

如何使用Burp和Magisk在Android 7.0监测HTTPS流量

HTTPS拦截的基本方法 在Android平台上拦截HTTPS流量其实并不复杂,它只需要几步便可以实现: 1.将Burp设置为我们的代理; 2.访问http:/...

62370
来自专栏精讲JAVA

nginx+tomat https ssl 部署完美解决方案

转自:https://www.oschina.net/question/12_213459

17620
来自专栏我的博客

linux安装ssh服务

在 Ubuntu 中安装 openssh 实在是再简单不过的一件事情了,只需通过apt-get安装openssh-server即可。   sudo apt-g...

1.3K60
来自专栏SpiritLing

自己写的加密网页,与百度网盘私密很相似,需要密码才能访问(原创)

题记: 马上就要招聘了,所以我打算放置简历在自己的网页上,但是又不想给除了招聘的人,或者我指定的人外看,所以我需要对网页页面加密 我找了许多资料,查看了许多所谓...

60350
来自专栏贺嘉的专栏

如何用Baas快速在腾讯云上开发小程序之系列1:搭建API & WEB WebSocket 服务器

本文介绍小程序和服务号开发环境及云端软件安装部署; 通过实验操作掌握 Docker、 Git、Phabricator 等云端软件使用;帮助开发者掌握各云资源的创...

3.9K00

扫码关注云+社区

领取腾讯云代金券