OSX科学上网方案

工具

  1. homebrew

  2. shadowsocks-libev

  3. nodejs

  4. polipo

步骤

1. 安装并配置shadowsocks-libev客户端

shadowsocks-libev包括了服务端和客户端,这里默认你已经有了shadowsocks服务器。由于OSX下的GUI客户端大多因政策“年久失修”,所以为了稳定(zhuang x)这里选择CLI客户端。安装前需提前安装好homebrew。

brew install shadowsocks-libev
然后在任意位置创建json格式的配置文件,设置远程shadowsocks服务器信息。

{
"server": "xxxxxx.com",
"server_port": 1234,
"local_address": "127.0.0.1",
"local_port": 1080,
"password": " ",
"timeout": 120,
"method": "aes-256-cfb"
}
最后运行客户端程序开启本地shadowsocks代理,其中的json文件就是配置文件。

ss-local -c xxx.config.json
这样,本地便会在1080端口创建一个socks5的代理,更改系统网络配置就可以让所有流量走代理通道,已经打开迈向世界的第一步。

2. 设置PAC文件,让代理更智能

虽然现在已经可以“毫无阻拦”的上网,但模式却非常不智能,所有流量都走代理会让一些国内访问变慢,好在OSX默认支持自动代理模式,只需设定好PAC文件地址即可。

不过,PAC文件必须通过服务器获取,所以得先创建一个本地web服务器。

创建静态服务器的方法有很多,你可以使用Apache,当然也可以直接使用npm里现成的工具库,http-server是个不错的选择。

npm install -g http-server
之后需要创建一个PAC文件,这里直接给出一个简单的模板,其中需要代理访问的地址可以自定义(也就是下面代码里的userList),当然也可以直接使用gfwlist中的地址,最后将改好的文件保存为PAC格式。

示例PAC文件中使用了Adblock Plus的url解析方式。

'use strict';

var PROXY = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;";
var DIRECT = 'DIRECT;';

var userList = [
'||google.com'
];

function Filter(rule) {
rule = rule.replace(/\s/g, '');
if (rule && rule[0] !== '!') {
this.ruleSrc = rule;
this.ruleFinal = null;
}
}

Filter.prototype = {
makeRule: function() {
var ruleSrc = this.ruleSrc;
if (ruleSrc.length > 2 && ruleSrc[ruleSrc.length - 1] === '/' && ruleSrc[0] === '/') {
this.ruleFinal = new RegExp(ruleSrc.substr(1, ruleSrc.length - 2));
} else {
this.ruleFinal = new RegExp(Filter.convert(ruleSrc));
}
},
match: function(url) {
if (!this.ruleFinal) {
this.makeRule();
}
return this.ruleFinal.test(url);
}
};

Filter.convert = function(rule) {
return rule
.replace(/*+/g, '').replace(/^*|*$/g, '').replace(/\^|$/, '^')
.replace(/\W/g, '\$&')
.replace(/\*/g, '.
')
.replace(/\\^/g, '(?:[\x00-\x24\x26-\x2C\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]|$)')
.replace(/^\|\|/, '^[\w\-]+:\/+(?!\/)(?:[^.\/]+\.)?')
.replace(/^\|/, '^').replace(/\|$/, '$');
};

function PacList(ruleList) {
this.list = [];
ruleList.forEach(this.add.bind(this));
}

PacList.prototype = {
add: function(rule) {
this.list.push(new Filter(rule));
},
match: function(url) {
var flag = false;
for (var i = 0; i
接着将PAC文件放在本地服务器上,在其所在目录下,运行http-server,即默认在8080端口创建一个静态服务器,最后在OSX自动代理模式下填写好PAC文件的地址,就实现了基于自定义列表的智能网络代理。

OSX中PAC文件设置路径,系统偏好设置 -> 网络 -> 高级 -> 代理 -> 自动代理设置,一定要填写PAC文件的绝对网络地址(如http://127.0.0.1:8080/list.pac)。

3. 即时更新PAC文件

PAC文件设置好后,难免会不断扩充代理地址列表,但OSX系统更新PAC文件并不是那么频繁,想要生效只能手动在网络设置里关闭自动代理后再重新打开,很是麻烦,因此选择用命令来解决这个问题。

sudo networksetup -setautoproxystate Wi-Fi off
sudo networksetup -setautoproxystate Wi-Fi on
这两条命令也就是关闭后再开启,其中Wi-Fi字段可能根据不同的网络接口而不同,不过这两个命令需要输入两次密码,若需要,可以进一步设置不输密码。

先执行whoami,查看自己的用户名,例如是jack,那么执行sudo visudo,在文件的末尾加上

jack ALL=(ALL) NOPASSWD: ALL

这样,相当于jack用户在执行管理员操作时都不需要再输入密码,再给上面的重启自动代理命令设置一个alias,一切就很方便了。

当然这个是可选的,不一定非得用命令,完全看个人爱好。

4. 开启HTTP代理

有了socks5代理,虽然大部分APP上网都可以直接使用,但难免部分APP不支持,比如终端,因此我们还需要在本地开启一个HTTP代理,这里只用将socks5代理转换一下即可,polipo可以帮助我们实现。

安装polipo。

brew install polipo
创建polipo的配置文件,设置好socks5的代理信息。

socksParentProxy = "127.0.0.1:1080"socksProxyType = socks5

然后在该配置文件目录下,运行polipo就默认在本地8123端口开启了一个HTTP代理,接下来就是需要HTTP代理的APP配置了。

polipo -c xxx.config

结束

以上就是OSX下科学上网方案,由于所使用的第三方库都是跨平台的,因此理论上在其他系统下操作十分类似,这里就不赘述了。

macos, 科学上网,

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部