钉子の次元

Dimpurr – 千里之行,始於足下。

Ubuntu/Liunx 下 GoAgent 翻墙教程

GoAgent 翻墙成功

GoAgent 翻墙成功效果

因为在 Github 上下载的时候实在无法忍受 24 kb/s 的龟速……查了下资料, Linux 下好像比较常用 ssh 翻墙,但对我来说还是 GoAgent 比较熟悉,于是折腾了一下,最终搞定。上教程。

一、准备工作

1、申请 AppID 和 Win 下相同,本文假定已经成功申请到至少一个 AppID ,方法在此不再详述,需要的话请访问:http://blog.howgo.info/archives/3246.html

2、Ubuntu 已经自带 Python ,但是建议还是确认一下。终端 sudo apt-get install python

3、下载 GAE for Linux https://developers.google.com/appengine/downloads?hl=zh-CN

4、下载 GoAgent ,Win 和 Linux 是通用的, Linux 下直接用 .py 脚本运行 https://code.google.com/p/goagent/

二、上传服务端

如果已经在 Win 下或者其他时候上传过 GoAgent 服务端可跳过此步,无需重新上传。在此重新上传不影响其他平台使用。

1、先解压 GAE 和 GoAgent ,将 goAgent 放到 GAE 的 google_appengine 目录下

2、进入 GoAgent目录/server/python ,编辑 app.yaml ,填入 AppID 和 Version (默认是1)

3、进终端,使用  CD 命令进入你的 GAE 目录,然后激活位于你的 GoAgent 目录的上传脚本。

cd [GoAgent目录]/server
python uploader.zip

或者使用Python的内置同步脚本:

sudo python appcfg.py update [GoAgent目录]/server/python

随后在终端填入你的email和密码就能上传了。

三、配置客户端环境

1、安装 Gevent (非必须组件,若后面遇到问题可尝试安装):

sudo apt-get install python-dev curl -L -O https://github.com/python-greenlet/greenlet/archive/0.4.0.tar.gz && tar xvzpf 0.4.0.tar.gz && cd greenlet-0.4.0 &&
sudo python setup.py install curl -L -O https://github.com/downloads/surfly/gevent/gevent-1.0rc2.tar.gz && tar xvzpf gevent-1.0rc2.tar.gz && cd gevent-1.0rc2 &&
sudo python setup.py install

2、要正常使用gtk托盘以在托盘区显示图标,需要安装以下软件包(按需要选择):

sudo apt-get install python-appindicator
sudo apt-get install python-vte

四、配置客户端

1、在 GoAgent 的 local 目录中,有一个 proxy.ini 文件,将你的 AppID 填入

2、终端 CD 进 GoAgent 目录,激活客户端,如:

cd [GoAgent目录]/local
sudo python proxy.py

3、也可以赋予 proxy.py 可执行权限之后直接双击 proxy.py 运行,在 proxy.py 上面右击,属性的权限中勾选允许以程序执行文件即可。

4、运行 goagent-gtk.py 可以使用 GTK 托盘方式即在右上角显示小图标运行 GoAgent 。

五、其他问题

1、配置好 GoAgent 后使用方法同与Win下相同,只需要浏览器翻墙的话推荐 Chromium + SwitchProxy ,具体方法参见第一步中给出的申请 AppID 教程结尾处。

2、如果不止在浏览器中翻墙,还需要设置全局代理,可以访问 Ubuntu 系统设置 > 网络 > 代理 在http和https连接处填写 GoAgent 的本地端口地址 127.0.0.1:8087 ,然后点击应用即可。

如果桌面环境没有提供全局代理的设置,也可以手动编辑 /etc/profile 文件,在其中加入:

# 分别指定 HTTP HTTPS FTP 协议使用的代理服务器地址
http_proxy= 127.0.0.1:8087
https_proxy= 127.0.0.1:8087
ftp_proxy= # GoAgent 不支持 FTP
# 设置不使用代理的网址或者IP,用逗号分隔
no_proxy= 127.0.0.1, 192.168.1.1
# 设置环境变量
export http_proxy https_proxy ftp_proxy no_proxy

3、访问部分网站提示证书不受信任问题与 Win 下相同。解决方法是: Chromium 首选项 > 高级选项 > 管理证书,在 授权中心 导入 GoAgent/local 目录下的 CA.crt 证书,注意不要导入到 服务器 ,否则不起作用。在 授权中心 找到 GoAgent CA 修改信任设置为全部选中,其他浏览器相同。重启浏览器生效。

4、启动后似乎会自动创建桌面图标,如果没有,可以尝试以下办法(别忘了更改为对应路径):

在桌面新建一个空白文档,命名为 GoAgent.desktop ,然后使用 gedit 或其他文本编辑器打开,然后输入:

[Desktop Entry]
Type=Application
Name=GoAgent
Comment=GoAgent Start
Categories=Network;Proxy;
Exec=sudo python [GoAgent目录]/local/goagent-gtk.py
Icon=[GoAgent目录]/local/goagent-logo.png
Terminal=true
StartupNotify=true

这是唯一一种可以和Win下一样正常显示代理窗口的方法,不过每次都要输入一遍账户密码。也可以不让 GoAgent 在终端显示,只需要将 Terminal=true 改成 Terminal=false 。最后别忘了更改一下权限:

sudo chmod 777  [GoAgent目录]/local/proxy.py
  1. dimpurr说道:

    唔,订正了一些错误。这篇应该是目前最详细的教程了吧。刚照着折腾了一遍的说……

    1. 楼主说道:

      楼主好,问下怎么解压 下的这个文件

      1. Dimpurr说道:

        使用 tar -xzvf (文件名) 即可,或者常用压缩软件都支持打开

  2. haze说道:

    每日打卡,打卡时间:下午5:12:29

  3. lazydao说道:

    运行 goagent-gtk.py 出现如下错误:

    “
    Traceback  ( most recent call last ) :
    File "proxy.py" , line 2522, in 
        main()
    File "proxy.py" , line 2493, in main
        CerUtil.check_ca()
    File "proxy.py" , line 2522, in check_ca
        ***************************
    
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 18: ordinal not in range(128)
    Exception KeyError(147449452,) in  ignored
    "

    请问应该怎么解决,,,感谢!

    1. dimpurr说道:

      貌似是编码的问题,搜索了一下好像只有说改源码的……
      说不定是下载时损坏了?

      1. lazydao说道:

        这么囧,那我重新下载试试~

        1. lyndonneu说道:

          兄弟,这个问题解决了么,我也是这个问题啊。
          你是怎么解决的啊?
          谢谢!貌似不是下载问题/

          1. lazydao说道:

            木有解决,,,暂时没有弄了

          2. Dimpurr说道:

            这个问题是因为 Python 环境的默认编码和文件编码不同造成的,解释器在运行时需要把文件编码转为 Unicode 再运行。

            可以在终端进入 Python 命令行后用以下代码查看环境默认编码,然后将出错的文件使用此编码保存:

            import sys
            print sys.getdefaultencoding()

            或者如果知道出错脚本的编码,试试编辑一下那个脚本,在最顶上加入以下三行:

            import sys
            reload(sys)
            sys.setdefaultencoding('utf-8') #将 utf-8 改为脚本的编码
            1. 馒头说道:

              开始我也以为是下载损坏了。。。刚刚照你说到把代码加到proxy.py就好了。
              不过为什么你没有问题?
              还有google_appengine SDK 起作用了没有啊? 把goagent放到他目录下就起作用了?

              1. Dimpurr说道:

                不是很清楚,估计系统的语言环境什么的配置影响到了编码吧……

                google_appengine 这玩意儿只是上传时需要的,如果已经上传好了服务端完全不需要…… 所以说上传后 GoAgent 放在哪都行。

  4. CJ说道:

    这篇是从无到有的配置啊,我本来想找设置全局goa,你如果从Github下载那是需要全局配置的了?

    1. CJ说道:

      顺便说一下,blog做得挺好看的,大叔年龄翻你一倍还多了,独立域名技术blog还在酝酿脑子里。

    2. dimpurr说道:

      唔 …… 抱歉没有听明白意思,是说设置系统全局代理的办法么?如果是的话,刚才更新了一下文章 5.2 设置全局代理的部分,可以参考一下的说。

      谢谢夸奖呢,一起加油吧~

  5. CJ说道:

    我在g+找到你了,g+的背景主题有点像化物语啊

  6. dayuii说道:

    我会说我搞不定吗?最后哦用了hosts文件上上基家没问题了。

  7. 灰猫说道:

    我用了楼主说的,在proxy.py最上面加了下面几句,

    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8') #将 utf-8 改为脚本的编码

    然后报了下面错误: SyntaxError: Non-ASCII character '\xe5' in file proxy.py

    然后我再在 proxy.py 文件最顶加上: #coding=utf-8 ,然后成功了。

    注意是 #coding=utf-8 ,而不是 coding=utf-8 ,很多人以为#是注释

    1. Dimpurr说道:

      原来编码信息可以这么写么 …… 好厉害

  8. 袅残烟说道:

    话说可以转载么??终于看到了如此之详细的…太感谢了!

    以上!

  9. 袅残烟说道:

    elementary OS测试了…貌似不行了啊

  10. ChiAn说道:

    你好,我在终端输入python proxy.py 后,显示如下
    Traceback (most recent call last):
    File “/home/chian/goagent/local/proxy.py”, line 2746, in
    main()
    File “/home/chian/goagent/local/proxy.py”, line 2723, in main
    server = LocalProxyServer((common.PAC_IP, common.PAC_PORT), PACProxyHandler)
    File “/usr/lib/python2.7/SocketServer.py”, line 419, in __init__
    self.server_bind()
    File “/usr/lib/python2.7/SocketServer.py”, line 430, in server_bind
    self.socket.bind(self.server_address)
    File “”, line 1, in bind
    socket.error: [Errno 98] Address already in use
    Exception KeyError: KeyError(22423024,) in ignored
    请问这是什么原因呢

    1. joeybrown说道:

      hello 请问你这个问题解决了吗
      我也遇到这个问题了 哭

      1. BearChang说道:

        重启一下,不要让进程重复

  11. 小板凳说道:

    大榭楼主!

  12. Juiceyang说道:

    多谢博主!

    经过指导终于知道证书导入方法了!

  13. Vv_fan说道:

    很棒的文章 谢谢博主

  14. levi说道:

    在python proxy.py 的时候
    Traceback (most recent call last):
    File “proxy.py”, line 52, in
    import sysconfig
    ImportError: No module named sysconfig
    报了这样到错是什么情况?

    1. Dimpurr说道:

      检查一下 Python 版本,试一下 Python 2 和 Python 3

  15. 界外魔阿历克斯说道:

    从google找到的,亲测好评~
    如果可以再顺便提一提配合chrome或者firefox的插件使用就更完整了。
    博客很漂亮,博主也是连青有为的少年w
    已关注知乎&G+。

  16. oboorange说道:

    po主提供的greenlet和gevent安装方法不能用

    提供下我的安装方法(安装完python后,安装下setuptools以便使用easy_install)

    安装的greenlet: sudo easy_install greenlet

    安装gevent有两种方法
    1.使用pip安装最新的开发版本
    安装pip:sudo easy_install pip
    然后:sudo pip install cython git+git://github.com/surfly/gevent.git#egg=gevent

    2.安装最新的发行版
    到https://pypi.python.org/pypi/gevent 下载xxx.tar.gz 文件
    cd [下载目录]
    tar -zxvf xxx.tar.gz
    cd [解压目录]
    sudo python setup.py install

    但我始终无法sudo python proxy.py
    总是提示我:please install python-gevent

    1. oboorange说道:

      我知道了
      原因:
      系统原来带有python 2.7.6
      而新装的python 2.7.8 的解释器没有导入系统

  17. 说道:

    你好,上面所讲的运行 goagent-gtk.py 可以使用 GTK 托盘方式即在右上角显示小图标运行 GoAgent 不是很明白,ubuntu菜鸟求告知。

    1. Smile_line说道:

      就是在通知栏右上角上有个图标,像键盘那样

  18. a说道:

    问题是在没有翻墙前, 到哪底又能先下载google_appengine_1.9.12.zip呢? https://developers.google.com/appengine/downloads?hl=zh-CN 是打不开的

    1. Dimpurr说道:

      国内有很多热心人做镜像源的,用好搜索引擎就好。

  19. Smile_line说道:

    为何我的chrome无法导入CA证书?一直显示unknown error?
    百度了下面的方法:
    1,安装证书导入工具:
    sudo apt-get install libnss3-tools
    2, 将goAgent文件夹内的证书文件CA.crt导入(下面中括号内是证书的绝对路径,因人而异,注意)
    certutil -d sql:$HOME/.pki/nssdb -A -t TC -n “goagent” -i [/path/to/goagent/local/CA.crt]

    还是导入不了,好郁闷,ubuntu

    1. Smile_line说道:

      另外,如果用命令指示符装证书一直显示: unable to open “/goagent/local/ca.crt” for reading (-5950, 2).
      只有进到local目录,才能读到文件,但是又显示 bad datasheet
      接着用sudo,就没显示啥了。
      但是还是导入不了证书

  20. 大步说道:

    gae现在是备用的了,很多网站直接屏蔽了其访问,所以现在都直接上vpn

    1. Smile_line说道:

      请问如何设置

  21. wolfking说道:

    哥哥,你那些下载好了的包能直接舔个附件没有?去google被墙了阿

  22. wonderkun说道:

    我非常喜欢这个wordpress主题,但是它不支持自定义菜单,你是怎么弄得啊? 给教一下好吗
    我的邮箱是 729173164@qq.com

    看到我的评论,加一下好友 ,多谢啦

  23. dosh说道:

    Google AppEngine 也被墙了得嘛~~ 这个方法不好使了~

  24. Andy说道:

    现在这个项目已经转移了 hoho

  25. wjvstoo说道:

    求解决啊,照着弄一直是这
    “Traceback (most recent call last):
    File “proxy.py”, line 1496, in
    class AdvancedProxyHandler(SimpleProxyHandler):
    File “proxy.py”, line 1511, in AdvancedProxyHandler
    openssl_context = OpenSSL.SSL.Context(OpenSSL.SSL.TLSv1_METHOD)
    AttributeError: ‘NoneType’ object has no attribute ‘SSL’
    Exception KeyError: KeyError(3067426652L,) in ignored

  26. Erick说道:

    好像现在的goagent上传application一直会报下面的问题,请问有没有一些意见/建议?
    Starting update of app: ********, version: 1
    Scanning files on local disk.
    Cloning 4 application files.
    Uploading 1 files and blobs.
    Uploaded 1 files and blobs
    Compilation starting.
    Compilation completed.
    Starting deployment.
    2015-01-11 16:49:33,083 ERROR appcfg.py:2128 An unexpected error occurred. Aborting.
    Traceback (most recent call last):
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 2114, in DoUpload
    app_summary = self.Commit()
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 1905, in Commit
    app_summary = self.Deploy()
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 1957, in Deploy
    result = self.Send(‘/api/appversion/deploy’)
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 1698, in Send
    return self.rpcserver.Send(url, payload=payload, **self.params)
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appengine_rpc.py”, line 365, in Send
    f = self.opener.open(req)
    File “/usr/lib/python2.7/urllib2.py”, line 404, in open
    response = self._open(req, data)
    File “/usr/lib/python2.7/urllib2.py”, line 422, in _open
    ‘_open’, req)
    File “/usr/lib/python2.7/urllib2.py”, line 382, in _call_chain
    result = func(*args)
    File “/usr/lib/python2.7/urllib2.py”, line 1222, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
    File “/usr/lib/python2.7/urllib2.py”, line 1187, in do_open
    r = h.getresponse(buffering=True)
    File “/usr/lib/python2.7/httplib.py”, line 1045, in getresponse
    response.begin()
    File “/usr/lib/python2.7/httplib.py”, line 409, in begin
    version, status, reason = self._read_status()
    File “/usr/lib/python2.7/httplib.py”, line 373, in _read_status
    raise BadStatusLine(line)
    BadStatusLine: ”
    Rolling back the update.
    Traceback (most recent call last):
    File “uploader.py”, line 103, in
    main()
    File “uploader.py”, line 86, in main
    upload(‘gae’, appid)
    File “uploader.py”, line 69, in upload
    appcfg.main([‘appcfg’, ‘update’, dirname])
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 3873, in main
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 2443, in Run
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 3638, in __call__
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 2865, in Update
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 2854, in UpdateVersion
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 2114, in DoUpload
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 1905, in Commit
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 1957, in Deploy
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appcfg.py”, line 1698, in Send
    File “/home/erick/Projects/goagent/server/google_appengine.zip/google/appengine/tools/appengine_rpc.py”, line 365, in Send
    File “/usr/lib/python2.7/urllib2.py”, line 404, in open
    response = self._open(req, data)
    File “/usr/lib/python2.7/urllib2.py”, line 422, in _open
    ‘_open’, req)
    File “/usr/lib/python2.7/urllib2.py”, line 382, in _call_chain
    result = func(*args)
    File “/usr/lib/python2.7/urllib2.py”, line 1222, in https_open
    return self.do_open(httplib.HTTPSConnection, req)
    File “/usr/lib/python2.7/urllib2.py”, line 1187, in do_open
    r = h.getresponse(buffering=True)
    File “/usr/lib/python2.7/httplib.py”, line 1045, in getresponse
    response.begin()
    File “/usr/lib/python2.7/httplib.py”, line 409, in begin
    version, status, reason = self._read_status()
    File “/usr/lib/python2.7/httplib.py”, line 373, in _read_status
    raise BadStatusLine(line)

  27. Menci说道:

    刚才进这个页面刷新了N次都是链接被重置….是不是有被G*W认证的危险啦……..

    1. Dimpurr说道:

      不要把我整个博客认证了就好 Orz

  28. Menci说道:

    还有就是感觉GA不如SS好用 SS在服务器配置好之后直接客户端跑个py脚本就行而且是socks5 GA好像只能代HTTP?

    1. Dimpurr说道:

      嗯,自己现在也都是 FqRouter / GoAgentX 跑 SS 了。 GoAgent 只作为备用。

      1. wayne说道:

        博主,求linux shh翻墙教程

  29. s4n说道:

    Goagent Windows版的可以直接拿到Ubuntu下跑吧

  30. 妖怪兽说道:

    goagent goproxy xx-net 的服务端可以共用的对吗?