Ubuntu 下爬“长城”之终极篇

刚刚看到这篇文章准备给 Ubuntu 9.10 开机速度提速的时候,添加了文中提到的 PPA 并执行 sudo apt-get dist-upgrade 之后却发现 LaunchPad 的服务器太慢了,按照那个蜗牛般的速度,我一个小时也安装不了 ureadahead ,既浪费时间,还无辜消耗生命,正好我有可利用的资源,可以加速 LaunchPad 在国内的下载速度,当然,顺便把我所知道的 Ubuntu/Linux 下爬“长城”的终极大法全部总结出来!

Ubuntu 下目前效率最高,最稳定,速度最快,最简单的爬“长城”的方法莫过于 SSH 端口转发和 VPN (分 PPTP 和OpenVPN 两种方式)了,本文将逐一介绍,最终目的是绕道加速国外某些网站/服务器的下载速度,并顺便搞定你正常方式打不开的那些网站,以获取 Linux 资讯网站 Tuxmachines 上介绍的  Blogspot 等网站上的重要 Linux 学习资源。

Ubuntu 下使用 SSH 实现端口转发绕道访问目标服务器

一般的 Linux 系统都自带 SSH 的客户端工具 openssh-clients,无须安装其它的客户端(Windows 下需要 PuTTY 或者 SecureCRT 或者 MyEnTunnel 等工具) 就可以通过 SSH 端口转发来实现爬“长城”的目的!只需要一个命令连接上 SSH 服务器,然后通过本地端口转发,就可以实现 Firefox 浏览器通过SSH 加密隧道连接上远程 SSH 服务器,然后通过这个服务器再访问整个互联网。

ssh -qTfnN -D 7070 [email protected]

这个命令里面,其中 7070 是要建立加密隧道的本地一个未占用的端口,[email protected] 分别指代你的 SSH 服务器的用户名和密码。

Ubuntu 下使用 ssh-D 端口转发

在终端中输入这个命令,回车,然后输入密码,即可建立 SSH 端口转发了。这个命令的好处是即使你关闭了终端窗口,ssh 仍然会在后台运行,成功建立了一个 ssh 加密代理后,设置你的 FireFox 浏览器的 socks 代理服务器为 127.0.0.1 端口为 7070 即可绕道访问正常情况下打不开的目标网址了。

Firefox 代理服务器设置

依次点击 Firefox 浏览器菜单栏的“编辑”/首选项,切换到“高级”选项卡,在切换到“网络”子选项卡,点击配置 Firefox 如何连接到英特网后面的“设置”按钮

配置 Firefox 代理服务器

选择“手动配置代理”,然后设置 Socks 的代理服务器为 127.0.0.1:7070 即可。如上图。现在试试 http://pengjiayou.blogspot.com 是否能够正常打开了呢?

使用 expect 防止 sshgfw 代理断线

使用 ssh 端口转发来访问正常情况下打不开的网站,要保证绕道经过 ssh 代理服务器后,ssh 服务器能访问到你需要访问的目标网站,因此你需要一个开启 ssh 端口转发的非中国大陆境内的服务器,一般来说,你可以通过购买国外的主机或者 VPS 服务器获得,我在这里推荐 BluehostVPSlink 主机,前者是虚拟主机,后者是 VPS 提供商,两者都非常稳定,而且速度快!

用 ssh -D 代理后,你就再也不用为点击某个链接被重置的情况烦恼啦。在 Linux 中使用 ssh -D 连接代理服务器时过一段时间总会断线,于是有人用 expect 写了一个脚本,不担可以防上 ssh 断线,还可以自动输入密码。首先你需要在 Ubuntu 9.10 下安装 Expect

sudo apt-get install expect

安装完 Expect 之后,用 Gedit 新建一个文件,命名为 fuckgfw ,并将其保存在 /home/username 目录下

#!/usr/bin/expect
set timeout 60

spawn /usr/bin/ssh -D 7070 -g [email protected]
# 这里的 user 为你自己的用户名,yourserver.com 为你自己的服务器域名或 ip
expect {
“password:” {
send “password\r”
#这里的 password 改为你自己的密码
}
}
interact {
timeout 60 { send ” “}
}

如下图所示

screenshot_025

给 fuckgfw 文件添加可执行权限 chmod a+x fuckgfw ,然后每次在链接被重置之后执行 ./fuckgfw 就可以建立 ssh 机密隧道。

screenshot_026

同样按照上面提到的方法,更改 Firefox 的 socks 代理服务器为 127.0.0.1:7070  ,就可以使用 Firefox 打开刚刚连接被重置的网页了。

安装并设置 Firefox 的 AutoProxy 插件

通过上述方法,你就可以打开正常情况下打不开的网页了,但是,将 Firefox 的 socks 代理设置好了以后,所有网页,不分国内国外,也不管正常情况下能不能正常打开的国外网页一律通过 ssh 绕道访问了,由于我们大多数情况下访问的都是中国大陆地区的网页,所以通过 ssh 服务器间接访问之后速度会比较慢,而且,频繁更改 Firefox 的 socks 代理也是件让人头大的事情,在这种情况下,你需要 AutoProxy 代理来帮忙。

首先,点击这里 https://addons.mozilla.org/zh-CN/firefox/addon/11009 安装 Autoproxy 插件。

安装 Autoproxy 插件

点击 “添加到 Firefox” ,出现上图所示的对话框,点击立即安装,安装成功后后,重新启动Firefox。然后你会看到如下对话框,选择gfwlist (P.R.China)后,点击确定。
安装 AutoProxy 插件

接着你会看到Firefox主界面右上角出现有一个“福”字图案,点击“福”。

设置 AutoProxy 插件

点击“代理服务器——编辑代理服务器”。

设置 AutoProxy 插件

随即出现如下画面,你会看到如GAppProxy、Tor和Your Freedom这样一系列代理服务器名称。

设置 AutoProxy 插件

将GAppProxy一栏的参数修改为如下图所示。

配置 AutoProxy 插件

修改完毕后,点击确定。回到上图所示的 AutoProxy 首选项,点击“选择代理服务器”,选择 fuckGFW 。

screenshot_027

至此,AutoProxy 配置完毕。接下来,你可以无时无刻启用 AutoProxy 插件,启动之后 福 字是红色的。同时在需要代理的时候执行 ./fuckgfw 命令,遇到链接被重置的网页之后,添加一个规则,刷新 Firefox 即可。

设置 AutoProxy 插件

点击“代理规则”,然后“增加规则”,然后输入目标网址,然后刷新 Firefox 即可打开。

给 LaunchPad 下载加速

好了,基础知识讲完了,回到本篇文章的最主要的目的上来,那就是给 LaunchPad 安装软件加速。点击 系统/首选项/网络代理 也添加一个 socks 代理为 127.0.0.1:7070 的代理服务器。

Gnome 网络代理

这样,你就启用了 Gnome 全局 ssh 代理,通过 ssh 代理绕道下载 LaunchPad 上面的软件(即 ppa 软件源),下载的速度几乎完全取决于你的电脑和 ssh 服务器的数据传输速度,因此速度应该会提升不少,不用安装个软件要几个小时的等了。

使用 proxychains 让所有软件在 Linux 下爬“长城”

使用上面提到的办法,要么只能是 Firefox 能顺利爬“长城”,要么就是全部软件都爬长城了,一个在华留学的英国人介绍了一个这个 proxychains 软件,可以允许你在打开 ssh 端口转发的情况下让任何特定软件爬墙。首先安装 proxychains

sudo apt-get install proxychains

接着修改 proxychains 的配置文件 (sudo gedit /etc/proxychains.conf),我的配置文件如下:

# proxychains.conf  VER 3.1
#
#        HTTP, SOCKS4, SOCKS5 tunneling proxifier with DNS.
#

# The option below identifies how the ProxyList is treated.
# only one option should be uncommented at time,
# otherwise the last appearing option will be accepted
#
dynamic_chain
#
# Dynamic – Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped)
# otherwise EINTR is returned to the app
#
#strict_chain
#
# Strict – Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# all proxies must be online to play in chain
# otherwise EINTR is returned to the app
#
#random_chain
#
# Random – Each connection will be done via random proxy
# (or proxy chain, see  chain_len) from the list.
# this option is good to test your IDS 🙂

# Make sense only if random_chain
#chain_len = 2

# Quiet mode (no output from library)
#quiet_mode

# Proxy DNS requests – no leak for DNS data
proxy_dns

# Some timeouts in milliseconds
tcp_read_time_out 15000
tcp_connect_time_out 8000

# ProxyList format
#       type  host  port [user pass]
#       (values separated by ‘tab’ or ‘blank’)
#
#
#        Examples:
#
#                socks5    192.168.67.78    1080    lamer    secret
#        http    192.168.89.3    8080    justu    hidden
#         socks4    192.168.1.49    1080
#            http    192.168.39.93    8080
#
#
#       proxy types: http, socks4, socks5
#        ( auth types supported: “basic”-http  “user/pass”-socks )
#
[ProxyList]
# add proxy here …
# meanwile
# defaults set to “tor”
socks5     127.0.0.1 7070

保存,然后执行命令 “proxychains 你的软件 &” 比如 “proxychains google-chrome &” 就可以用 Google Chrome 打开 Blogspot 了。

执行命令: proxychains google-chrome &

Google Chrome 浏览器会自动打开,你可以用 Google Chrome 打开 Blogspot 了

screenshot_030

当然,你可以 sudo apt-get install twitux  安装 Tuitux 客户端,在没有可用的支持 Twitter API Proxy 的 Linux 下的推特客户端的情况下,你可以用 Twitux 上推特。

搞定 Network Manager 下的 PPTP VPN 连接

我在 VPSLink 的 vps 服务器上搭建了一个 PPTP VPN 服务器,不用一下简直浪费了,好吧,写一下教程先。要使用 Network Manager 链接 pptp vpn 服务器,你需要安装 network-manager-pptp

sudo apt-get install network-manager-pptp

然后,打开 系统/首选项/网络链接 ,切换至 VPN 选项卡

screenshot_031

点击 添加 ,选择 点对点隧道协议 PPTP

screenshot_032

按下图输入 pptp 服务器的用户名和密码

screenshot_033

点击 高级

screenshot_034

勾选 使用点到点加密和允许有状态的加密两项,确定,返回到刚才的对话框,应用并关闭,然后点击网络管理器的图标的下拉菜单,选择 VPN 连接,VPSlink 即可。

PPTP 链接成功之后,简单的可以理解为你的及其开了 ssh 代理并启用了 Gnome 全局代理,同样可以快速安装 LaunchPad 上面的软件了。

写这篇文章来来回回折腾了好几个小时,代价是今天没有上班,如果发现其中的错误,请留言指正,谢谢!

为了博客的安全,请不要传播我的博客链接,而是大肆传播此 PDF 文件(如果你认为有必要) http://fedora-zh.googlecode.com/files/The%20Ultimate%20Guide%20to%20Bypass%20the%20Greatwall%20under%20Ubuntu.pdf

谢谢

14 thoughts on “Ubuntu 下爬“长城”之终极篇

  1. truant

    我用的方法跟你的一模一样。哈哈。一种直接用命令,一种用脚本。我觉得用Putty好麻烦。每次都要点好几下鼠标,输入端口什么的。

    Reply
  2. TGSGG

    expect {
    “password:” {
    send “password\r”
    #这里的 password 改为你自己的密码
    }

    这两个password (“password:” 和 “password\r”) 都要换成实际的密码吗?有点乱,看不明白!

    Reply
  3. Yunkwan

    嘉佑 用 expect的那段代码里面的 双引号 应改为 ” 而不是 “(中文双引号),直接复制粘贴的话,用起来会提示错误的。

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *