科学上网

shadowsocks simple guild

一 服务器安装 shadowsocks

服务器安装 shadowsocks 的教程网上挺多的,这里就不多介绍了,下面这个链接是 githubgithub1 上的,然后最好在服务器上开启bbr 加速,教程链接

二 安装 shadowscoks 客户端

这里用的是 mac 的客户端 shadowsocks-X,可以直接在 github 的 release 下载客户端。还有个客户端的版本是 shadowsocks-NG,可以支持本地的终端 http 和 https 的代理,但是在我本子上不能用,所以就直接 pass 掉了,然后用了 privoxy 去做终端的代理,下面会具体介绍他。关于客户端的配置应该也挺简单的,不详细介绍啦。

三 privoxy 支持终端 http 代理

3.1 安装

  • brew install privoxy

  • 配置 privoxy 配置 vi /usr/local/etc/privoxy/config

  • 将 listen-address 默认的 8118 端口改成你想要的,我这里就不做改动了。

    listen-address  127.0.0.1:8118
    
  • 增加一行, 代表把所有匹配 / 的请求 (也就是所有请求),以 sock5 协议转发到 127.0.0.1:1080, 最后一个. 代表不转发到 http 代理

    forward-socks5 / 127.0.0.1:1080 .
    forward         192.168.*.*/     .
    forward            10.*.*.*/     .
    forward           127.*.*.*/     .
    forward          hello.test.com/ .
    

    这里解释下上面的配置:第一行就是把所有的代理请求以 sock5 协议转发到 127.0.0.1:1080。然后我为了方便直接在在全局变量里面把 http 代理设置成 privoxy 的地址了。

    export http_proxy=http://127.0.0.1:8118
    export https_proxy=http://127.0.0.1:8118
    

    这样会导致一个问题,就是一些本地或者是公司局域网的请求也会全部代理到 ss 服务器上,你就会发现这些请求失败了。所以下面的几行就是表示这些地址不做转发。

  • 启动 privoxy, brew services start privoxy

  • 记得把上面代理的命令加到文件 ~/.zshrc 或者 ~/.bashrc 文件里面去,然后执行 source ~/.zshrc 或者 source ~/.bashrc,看具体用户使用的终端而定。

这样终端的代理就好了,当你使用 gitgo get 之类的命令再也不用担心被墙了。

3.2 docker 代理

现在会有写小伙伴会在自己的本子上安装 docker,但是在拉去镜像的时候是不是也经常遇到拉去失败的情况,有了 privoxyss 就能解决这个问题啦。打开 docker 应用的 preferences 选项,选中 proxies ,下面有 httphttps 代理选项,把 http://127.0.0.1:8118 填入就可以很顺利的拉到被墙的镜像了。

3.3 minikube 代理

在本地安装 minikube 之后也会遇到被墙的情况。

基本思路也是和上面的一样,去走 http 代理,所以问题是怎么让 minikube 走代理呢。

步骤如下:

  • 修改 minikube 的配置文件 ~/.minikube/machines/minikube/config.json

        "HostOptions": {
            "Driver": "",
            "Memory": 0,
            "Disk": 0,
            "EngineOptions": {
                "ArbitraryFlags": null,
                "Dns": null,
                "GraphDir": "",
                "Env": [
                    "HTTP_PROXY=http://192.168.1.58:8118",
                    "HTTPS_PROXY=http://192.168.1.58:8118"
                ],
                "Ipv6": false,
                "InsecureRegistry": [
                    "10.96.0.0/12"
                ],
                "Labels": null,
                "LogLevel": "",
                "StorageDriver": "",
                "SelinuxEnabled": false,
                "TlsVerify": false,
                "RegistryMirror": [
                    "https://registry.docker-cn.com"
                ],
                "InstallURL": ""
            },
    
    

    需要修改的 json 配置就是 HostOptions.EngineOptions.Env,加上当前的代理。ip 即位本机 ip,然后重启 minikube

这里需要注意的一个问题就是需要改下 privoxylisten-address 配置。之前的是这样的

listen-address  127.0.0.1:8118

这监听的本机的应用,对于别的虚拟机访问会被拒绝。所以要进行如下修改:

listen-address  0.0.0.0:8118

四 其他 app 科学上网

mac 本子还有不少其他 app,这部分不支持 http 代理,比如邮件之类的,这个怎么办呢,就需要 proxifier 这个应用了。

这个应该也蛮简单的,教程在 这里, 暂时就先不整理啦。

五 分布式

到这里为止基本上就实现了 mac 全局翻墙了,但是抱着折腾的心态,最后再加个 nginx 代理吧。

nginx 支持了 tcp 层的转发,所以也可以支持 socket5,步骤如下:

  • brew install nginx

  • 修改配置文件 /usr/local/etc/nginx/nginx.conf,加入以下配置:

    stream{
        upstream shadows {
            server  shadowsocks.com max_fails=3 fail_timeout=10s;
        }
        server{
            listen 10080;
            proxy_connect_timeout 20s;
            proxy_timeout 5m;
            proxy_pass shadows;
        }
    }
    
    

    其中 shadowsocks.com 就是实际的服务器地址。

  • brew services start nginx

  • 把客户端的地址对应修改下