月度归档:2017年06月

在不可信网络下基于iodine建立DNS隧道

场景

不受信任的公共网络(如安装了审计设备的内网)、开启了WEB Portal认证的网络(如CMCC、ChinaNet)等。
注意:Win下直接使用iodine需要安装OpenVPN并且可能存在兼容性问题,建议通过虚拟机连接服务器然后开启端口转发。此外,网络速率与质量不会很高,延迟也会达到上百或数百毫秒。

原理

通过iodine将数据包封装为DNS请求,直接传输或通过DNS递归传输给自建的服务器再传送至互联网。当然,这个隧道只是联通了客户机与服务器,如果需要连接互联网,我们需要将本机通过位于服务器上的SS或SSH Tunnel等服务代理出去。

步骤

  • 获取iodine服务端与客户端,拥有一个公网IP地址的VPS服务器及域名。
  • 建立一个NS记录,如a.example.com值为b.example.com.
  • 建立一个A记录b.example.com,值为SERVER_IP
  • 服务端:执行iodined -f a.example.com,设置一个连接密码。
  • 客户端:执行iodine a.example.com,输入连接密码。
  • 完成连接,通过ipconfig(win)或ifconfig(Xnix)等命令即可看到一个名为dnsX的网络接口(X为连接序数,可以有多个DNS隧道在运行)。
  • 扩展

    iodine初步研究 – 小西的博客 | Xiaoxi’s Blog
    iodine README
    GitHub – yarrick/iodine: Official git repo for iodine dns tunnel

    毕业

    高考就这样结束了。
    我们终于抹去痕迹,离开这里,只留下在附中最美的记忆。

    总的来说,这是我高中三年以来发挥最好的一次——虽然仍有失误与遗憾。
    没有附中,我就不会取得这样的成绩。
    三年相伴,一生深情。