Linux 中从 Shadowsocks 中取得 HTTP 代理

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

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

[code lang=shell]
pip install setuptools # 安装依赖
pip install wheel # 安装依赖
pip install -U git+https://github.com/shadowsocks/shadowsocks.git@master
[/code]

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

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

[code lang=js]
{
"server":"my_server_ip",
"server_port":8388,
"local_port":1080,
"password":"barfoo!",
"timeout":600,
"method":"chacha20-ietf-poly1305"
}
[/code]

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

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

于是要弄个 Supervisor 来守护 sslocal

安装 Supervisor :

[code lang=shell]
easy_install supervisor
[/code]

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

[code lang=text]
[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
[/code]

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

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

[code lang=text]
yum install privoxy
service privoxy [start|stop|restart]
[/code]

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

[code lang=text]
mv /etc/privoxy/config /etc/privoxy/config.origin
cat /etc/privoxy/config.origin | grep ^[^#] > /etc/privoxy/config
[/code]

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

[code lang=text]
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
[/code]

关键点在于上面的

[code lang=text]
listen-address 127.0.0.1 :8116
forward-socks5 / 127.0.0.1:3127 .
[/code]

然后 service privoxy restart 后应该就通了

[code lang=text]
http_proxy=127.0.0.1:8116 curl www.google.com
[/code]


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

  • 浏览:5394
  • 评论:0

发表新的回复