Linux 中从 Shadowsocks 中取得 HTTP 代理

过程比想象的繁琐,记录一下。

首先要安装 Shadowsocks 的 Linux 客户端。这个用 pip 直接安装就行:

pip install setuptools # 安装依赖
pip install wheel # 安装依赖
pip install -U git+https://github.com/shadowsocks/shadowsocks.git@master

安装完了敲 sslocal 命令就是客户端,而 ssserver 是服务器端。

建立了一个ss配置文件用于 sslocal 命令,语法如下:

{
    "server":"my_server_ip",
    "server_port":8388,
    "local_port":1080,
    "password":"barfoo!",
    "timeout":600,
    "method":"chacha20-ietf-poly1305"
}

然后 sslocal -c /path/to/conf.json 就跑起来了。但是有2个问题:

  1. 根据经验,ssserver 相当不稳定,说不定 sslocal 也有这个问题,我需要一个守护进程
  2. 这个ss客户端只提供 sock5 代理,我需要 http 代理

于是要弄个 Supervisor 来守护 sslocal

安装 Supervisor :

easy_install supervisor 

然后用 echo_supervisord_conf 命令生成个 Supervisor 的配置文件。在配置文件中增加如下配置:

[program:sslocal]
command=/usr/bin/sslocal -c /root/_pea3nut/ss/ss.conf
stdout_logfile=~/_pea3nut/ss/stdout.log
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true

使用 supervisord -c supervisord.conf 让 Supervisor 跑起来。查看跑的状态输入 supervisorctl 进入交互面板,输入 help 有命令列表。

接下来是 sock5 -> http。我用了 privoxy。CentOS直接

yum install privoxy
service privoxy [start|stop|restart]

改配置文件 /etc/privoxy/config。配置文件有点啰嗦,我直接去掉所有注释

mv /etc/privoxy/config /etc/privoxy/config.origin
cat /etc/privoxy/config.origin | grep ^[^#] > /etc/privoxy/config

然后干净清爽的配置文件大概这样:

confdir /etc/privoxy
logdir /var/log/privoxy
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action   # Main actions file
actionsfile user.action      # User customizations
filterfile default.filter
filterfile user.filter      # User customizations
logfile logfile
listen-address 127.0.0.1 :8116
toggle  1
enable-remote-toggle  0
enable-remote-http-toggle  0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
enable-proxy-authentication-forwarding 0
forward-socks5   /               127.0.0.1:3127 .
forwarded-connect-retries  0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
tolerate-pipelining 1
socket-timeout 300

关键点在于上面的

listen-address 127.0.0.1 :8116
forward-socks5   /               127.0.0.1:3127 .

然后 service privoxy restart 后应该就通了

http_proxy=127.0.0.1:8116 curl www.google.com

过程真是又麻烦又啰嗦,中间py2和py3问题不断,而且 Supervisor 还没设置开机自启。先这么凑合一阵吧,过段时间上Docker就好了。

  • 浏览:253
  • 评论:0

发表新的回复