利用 XMPP 协议实现 VPN

这主意是我一同学想到的(至少是他告诉我的),基于一种实际的需要。假设你有两台内网机,都没有公网地址,你想从一台机器访问另一台机器的服务,这时要怎么办呢?当然很可能是我无知了,就我所知,网上倒是有一些提供这类服务的网站,但都是基于 Windows 的远程桌面的,至于 Linux ,我没找过。

于是那家伙联想到了 IM Bot 这种东西。现在网上有各种各样的 IM Bot ,可以通过与之聊天执行各种各样的自动化任务,那为什么不能让它把发过去的命令交给另一台机器的 Shell 执行,并把结果返回呢?这不就实现了一个简单的 Telnet 了吗?这就是最初的想法了(我没去找现成实现,因为我也该练练手了)。而我刚好才折腾过 OpenVPN ,于是就有了标题所说的这个最终想法。这样的话,就能一下子从只支持一种应用协议到支持几乎所有的应用协议了,而且实现的工作量也同时减到了最低。真是好主意啊,自我夸奖一下 :-)

其实真正解释起来是很简单的想法啦,就是把从虚拟网卡读到的 IP 包,base64 一下,当聊天内容发给对端就万事 OK 。

选择 XMPP 当然不仅是因为它的开放性,最重要的原因就是有一个现成的冤大头给我们利用,就是 Google 啦,而且还有在线的聊天记录供调试用,何乐而不为呢 :-)

实现这个想法的关键就两点,一是 XMPP 协议库,Python 的有好几个;二是对虚拟网卡的读写,Linux 下有现成的虚拟网卡,Windows 也有,不过要另装,而 Python 的标准库就完全能实现对其的读写了。不愧是胶水语言啊。

目前来说,一个还只支持 Linux 的阳春版已经实现出来啦,在这里,欢迎大牛们前去参观。

之后的开发可能会转向 C 也可能不会,就看 Python 在 Windows 下的表现啦(当然也可能是应用户需求)。

 
comments powered by Disqus