正确的科学上网姿势

前言

之前一直用那个Sha#dow#socks(以下简称SS),虽然SS一直更新,稳定,但长时间使用你会发现很多缺点:

  • 作为前端开发者,需要使用 NPM,但是 NPM packages 基本都开源在 GitHub,而 GitHub 的访问速度很慢(并没有被墙),而 GitHub 的静态资源都存储在亚马逊的 AWS 云服务器(被墙),所以下载 GitHub 上的开源代码很慢、几乎无法下载 GitHub 上的代码压缩包或者项目编译后的版本包;
  • 作为前端开发者,CNPM v4 在 Windows 上的兼容性不好,时不时会遇到一些莫名其妙的问题;
  • 大部分国外网站的访问速度都很慢,因为没有在中国大陆使用 CDN(内容分发网络),或者也有可能是 GFW 的原因。

所有这些问题,归根结底,在于 SS 使用的是黑名单 PAC。

黑名单和白名单

所谓黑名单,是指将“需要科学上网”的网址(域名)都记录在一个文件里,这个文件就是一份黑名单。科学上网软件通过判断将要访问的网址是否在黑名单里。该网站在黑名单里的话,就通过科学上网来访问该网址;不在的话,就不通过科学上网,直接连接。而白名单则相反。

可见,黑名单模式最大的弊端在于:要一直维护这份黑名单,否则哪天某个网站被墙了,而黑名单没有及时更新,就无法访问该网站了。

MEOW 的杀手锏

除了 SS,还有一个名为 COW 的项目也是大名鼎鼎,为什么也不用 COW 呢?其实 MEOW 是 COW 的一个 Fork 分支,它在 COW 的基础上,提供了智能分流的功能。 所谓智能分流,就是 MEOW 会自动判断哪些网址是中国大陆的网址,哪些是国外网址。对于大陆的网址,将会直接连接,不通过 MEOW 和 SS 服务;对于国外网址,通过 MEOW 和 SS 服务。

所以,MEOW 最大的好处是能节省科学上网服务的流量的同时,为访问国外网站“加速”。 个人认为,能通过判断 IP 地址所在地来决定是否使用智能分流,才是一个科学上网软件优秀与否的评判标准。MEOW 做到了,并为我节省了很多宝贵时间。

科普:为何智能分流能加速访问国外网站?

首先,为了能实现科学上网,科学上网服务的服务器都部署在中国大陆以外的各个地区(除非你是出国党想要翻回中国大陆,下文会提及),有香港、日本、新加坡、美国等……这些服务器扮演的角色是:我们的电子设备与目标网站的中间者。

  • 假如我们访问国内的网站,需要先经过位于国外的科学上网的服务器,再来到国内的目标网站,相当于兜了一个大圈,肯定很慢;
  • 假如我们要访问国外的网站(由于 GFW 的原因,本来很慢;或者没有使用 CDN),先经过科学上网服务的服务器(中间者),让不在 GFW 管辖范围内的这些中间者服务器将目标网站的内容快速地加载出来,然后直接传给我们的电子设备。这个过程虽然增加了中间者的角色,连接目标网站的时间要长一点,但是访问的速度加快了,整体而言也就是访问国外网站“加速”了。

MEOW 配合 SS 服务的使用方法

GitHub 的项目地址:https://github.com/renzhn/MEOW

各大系统平台下载地址:https://github.com/renzhn/MEOW/tree/gh-pages/dist/

下面以Windows平台为准:

打开下载好的压缩包,可以看到包含这么几个文件:

  • rc.txtrc-full.txt 都是 MEOW 的配置文件(以 rc.txt 命名的文件,才是真正起作用的配置文件。rc-full.txt 是带有详细描述的备份配置文件,用于理解各项配置的含义,需要重命名为 rc.txt,该配置文件才能起作用。);
  • MEOW.exe 是运行文件,双击它即可运行 MEOW;
  • direct.txt 是不使用 MEOW 的网址列表;
  • proxy.txt 是使用 MEOW 的网址列表;
  • reject.txt 是拒绝访问的网址列表,包含主流的用户数据追踪网站(例如友盟)、手机广告投放网站。

放在 reject.txt 里的网站都是无法访问的。如果平时需要使用友盟(umeng.com)的服务,请务必把 reject.txt 里的 umeng.com 和 umeng.co 删掉,保存,重新载入 MEOW。

设置

  1. 删掉 rc.txt 文件;
  2. rc-full.txt 文件重命名为 rc.txt(也就是说,这里使用带有详细使用说明的 rc-full.txt 文件的内容作为 MEOW 的配置);
  3. 用记事本或代码编辑器打开 rc.txt 文件。将下图中这几行的井号(#)去掉,使其生效:
    1. listen = http://0.0.0.0:4411 意思是在本局域网内(同一个路由器或 WiFi 所在的网络)提供一个端口号为 4411 的 HTTP 代理;
    2. judgeByIP = true 就是通过 IP 地址判断是否直连,这个配置开启了智能分流功能;
    3. loadBalance = latency 是用于配合下面的 SS 科学上网服务的。latency 意为优先选择连接延迟最低的 SS 二级代理。
  4. 然后在指定二级代理下面的 proxy 设置:proxy = ss://加密方式:登录密码@节点服务器地址:服务器端口号
  5. 双击运行 MEOW.exe。这时任务栏就会出现 MEOW 的图标。右键单击图标,选择“设置 IE 代理” - “ http://127.0.0.1:4411/pac ”。

只要 MEOW 配置文件中的代理服务器数量大于 1,上面设置的 loadBalance = latency这句配置就会起作用。此时 MEOW 会隔一段时间检查一下配置文件中所有服务器的连接情况,自动选择延时最短的服务器进行连接

macOS 和 Linux 用户

下载

macOS 和 Linux 系统,请使用 Terminal 终端工具或 Bash 命令行工具。在用户主目录下,执行下面命令:curl -L git.io/meowproxy | bash macOS 用户请使用系统自带的搜索功能,输入“Terminal”即可找到 Terminal 终端工具,输入上面的命令后,按回车,即可执行该命令。 可以输入 cd ~,回车,回到用户主目录。 下载 MEOW 期间,会问是否要将 MEOW 添加到开机自启动,输入 Y(是),回车。 设置

完成后,MEOW 可执行文件就会在用户主目录下,同时还有一个 .meow 隐藏文件夹,里面的文件与 Windows 版的一一对应:

  • direct
  • proxy
  • reject
  • rc
  • rc-full 配置文件 rc 的内容跟 Windows 版本的也完全一致。

由于 .meow 文件夹是隐藏的,只有在 Terminal 或者 Bash 命令行工具下通过 ls 命令才能看到。编辑 rc 配置文件可以这样:vi ~/.meow/rc 编辑 rc 配置文件,按字母 i 进入 vi 编辑器的编辑模式。配置语句参考 Windows 版配置文件。编辑完成后,按:wq保存退出。

  1. 编辑完配置文件后,执行命令 ./MEOW & 在后台静默启动 MEOW;
  2. 此时进入 macOS 的“网络偏好设置”,点右下角的“高级...”,在弹出的页面中选中“代理”标签页,勾选“自动代理配置”;
  3. 右边 “URL” 中填写 http://0.0.0.0:4411/pac
  4. 此时可以打开谷歌首页 http://www.google.com,测试是否能访问成功;

命令行代理配置及开发环境配置

命令行代理配置

在命令行提示符或者终端中也能科学上网如下设置:

  • Windows 用户打开系统环境变量,点击“新建”,依次添加以下两条环境变量,重启电脑后生效:
    
    HTTP_PROXY     http://127.0.0.1:4411
    HTTPS_PROXY    http://127.0.0.1:4411
    
  • macOS 和 Linux 用户,在终端或命令行中依次执行以下命令,重新加载命令行或终端后生效:
    
    vi ~/.bash_profile(使用 bash 的用户请执行这条命令,默认是 bash)
    vi ~/.zsh_profile (使用 zsh 的用户请执行这条命令)
    

    在文件最后加入以下两句命令(保存,重启终端后生效):

    
    export http_proxy="http://127.0.0.1:4411"
    export https_proxy="http://127.0.0.1:4411"
    

    此时,除了 ping 等 Windows 系统自带命令,其余一切 CLI 命令均使用了 MEOW 的 HTTP 代理,从而实现智能分流,加速下载。此方法只对当前系统用户有效,其余用户需要按照步骤重新设置。

开发环境配置

MEOW 启动之后,就在本局域网的 4411 端口上开启了一个 HTTP 代理。所有支持 HTTP 代理的开发软件都可以配置 IP 地址 0.0.0.0 和端口 4411 使用 HTTP 代理,从而使用 MEOW 的智能分流功能加速下载。

  • 对于前端 NPM :
    • 因为会智能分流,配合淘宝的 CNPM 镜像才是最快的:npm config set registry=https://registry.npm.taobao.org
    • 让 NPM Packages 的安装过程变得可视化:npm config set loglevel=http
    • 安装失败后,最好先清除 NPM 的缓存文件,强制删除 node_modules 文件夹,再重新安装:npm cache clean、rm -rf node_modules
    • 最重要:Windows 下编译 Node 的 C++ 模块终于不需要安装 Visual Studio 这个大块头了:npm install --global --production windows-build-tools;这个项目的地址:windows-build-tools
    • 上面这个命令跑完之后,可以尝试安装 gulp-image 这个 Package 测试一下是否成功:npm install gulp-image
    • 如果你使用 macOS,可以尝试使用 cnpm v4:npm install -g cnpm。cnpm v4 采用跟 npm 完全不一样的实现方式,超快。但在 Windows 下暂时有莫名其妙的坑,请勿在 Windows 平台下使用。
    • 也可以尝试使用 Facebook 开源的 Yarn 包管理器,以取代 npm
  • 对于 PHP 后端: 请使用国内的 Composer 全量镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com
  • 对于 Ruby 后端: 请使用国内的 Ruby Gem 全量镜像:gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
  • 对于 Android 开发者: 给 Android Studio 设置 HTTP 代理:http://127.0.0.1:4411
  • 对于后端运维:
    • Docker for Windows 和 Docker for Mac:可在 Docker Daemon 可视化界面下配置 HTTP 代理:http://127.0.0.1:4411
    • Docker for Linux:可参照阿里云 Docker 镜像仓库加速器指南进行配置
    • Linux 运维:可使用 MEOW Linux 版本,配合 SS 服务实现生产服务器科学上网
  • 通用用法:反正可以设置 HTTP 代理的开发软件,都可以尝试设置 HTTP 代理以实现下载加速:http://127.0.0.1:4411

这两种设置方法相当于为命令行交互界面(CLI)下的所有命令都设置了代理。以后运行命令前,必须保证 MEOW 代理正常运行,需要网络支持的命令才能正常执行。

正如不翻阅英文开发文档一样,不用科学上网的开发者月薪永远不超过 10K :)

永远年轻,永远热泪盈眶

4 条评论

  1. SS好用,小巧强大,要是添加了多个节点还可以自动选最快最稳线路。说不好用是没给浏览器上插件填加规则,况且PAC也可以自己根据需要改。

  2. 怎么说还都是回到了黑白名单识别.
    在路由上部署ipset来处理常见被墙网站列表,访问到被墙网站再添加到ipset走SS,其余直连.
    另外开一个HTTP的代理,如果访问到不在ipset列表的被墙网站,自己在浏览器切换.
    目前我用的这样的模式,之前用的chinadns模式也还不错

发表评论

电子邮件地址不会被公开。 必填项已用*标注

返回主页看更多
支付宝捐赠 支付宝 扫一扫