SS+privoxy实现pac代理
本文介绍如何通过ss
与privoxy
在Linux
客户机上实现带有pac功能的代理。
服务端设置
使用系统自带的包管理工具安装shadowsocks
之后,修改配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
cat /etc/shadowsocks/example.json
{
"server":"0.0.0.0",
"port_password":
{
"443": "password1",
"6443": "password2"
},
"timeout": 300,
"method":"aes-256-cfb",
"fast_open": false,
"workers": 1,
"prefer_ipv6": false
}
|
配置systemd
启动
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cat /usr/lib/systemd/system/ssserver.service
[Unit]
Description=ssserver
After=network.target
[Service]
User=root
Type=simple
ExecStart=/usr/bin/ssserver -c /etc/shadowsocks/example.json
PrivateDevices=yes
[Install]
WantedBy=multi-user.target
|
然后可以通过systemctl
控制server状态。
客户端配置
通过同样的方式安装shadowsocks
,但这里我们要使用sslocal
,配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cat /etc/shadowsocks/config.json
{
"server":"server_ip", # 刚刚ssserver的主机ip
"server_port":443,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"password1", # 刚刚设置的密码
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false,
"workers": 1,
"prefer_ipv6": false
}
|
然后以同样的方式配置systemd
启动
1
2
3
4
5
6
7
8
9
10
11
12
13
|
cat /usr/lib/systemd/system/sslocal.service
[Unit]
Description=sslocal
After=network.target
[Service]
User=root
Type=simple
ExecStart=/usr/bin/sslocal -c /etc/shadowsocks/config.json
PrivateDevices=yes
[Install]
WantedBy=multi-user.target
|
privoxy配置
安装privoxy
之后,找到其配置文件的位置,我的是这里/etc/privoxy
。
然后设置pac规则,满足对应条件时,流量将被转到sslocal开放的端口,否则将直连。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
cat <<EOF >/etc/privoxy/gfwlist.action
{{alias}}
direct = +forward-override{forward .}
shadowsocks = +forward-override{forward-socks5 127.0.0.1:1080 .}
#default
{direct}
/
#shadowsocks
{shadowsocks}
.twitter.com
.facebook.com
.google.com
.googlesource.com
.golang.org
|
将gfw
设置填入到config
中
1
|
echo actionsfile gfwlist.action >> /etc/privoxy/config
|
如何使用
先看一看目前的端口监听情况
1
2
3
|
ss -anlpt |grep 127.0.0.1
LISTEN 0 128 127.0.0.1:8118 0.0.0.0:* # privoxy监听端口
LISTEN 0 128 127.0.0.1:1080 0.0.0.0:* # sslocal监听端口
|
我们主要使用的是8118
,有些一定需要代理才能使用的应用可以直接使用1080
端口,但要使用socks5
协议。
全局代理使用环境变量设置
1
2
3
4
5
|
echo "export http_proxy=http://127.0.0.1:8118
> export https_proxy=http://127.0.0.1:8118
> export no_proxy=\"localhost, 127.0.0.1, ::1\"" >> ~/.bashrc
source ~/.bashrc
|
git设置
1
2
|
git config --global http.proxy http://127.0.0.1:8118
git config --global https.proxy http://127.0.0.1:8118
|
关于pac设置
使用这种方法的pac设置可能比较原始,但我感觉这样恰恰比较合适。作为工作机,我们可能只需要在下载一些代码的时候才会使用代理,那么只需要针对这些做个别的设置即可。
如果你希望使用gfwlist
之类的东西,那么可以找一些已经实现的开源项目,或者自己开发。再或者找一些其他的软件,比如polipo
之类的。
参考