一个博客

更好的姿势科学上网

shadowsocks-gui以及很久没更新了,所以打算换成cli的方式科学上网,这里得解决几个问题,因为之前一直用着gui,很多东西gui都帮我解决了,比如自动设置代理pac,全局以及自动模式的切换,以及socks5跟http代理的切换。用了cli的话你得自己去解决这些问题。

安装依赖

brew 安装 shadowsocks-libev,然后指定config.json文件

{
    "server": "xxxxxx.com",
    "server_port": 1234,
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "password": "************",
    "timeout": 120,
    "method": "aes-256-cfb"
}

接着安装 polipo 用来实现不支持socks5代理的程序走socks5代理,比如终端,polipo会把socks5代理转为http代理,这样程序指定下代理就能愉快的翻墙了,同样用 brew 安装 polipo, 指定polipo的配置文件

socksParentProxy = "127.0.0.1:1080" // 这里的1080端口对应ss的local_port
socksProxyType = socks5

到这里,依赖都安装成功了

部署起来

现在指定系统走ss的代理,这里需要一个pac文件,我希望国内ip直连,国外ip走代理,所以需要一个分流的pac文件,谢天谢地,我谷歌了一圈给我找到一个符合要求的pac文件,下载戳这里http://foryoung365.github.io/attachments/pac.txt,下载完之后重命名为pac.pac,需要修改下对应的端口以及ip

var proxy = "SOCKS5 127.0.0.1:7070; SOCKS 127.0.0.1:7070; DIRECT";` // 7070改成你ss的local_port
if (isPlainHostName(host)
     || host === "127.0.0.1"
     || host === "localhost") {
        return "DIRECT";
    }

改成

if (isPlainHostName(host)
     || host === "127.0.0.1"
     || host === "localhost"
     || host === "你的VPS主机的IP") { // 因为ss是部署在我自己的国外vps上面,假如也走代理,会出现死循环(待验证)
        return "DIRECT";
    }

把修改完的pac丢到你的本地服务器进去(因为指定代理文件需要一个http地址),然后代理配置文件的url指定为这个pac文件的路径

ss的配置就完成了,接着运行 ss-local -c ss.config.json 启动ss

我们继续解决终端类程序不支持socks5代理的问题,polipo -c polipo.config 启动polipo服务之后,默认会监听本地8123端口,这里用iterm2做例子,因为iterm2这类终端走代理的时候会用到 http_proxy 以及 https_proxy 这两个变量,所以我们只需要指定这两个变量指向我们刚刚polipo绑定的端口上面就行

export http_proxy=http://127.0.0.1:8123 // polipo 监听的端口
export https_proxy=$http_proxy

然后用 curl https://www.google.com 就能验证代理结果,取消代理也很简单

unset http_proxy https_proxy

你可以写个脚本做这类事情,这样就不需要每次都输入这几个命令

161224 append:

增加启动参数-u -A开启 udp 转发还有单次认证

参考来源

OSX科学上网方案

如何用VPS+Shadowsocks科学上网

给 iTerm 终端设置代理

https://shadowsocks.org/en/spec/one-time-auth.html