0%

Ubuntu配置ss-local客户端

ss-local是shadowsocks-libev提供的客户端工具,若想正常使用需先准备一台机器部署shadowsocks服务端以作为代理。

一、安装准备

Ubuntu 16以上直接用apt安装,其他发行版可以查阅文档https://github.com/shadowsocks/shadowsocks-libev#installation

1
2
sudo apt update
sudo apt install shadowsocks-libev

二、编辑配置文件

配置代理服地址

参考config.json修改local.json,填写代理服务器的地址。

1
2
sudo cp /etc/shadowsocks-libev/config.json /etc/shadowsocks-libev/local.json
sudo vi /etc/shadowsocks-libev/local.json

建议local_port不要使用默认的1080,例如改为1081。主要是避免和ss-server(在安装后默认作为shadowsocks-libev.service启动)抢占端口,或者选择手动停掉ss-server。

1
2
3
4
5
6
7
8
{
"server": "代理服地址",
"server_port": "代理服端口",
"local_port": 1081,
"password": "代理服密码",
"timeout": 60,
"method": "chacha20-ietf-poly1305"
}

配置systemd service

1
sudo vi /lib/systemd/system/shadowsocks-libev-local@.service

替换其中ExecStart的配置路径

1
ExecStart=/usr/bin/ss-local -c /etc/shadowsocks-libev/local.json

三、启动服务

使用systemctl或service管理服务

1
2
3
4
5
6
7
#启动
sudo systemctl start shadowsocks-libev-local@.
#或 $ sudo service shadowsocks-libev-local@.service start
#查看运行情况
sudo systemctl status shadowsocks-libev-local@.
#配置开机自启
sudo systemctl enable shadowsocks-libev-local@.

四、配置PAC文件

PAC的语法是js,规则非常简单。核心点是实现FindProxyForURL函数,判断当前域名是否使用代理,不需要代理的域名直接返回DIRECT

因此内容自己实现就可以,但不支持es6及以上特定,这里参考genpac加上endsWith的polyfill。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 端口号按之前配置local.json的local_port来填写,默认1080
var proxy = 'SOCKS5 127.0.0.1:1081';

// 走代理的host
var hosts = [
'evernote.com'
];

function FindProxyForURL(url, host) {
for (var i = 0; i < hosts.length; i++) {
if (host.endsWith(hosts[i])) return proxy;
}
return 'DIRECT';
}

/**
* REF:
* genpac 2.1.0
* https://github.com/JinnLynn/genpac
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith
*/
if (!String.prototype.endsWith) {
String.prototype.endsWith = function(searchString, position) {
var subjectString = this.toString();
if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
position = subjectString.length;
}
position -= searchString.length;
var lastIndex = subjectString.indexOf(searchString, position);
return lastIndex !== -1 && lastIndex === position;
};
}

五、配置系统代理

这一步可以通过export来设置,但没找到automatic的配置方法,干脆用系统自带的proxy来处理。按如下步骤一路点,最后填上PAC文件的路径。

Network -> Network proxy -> Automatic -> Configuration URL -> /etc/proxy/my.pac

浏览器插件

2019-05-15 更新

最近安装了几次 Ubuntu 18.04 都无法通过上述系统配置实现自动跳转,仅全局代理生效,尚未找出原因。

目前推荐的解决方案是通过 SwitchyOmega 等 chrome 插件设置自动代理,一次配置随处生效(也可以在单机上选择性关闭),操作更为方案,无须再到系统配置了。