一直以来翻墙都是通过SSH Tunneling Proxy实现的,很久之前也记录过(见前文:如何使用火狐浏览器+SSH账号翻墙上外网),不过使用的工具是windows平台下的tunnelier,最近工作中转移到了Linux平台下,之前的虚拟机也抛弃了。工作、娱乐之余,难免需要翻越gfw这座大山看看外面的世界,于是我给很多同事和朋友开通了SSH帐号,算是做了一点小小的贡献。虽然搭建pptp或者l2tp等V*P*N更方便一些,但是对于很多朋友来说,只是在浏览一些特定的网站需要使用proxy,而其他网站则通过本地网络更为方便,所以采用Firefox+autoproxy来实现这个功能更为方便一些。下面是通过查阅一些资料整理的,在Linux下配置的过程。方法很多,但是最基本的原理是一样的,即通过SSH Tunneling实现的。

SSH Tunnel 属于port forwarding, 它建立在ssh连接上的一个加密的通道,利用它可以传输没经加密的数据从而达到安全的目的。创建了SSH Tunnel之后,你不用直接去访问远程的服务(假使你是连接某个远程服务),相反你访问你本机的某个端口,而SSH Client就会把你的数据通过已建立的加密通道转发到远程主机的目的端口去。

然后在Firefox浏览器中借助Autoproxy插件实现访问自动代理,随机切换。

配置前需要的工具如下:

  • SSH 帐户一枚(必需的)
  • SSH Tunnel 连接创建工具,如 SSH 命令,Plink 或 AutoSSH 等。
  • Firefox浏览器或者Chrome浏览器(一般Desktop Linux发行版都带有Firefox浏览器)

步骤一:建立_ssh_tunneling_proxy

在使用客户端连接 SSH Tunneling Proxy 之前,我们必需先通过相应的工具建立 SSH 隧道,常用的工具有原生的 SSH 命令+Shell脚本、 AutoSSH 及 Plink 等。

方法一:原生SSH命令

在终端输入如下命令,把username和hostip替换为你自己的IP地址,如果你的ssh server的端口不是默认的22,需要使用-p端口号指定ssh端口。

  1. ssh -N -v username@hostip [-p端口号] -D 127.0.0.1:7070

第一次连接时需要输入yes来确认接受证书,最后输入SSH密码。当看到如下提示时则表示连接成功,到这一步,我们就成功建立了SSH Tunneling Proxy。

  1. debug1: Authentication succeeded (password)

缺点:每次都需要输入密码,且命令选项记忆麻烦。

解决方法:将命令写成bash脚本,最简单的就是将上面的命令保存到文本文件中,然后赋予可执行权限,放到/usr/bin 等目录下,然后采用证书认证方法避免每次输入密码。方法如下:

执行如下命令,生成证书,按三次回车无需输入任何内容。

  1. ssh-keygen

进入SSH目录,打开id_rsa.pub,复制里面的所有内容,然后通过 ssh 连接到远程 ssh 主机,进入 ~/.ssh 目录,打开 authoried_keys 文件,把刚才复制于 id_rsa.pub 的内容粘贴进去。至于shell脚本就可以自己编写一个最简单的shell脚本了。

方法二:使用AutoSSH

使用方法与原生的SSH命令类似,只是提供了一个断线重连的功能,避免每次断开时重新输入命令的麻烦,在ubuntu下安装autossh命令如下:

  1. sudo apt-get install autossh

使用方法:

  1. autossh -M 2000 -N -v username@hostip -D 127.0.0.1:7070

当然我们也可以将这条命令保存到shell脚本中执行。

方法三:使用Plink

Plink 最大的好处在于可以指定密码,不必采用证书方式就可以不输入密码建立链接了。

安装方法:

  1. sudo apt-get install putty-tools

使用:

  1. plink -N -v username@hostip -D 127.0.0.1:7070 -pw password

把其中的username、hostip、password替换为我们的ssh用户名、主机地址、密码即可。

方法四:使用图形化工具gSTM

这个工具对新手朋们来说比较方便,gSTM全称Gnome SSH Tunnel Manager ,是一个 Linux 上用来管理 SSH Tunnel 的图形管理工具,方便用户建立多个 SSH Tunnel 隧道。

安装方法:

  1. sudo apt-get install gstm

使用可按照下图进行配置,比较简洁明了,最后到主界面点击start启动即可。

gstm

步骤二:配置Firefox/Chrome浏览器通过SSH Tunneling上网

一、Firefox+AutoProxy,配置步骤同Windows平台相同。

1.安装autoproxy插件,打开Firefox Browser

https://addons.mozilla.org/zh-CN/firefox/addon/11009

打开上述地址,然后点击添加到Firefox,重启后自动安装。

2.点击工具—AutoProxy首选项(也可以通过快捷键CTRL+ALT+E调出),选择代理规则—添加规则订阅,选择gfwList添加订阅。

3.再然后单击AutoProxy首选项中代理服务器—选择代理服务器—默认选择为SSH-D,确定!

4.新建一个标签页,在地址栏输入about:config。火狐提示我们可能会失去质保,点击我当然保证会小 心的啦!这时候打开了过滤器选项,我们输入network.proxy.socks_remote_dns,回车,双击找到的 network.proxy.socks_remote_dns,要看到它的值变为粗体的true。

到这里就配置完成了,我们可以输入www.twitter.com www.facebook.com等主页看一下能否访问了,当然前提是第一步已经配置成功了。这样我们的插件就可以帮我们自动判断是否需要通过SSH Tunneling访问网站了。我们也可以手动指定通过该网站访问,在火狐浏览器的福字旁边的下拉小箭头可以指定我们访问指定的网站时使用SSH Tunneling。

关于图文版的配置步骤,可以查看之前的文章如何使用火狐浏览器+SSH账号翻墙上外网

二、Chrome+autoproxy

1.如果没有Chrome浏览器首先需要安装Chrome,Debian系列Linux的方法:

  1. #添加证书
  2. sudo wget -q -O – https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add –
  3. #把下面的源添加到 /etc/apt/sources.list 文件中
  4. deb http://dl.google.com/linux/deb/ stable non-free main
  5. #更新数据库
  6. sudo apt-get update
  7. #安装 Chrome
  8. sudo apt-get install google-chrome-unstable

2. 在 Chrome 下可以利用 Switchy 中实现类似 Autoproxy 的自动规则功能

下载 Chrome Switchy 插件 http://switchy.samabox.com/,无法安装的话请从这里下载并安装:switchy_extension_1_6_3.zip

根据下图设置 Switchy 选项:

switchy_1

3 添加 Autoproxy 规则链接 http://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt

switchy_2

4.最后启用 Auto Switch 模式,如下图

switchy_3

到这里我们就可以通过chrome来访问gfwlist屏蔽的网站了。

总结:

通过这次的配置,大致了解了SSH Tunneling原理。学习了SSH证书认证方式。

在安装过程中,我一直在采用aptitude替代了apt-get,但是由于大多数ubuntu发行版没有附带aptitude工具,我把文章中的aptitude替换成了apt-get。

配置过程主要参考如下几篇文章:

Ubuntu Linux下通过SSH Tunneling+Firefox Autoproxy翻墙
Tagged on:

发表评论

电子邮件地址不会被公开。 必填项已用*标注