使用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记录,例如:

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

设置daemon(守护进程)

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

使用以下命令运行iodine daemon:

-f 在前台运行

-c 禁用检查所有传入请求的客户端IP地址

-P secretpassword 客户端和服务器之间用于身份验证的共享密钥详情

10.0.1.1 是服务器将在tun接口客户端上提供的IP。客户端将在该范围内给出下一个IP。

ourdomain.com 是我们之前设置的DNS服务器的域名。

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

以及

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

START_IODINED true

IODINED_ARGS -c 10.0.1.1 ourdomain.com

IODINED_PASSWORD secretpassword

配置检查

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

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

运行客户端

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

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

DNS隧道已成功建立!

设置代理

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

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

-N 指示SSH不要启动shell,因为我们只是想创建代理

-D 设置动态端口转发,SOCKS代理端口为8080

user 我们服务器上的用户

10.0.1.1 tun接口上的iodine服务器

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180730B1F0F300?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动