polipo

tags: polipo

linux 下的 shadowsocks 不提供全局代理的功能,因此不得不寻找其他办法。

因此我们引入 polipo,在 shadowsocks 提供的 socks5 代理的基础上提供 http 代理。

PAC全局代理

参考资料:

具体做法如下:

  1. 安装 pip

    1. sudo apt-get install python-pip
    2. pip install --upgrade pip
  2. 安装GenPAC

    GenPAC 是基于gfwlist的代理自动配置(Proxy Auto-config)文件生成工具,支持自定义规则。

    1. sudo pip install setuptools
    2. sudo pip install genpac
    3. pip install --upgrade genpac
  3. 下载 gfwlist

    1. genpac -p "SOCKS5 127.0.0.1:11080" --gfwlist-proxy="SOCKS5 127.0.0.1:11080" --gfwlist-url=https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt --output="/home/sky/work/soft/pac/autoproxy.pac"
  4. 网络设置中,”网络代理” 设置为 “自动设置”

    url指向我们前面生成的 pac 文件,如 file:///home/sky/work/soft/pac/autoproxy.pac

HTTP全局代理

上面的 pac 全局代理方式,在有些情况下会无效,比如最常用的终端。主要时因为终端很多工具目前只支持 http 和 https 等协议,对 socks5 协议支持不够好.

参考下面这个文章的做法:

首先需要安装配置好 polipo, 提供 http 代理,具体做法见 前面内容

使用方法

polipo 安装好之后,在终端执行命令时加入 http_proxy=http://localhost:8123http_proxy=http://localhost:8123 curl ip.gs 即可。

为了方便,可以有两种优化方式:

  1. 加别名

    ~/.bashrc 中增加下列内容:

    1. alias hp="http_proxy=http://localhost:8123"
    2. alias sp="all_proxy=http://localhost:11080"

    需要时在命令前加 hp 或者 hp 即可,如 hp curl ip.gssp curl ip.gs

  2. 直接export

    如果觉得每次都加hp前缀麻烦,可以在 /etc/profile 中增加下列内容:

    1. export http_proxy=http://localhost:8123
    2. export all_proxy=http://localhost:11080

这样 shadowsocks 的 socks5 代理 和 polipo 的 http 代理配置,就可以覆盖绝大部分情况了。

使用策略

直接开启全局代理

直接开启全局代理的做法是:

  1. 设置系统网络代理为自动,这样大部分网络请求都走代理了
  2. /etc/profile 中直接加入 export http_proxy=http://localhost:8123

此时开机之后:

  1. shadowsocks 自动启动,提供 sockes5 代理
  2. polipo自动启动,在 shadowsocks 的基础上提供 http 代理
  3. 系统网络通过本地 pac 文件决定是否走 sockes5 代理
  4. 控制台等命令如果识别 http_proxy 则走 http 代理

测试过 chrome 浏览器,在安装 SwitchyOmega 的情况下,可以继续通过 SwitchyOmega 控制 chrome 的代理,”直接连接” / “系统代理” / “auto switch” 都可以工作。

需要时再开启全局代理

如果不想直接开启全局代理,可以这样:

  1. 网络设置那里修改为不用代理
  2. chrome等浏览器支持socks5代理的,直接设置为 shadowsocks (加自动判断)
  3. ~/.bashrc 中设置hp,sp的alias,需要时方便使用
  4. 对于某些上述方法都不生效的情况,需要单个处理(具体见下文)

需要单独设置代理的情况

git

如果是用http clone,则只要设置:

  1. git config --global http.proxy 'socks5://127.0.0.1:11080'
  2. git config --global https.proxy 'socks5://127.0.0.1:11080'

如果时用ssh cone,则麻烦一些。编辑或新建 ~/.ssh/config 文件,增加如下内容:

  1. # 这里必须是 github.com,因为这个跟我们 clone 代码时的链接有关
  2. Host github.com
  3. # 如果用默认端口,这里是 github.com,如果想用443端口,这里就是 ssh.github.com 详见 https://help.github.com/articles/using-ssh-over-the-https-port/
  4. HostName github.com
  5. User git
  6. # 如果是 HTTP 代理,把下面这行取消注释,并把 proxyport 改成自己的 http 代理的端口
  7. # ProxyCommand socat - PROXY:127.0.0.1:%h:%p,proxyport=6667
  8. # 如果是 socks5 代理,则把下面这行取消注释,并把 6666 改成自己 socks5 代理的端口
  9. ProxyCommand nc -v -x 127.0.0.1:11080 %h %p

参考资料: 设置socks5代理

注: 不用代理时从github clone的速度是几k到十几k,使用代理之后是3-5M!

npm

为 npm 设置代理(不过还是推荐用国内镜像):

  1. npm config set proxy http://localhost:8123
  2. npm config set https-proxy http://localhost:8123

idea

在 idea 的设置中,”http proxy”,可以设置为 “Manual proxy configuration”,然后选 HTTP,host 为”127.0.0.1”,port “8123” (即使用前面polipo提供的http代理),no proxy for “192.168.*,127.0.0.1”。

注: 在 idea 17.2 版本中,测试过,使用”auto-detect proxy settings”和 socks 代理,都会出现问题。通过”check connection”测试时,会发现连接 baidu.com 之类的国内网站OK,但是连接 facebook.com 等需要翻墙的网站时就会失败。只有http proxy 可以正常工作。