privoxy 和 shadowsocks配置

摘录自: https://blog.liuguofeng.com/p/4010

安装 Shadowsocks
shadowsocks 客户端和服务器端是同一个安装包,两个脚本不同,客户端模式是 sslocal,服务器端模式是 ssserver
CentOS 下搭建
# 安装pip
yum install python-setuptools && easy_install pip
# 安装shadowsocks
pip install shadowsocks
Ubuntu 下搭建
# 安装pip
apt-get install python-pip
# 安装shadowsocks
pip install shadowsocks
sslocal 运行 shadowsocks 客户端
nohup sslocal -s your_server_ip -p your_server_port -l 1080 -k your_server_passwd -t 600 -m rc4-md5 > /dev/null 2>&1 &
解释
# your_server_ip: 服务器 IP
# your_server_port: 服务器端口
# your_server_passwd: SS 密码
# rc4-md5: 加密方式
或创建一个 shadowsocks 的配置文件
vim /etc/shadowsocks.json
{
    "server":"your_server_ip",      # ss 服务器 IP
    "server_port":your_server_port, # 端口
    "local_address": "127.0.0.1",   # 本地 IP
    "local_port":1080,              # 本地端口
    "password":"your_server_passwd",# 连接 ss 密码
    "timeout":300,                  # 等待超时
    "method":"rc4-md5",             # 加密方式
    "fast_open": false,             # true 或 false。
    "workers": 1                    # 工作线程数
}
解释(使用时删除井号及后面文字)
fast_open: 如果你的服务器 Linux 内核在3.7+,可以开启 fast_open 以降低延迟。
开启方法: echo 3 > /proc/sys/net/ipv4/tcp_fastopen 开启之后,
将 fast_open 的配置设置为 true 即可
以 json 文件来运行启动 sslocal
nohup sslocal -c /etc/shadowsocks.json > /dev/null 2>&1 &
增加开启自动启动,执行:
echo " nohup sslocal -c /etc/shadowsocks.json > /dev/null 2>&1 &" /etc/rc.local
执行 ps aux | grep sslocal | grep -v “grep” 可查看后台 sslocal 是否运行。

安装 Privoxy
上述安好了 shadowsocks,但它是 socks5 代理,我门在 shell 里执行的命令,发起的网络请求现在还不支持 socks5 代理,只支持 http/https 代理。为了我门需要安装 privoxy 代理,它能把电脑上所有 http 请求转发给 shadowsocks。
wget http://www.privoxy.org/sf-download-mirror/Sources/3.0.26%20%28stable%29/privoxy-3.0.26-stable-src.tar.gz
tar -zxvf privoxy-3.0.26-stable-src.tar.gz
cd privoxy-3.0.26-stable

注:我实际用apt-get -y install privoxy 来安装

若上述地址无法连接可替换为本站链接 http://blog.liuguofeng.com/wp-content/uploads/2018/07/privoxy-3.0.26-stable-src.tar.gz
新建一个 privoxy 用户用来运行
user add privoxy
编译安装
autoheader && autoconf
./configure
make && make install
配置
vim /usr/local/etc/privoxy/config
确保下面两句没有被注释
listen-address 127.0.0.1:8118      # 8118 是默认端口,不用改,下面会用到
forward-socks5 / 127.0.0.1:1080 .   # 这里的端口写 shadowsocks 的本地端口

注: 实际上listen-address就是这样的,但forward-socks5 不是这样的,需要做改动。
使用 privoxy-gfwlist
获取 privoxy-gfwlist
wget https://raw.github.com/zfl9/gfwlist2privoxy/master/gfwlist2privoxy 
bash gfwlist2privoxy '127.0.0.1:1080'
cp  gfwlist.action /usr/local/etc/privoxy
echo 'actionsfile gfwlist.action' >> /usr/local/etc/privoxy/config
启动 privoxy
privoxy --user privoxy /usr/local/etc/privoxy/config

注:我实际改动/etc/privoxy/config这个文件

配置 /etc/profile
vim /etc/profile
输入内容
export http_proxy=http://127.0.0.1:8118   #这里的端口和上面 privoxy 中的保持一致
export https_proxy=http://127.0.0.1:8118
export ftp_proxy=http://127.0.0.1:8118    #ftp可以不用
export no_proxy="localhost, 127.0.0.1, ::1, aliyuncs.com, qiniuapi.com, qiniu.com, qiniucdn.com"
刷新
source /etc/profile

注:我实际是把这个存到 /usr/local/bin/proxy.sh中了。

测试

curl https://www.google.com

我的实际使用过程中,发现运行玩 . proxy.sh后,启动thunderbird是认可某个shell离得这些代理设置的。但是google-chrome是不认可的。
于是在网络的系统代理里,把网络代理一律设置为 127.0.0.1:8118。

如果不更改系统代理,可以用命令行的方式启动googel-chrome
chromium --proxy-server="https://proxy-ip:proxy-port"

那么实际的命令大概是:
google-chrome --proxy-server="https://localhost:8118"
多个proxy-server,这样做:
--proxy-server="https=proxy1:80;http=socks4://baz:1080"

目前系统的翻墙设置是:
网络代理设置 + privoxy + shadowsocks,还有一个dns2socks,把域名发到本地的1080 sock5端口来解析。

2020年10月我重新在Linux下翻墙,采用了一些别的方法。
用的是ssr(dotNet写的shadowsocks),从https://github.com/the0demiurge/CharlesScripts/blob/master/charles/bin/ssr下载。
运行 ssr config 配置shadowsocks客户端。ssr start启动 ssr service。
privoxy和前面介绍的类似,在centos下可以 yum install安装,而proxychains没法用 yum来安装。
确保/etc/privoxy/config中的这两行没有被注释掉。
listen-address 127.0.0.1:8118   # 8118 是默认端口,不用改,下面会用到
forward-socks5t / 127.0.0.1:0 . # 这里的端口写 shadowsocks 的本地端口(注意最后那个 . 不要漏了)

这样启动privoxy:

privoxy --user privoxy /etc/privoxy/config

智能代理采用这个方案:
安装genpac并在/home/ochicken/目录下生成autoproxy.pac

1
2
sudo pip install genpac
genpac --pac-proxy "SOCKS5 127.0.0.1:1080" --gfwlist-proxy="SOCKS5 127.0.0.1:1080" --output="~/autoproxy.pac"

打开ubuntu的settings - Network - Network proxy, 选择方法为自动 (Automatic), URL为file:///{pac文件路径}, 如

1
file:///root/autoproxy.pac

privoxy需要的 action 文件

配置文件 config 或 action 文件修改后不需要重启 privoxy。

使用的工具是 gfwlist2privoxy。这个工具很简单,文档就几行,写得也很清楚。

安装:

pip install gfwlist2privoxy
复制代码

gfwlist2privoxy 不支持 python3.x,安装时注意使用的是 pip2 还是 pip3

参数说明:

  • -i/--input 输入,本地 gfwlist 文件或文件 URL。这里使用上面的 gfwlist
  • -f/ --file 输出,即生成的 action 文件的目录。这里输出到 /etc/privoxy/gfwlist.action
  • -p/ --proxy SS 代理地址,生成后可以修改。这里是 127.0.0.1:1081
  • -t/ --type 代理类型,生成后也可以修改。这里是 socks5
  • --user-rule 用户自定义规则文件,这个文件中的规则会被追加到 gfwlist 生成的规则后面

示例:

gfwlist2privoxy -i https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt -f /etc/privoxy/gfwlist.action -p 127.0.0.1:1081 -t socks5
复制代码

得到文件 /etc/privoxy/gfwlist.action

# gfwlist.action generated by gfwlist2privoxy, 2018-08-02 07:36:00 +0000
# https://github.com/snachx/gfwlist2privoxy

{+forward-override{forward-socks5 127.0.0.1:1081 .}}

# 规则列表
...
复制代码

最后,把 /etc/privoxy/config 中的 actionsfile my.action 改为 actionsfile gfwlist.action 就完成了。


评论

此博客中的热门博文

漫谈 Shadowsocks 代理和 DNS 解析

常用的公共 DNS 服务器