SSH 和 VPN 都是加密的、可靠的技术,都跨平台,所以很多人就产生了到底应该使用 SSH 还是应该使用 VPN 作为自己上网的辅助工具的疑问。

最近,我体验了 VPN 和 SSH 两种方式,对他们的共性和差异有了一些认识。

他们从原理上是不一样的。VPN 是虚拟专用网络,它虚拟了一个网卡,类似于一个数据隧道,使用 VPN 后,你连接到了一个新的网络连接,这个网络连接和你所使用的宽带连接、局域网连接等是平级的,(但实际上数据是先加密,再通过你其它的网卡发送的),如果你使用这种方式连接了网络,你的所有网络数据包都将通过 VPN 加密隧道发送。

SSH 则不同。他不是一个单独的网络连接,只是在现有网络连接内的一个协议。你使用一个客户端程序。该程序和远程服务器通过 SFTP 协议交互,在本地作为一个代理服务器,你将浏览器连接时所使用的代理服务器设置为本机,端口设置为本地代理服务器所在的端口,这样,你访问网络时的速度都通过了 SSH 服务器端的中转,而这中间的数据又是加密的,所以你就获得了一个加密、安全的网络环境。

由于这种原理上的差异,VPN 更接近底层,相当于一个新的虚拟网卡,更有“专用”的性质,而 SSH 更像加密的代理服务器,是在你现有的网络上的一个普通的连接。因此,如果你使用了 VPN 连接,你访问所有网站都将通过该 VPN 连接(除非你启用多个网络连接,并且手动编辑网关规则。这很麻烦,而且只能做到 IP 级别的过滤,不实用),在不需要使用 VPN 时,你必须断开 VPN 连接。对于企业网络,“所有数据通过 VPN”这样的模式是很有意义的。但是,很多情况下,我们只需要对部分网站使用加密连接,这时候,VPN 连接就显得有些浪费。

然而 SSH 则不存在这个问题。只要在你需要使用 SSH 时使用该 SSH 的客户端作为代理服务器,不需要使用时,直接访问网络,就可以轻松实现自动切换 SSH 和普通网络,在这期间 SSH 和你原来的网络连接都不需要断开或重连。

这样我们就可以清晰地看出该选择 VPN 还是 SSH 了:

  1. 如果你使用的软件没有设置代理的功能,你必须使用 VPN(除了浏览器,很多程序都是没有设置代理的功能的)。VPN 的全局性在这里发挥了很好的作用
  2. 如果你只是偶尔需要使用加密连接,最好使用 SSH
  3. 如果你在一个企业中,企业内使用 VPN,企业外使用普通网络,或全部使用 VPN 网络,请使用 VPN
  4. 如果需要通过网址快速切换加密和普通网络,请使用 SSH。(使用VPN则必须通过断线和重连来实现,速度很慢很麻烦)

有些人说 SSH 没有 VPN 速度快。经过我个人的测试,SSH 速度也很快,如果你的速度不够快,很可能的原因是你使用了 Windows 操作系统,使用 MyEntunnel 连接 SSH。MyEntunnel 内部使用的 plink.exe 有 30KB/s 的速度限制,推荐替换为无限制版。可以用迅雷点此下载该版本:http://tartarus.org/~simon/putty-snapshots/x86/plink.exe

目前我就是使用 SSH + Firefox 插件 AutoProxy 实现 SSH 上网的,效果很好。

(作者 Ceeji(http://ceeji.net),订阅。)