title: Ubuntu配置ss-local客户端 date: 2018-12-01 22:03:28 tags: [Ubuntu,proxy] categories: Linux
ss-local是shadowsocks-libev提供的客户端工具,若想正常使用需先准备一台机器部署shadowsocks服务端以作为代理。
Ubuntu 16以上直接用apt安装,其他发行版可以查阅文档https://github.com/shadowsocks/shadowsocks-libev#installation
sudo apt update
sudo apt install shadowsocks-libev
参考config.json修改local.json,填写代理服务器的地址。
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。
{
"server": "代理服地址",
"server_port": "代理服端口",
"local_port": 1081,
"password": "代理服密码",
"timeout": 60,
"method": "chacha20-ietf-poly1305"
}
sudo vi /lib/systemd/system/shadowsocks-libev-local@.service
替换其中ExecStart的配置路径
ExecStart=/usr/bin/ss-local -c /etc/shadowsocks-libev/local.json
使用systemctl或service管理服务
#启动
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的语法是js,规则非常简单。核心点是实现FindProxyForURL
函数,判断当前域名是否使用代理,不需要代理的域名直接返回DIRECT
。
因此内容自己实现就可以,但不支持es6及以上特定,这里参考genpac加上endsWith的polyfill。
// 端口号按之前配置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 插件设置自动代理,一次配置随处生效(也可以在单机上选择性关闭),操作更为方案,无须再到系统配置了。