Shadowsocks折腾记

     事情的起因是服务器网络被某网站屏蔽,需要使用http代理去访问。由于没有稳定好用的http代理地址(网上免费的信不过,也不稳定),然而手头上还有空余的服务器(云上),于是就想着在云服务器上搭建shadowsocks服务端,本地服务器上搭建客户端用来连接。思路有了,那就动手干吧,搭建shadowsocks服务并不难,然而原本应该只需半小时就能搞定的活,却足足花了2个多小时(socks转http代理问题),因此在此小计一番,以儆效尤。

Install shadowsocks Server

搭建shadowsocks服务端,分别介绍windows与linux下搭建方法。

Windows

先安装python,然后再利用pip安装shadowsocks.

1

pip install shadowsocks

然后创建一个文件,如:config.json

1

2

3

4

5

6

7

8

9

10

{

"server":"",     ##服务器ip地址

"server_port":8000,  ##代理端口

"local_address":"127.0.0.1",

"local_port":1080, ##本地监听端口

"password":"",   ##连接密码

"timeout":300,

"method":"aes-256-cfb", ##加密方式

"dast_open":false

}

填写完以后,在cmd里运行:

1

ssserver -c config.json

如果没有报错的话,shadowsocks服务端就已经搭建好了。

LinuxInstall

与windows的类似,先通过pip安装shadowsocks.

1

2

3

sudo apt-get install  python-pip

sudo apt-get install python-m2crypto

sudo pip install  shadowsocks

配置config文件

1

2

mkdir /etc/shadowsocks

vim /etc/shadowsocks/config.json (一定要在这个目录下)

写入:(ip也可以写内网地址,只要能转发出来即可。)单用户配置:

1

2

3

4

5

6

7

8

9

10

{

"server":"",

"server_port":8000,

"local_address":"127.0.0.1",

"local_port":1080,

"password":"",

"timeout":300,

"method":"aes-256-cfb",

"fast_open":false

}

多用户配置:

1

2

3

4

5

6

7

8

9

10

11

12

{

"server":"",

"local_address":"127.0.0.1",

"local_port":1080,

"port_password":{

"8000":"",

"8001":""

},

"timeout":300,

"method":"aes-256-cfb",

"fast_open":false

}

命令行启动关闭

1

2

ssserver -c /etc/shadowsocks/config.json -d start 后台启动

ssserver -c /etc/shadowsocks/config.json -d stop 后台停止

设置开机启动

将启动的命令加入到/etc/rc.local文件的最后

1

vi /etc/rc.local

设置非root用户运行ss

1

2

sudo useradd ssuser //添加一个ssuser用户

sudo ssserver [other options] --user ssuser //用ssuser这个用户来运行ss

将之前的ssserver -c /etc/shadowsocks.json -d start改为ssserver -c /etc/shadowsocks.json -d start –user ssuser

Install shadowsocks Client

安装shadowsock客户端我也分为windows与Linux两种情况进行介绍。

Windows

windows安装shadowsocks客户端比较简单,直接下载安装程序。启动以后,填入服务端相应的配置(ip,port,密码,加密方式)设置模式:

推荐使用PAC模式。

Linux

此次主要花费的时间就在于linux上搭建shadowsocks客户端,坑不少(~主要是自己脑子有点晕~)

Install

安装同样简单:

1

pip install shadowsocks

配置condfig

配置也很简单,创建一个shadowsocks.json文件:

1

2

3

4

5

6

7

8

{

"server":"",

"server_port":8000,

"local_port":1080,

"password":"",

"timeout":600,

"method":"aes-256-cfb"

}

内容类似上面,然后在命令行中运行:sslocal -c shadowsocks.json 此时系统会监听本地的1080端口。

socks转http代理问题

  此时不是GUI窗口,只是一个命令行,怎么用curl等命令走http代理(网上资料大部分是设置浏览器,但不适合本文),原本可以用其他方案解决,但此时偏偏选择了shadowsocks,就只能一路走下去了。等一切都安装好,启动完以后,我发现http代理仍然用不了,然后就开始了心力憔悴的调试,搞了半天也还是用不了,最终同事发现了问题(socks代理需要转化为http代理,windows可以设置浏览器,linux需要下载工具转化)。  发现了原因所在,那么现在的问题是怎么讲socks代理转化为http代理?

socks转http代理方案

proxychains 可以自动将socks代理转化为http代理。

polipo 用这个工具将socks代理转化为http代理。

proxychains

安装:

1

2

3

4

git clone https://github.com/haad/proxychains

./configure

make

sudo make install

配置:修改配置文件proxychains.conf

1

将socks4 127.0.0.1 9095改为socks5  127.0.0.1 1080  //1080改为你自己的端口

使用:

1

proxychains curl http://thief.one

polipo

安装:

1

sudo apt-get install polipo

配置:停止polipo服务 sudo service polipo stop编辑polipo配置文件/etc/polipo/config,添加如下内容:

1

2

socksParentProxy = localhost:1080

proxyPort = 1081

启动polipo服务 sudo service polipo start

使用:

app里面配置http_proxy=:1081

bash里面可以编辑$HOME/.bashrc,添加export http_proxy=:1081 导出环境变量。当前bash要执行source $HOME/.bashrc来使配置文件生效。

git配置git config –global http.proxy 127.0.0.1:1081