对于经常需要依赖国外资源的开发者,终端的下载速度让人抓狂,诸如常见的 wget、curl、git、brew 等命令行工具超慢,甚至无法获取资源,这就需要搭建一个科学上网利器,例如目前流行的shadowsocks,我们配置好 shadowsocks 服务器端后,安装对应系统的客户端便可,然而当你构建的时候还是会很慢,这时你发现系统自带的终端或 iTerm 2 是不走 Socks5 。
因在终端下不支持Socks5代理,只支持http代理,这就需要曲径通幽了。
Mac平台下安装
环境:
OS X 10.12.5
ShadowsocksX-NG 1.5.0
OS X 10.11之后较新的系统默认设置下不会安装成功。苹果在新系统中加入了SIP安全机制,他会阻止第三方程序向系统目录内(/System,/bin,/sbin,/usr(除了/usr/local))进行写操作,sudo也不行。办法是先把SIP关了,等装好软件配置好后再打开SIP。或者改用其他软件。
关闭SIP也麻烦,遂用privoxy这个经典软件,它刚好就是安装在/usr/local内,不需要关闭SIP也可以正常使用。
1. privoxy安装
brew install privoxy
2. privoxy配置
vim /usr/local/etc/privoxy/config
在文件末尾输入:
1 | listen-address 0.0.0.0:8118 |
第一行设置privoxy监听任意IP地址的8118端口(privoxy的默认端口)。第二行设置本地socks5代理客户端端口,注意不要忘了最后有一个空格和点号。
旧版 ShadowsocksX 创建的 「SOCKS5 代理」端口 默认是 1080,新版 ShadowsocksX-NG 创建的 「SOCKS5 代理」端口 默认改成 1086 升级后别忘了修改代理插件对应的端口。
3. 启动privoxy
因为没有安装在系统目录内,所以启动的时候需要打全路径。sudo /usr/local/sbin/privoxy /usr/local/etc/privoxy/config
4. 测试shadowsocks
1 | telnet 127.0.0.1 1086 |
5. privoxy使用
在~/.bashrc
或~/zshrc
中加入以下开关函数,方便使用:
1 | function proxy_off(){ |
执行source ~/.bashrc
或source ~/.zshrc
使配置立即生效。
7. 开启代理测试
1 | ~ proxy_on |
Linux下的安装
环境:
CentOS 7.3.1611
1. 安装shadowsocks、pip、privoxy
请先确保你已经添加了EPEL源,yum repolist
1 | [root@localhost ~]# yum repolist |
如果尚未添加,则使用sudo yum -y install epel-release
添加EPEL。
使用以下命令安装shadowsocks、pip、privoxy:$ sudo yum -y install python-pip privoxy
$ sudo pip install shadowsocks
2. 配置
2.1 配置ss
$ sudo mkdir -p /etc/shadowsocks
$ sudo vi /etc/shadowsocks/config.json
config.json配置内容为:
1 | { |
若未配置local_port,则默认为1080
2.2 启动ss
后台运行shadowsocks:
启动:sslocal -c /etc/shadowsocks/config.json -d start
停止:sslocal -c /etc/shadowsocks/config.json -d stop
但这样每次重启系统的时候都需要执行启动命令来启动ss,我们可以通过以下方法设置开机自动启动:vi /usr/lib/systemd/system/sslocal.service
内容如下:
1 | [Unit] |
执行命令systemctl start sslocal
启动ss,
执行命令systemctl status sslocal
查看ss状态,如果是active
,执行systemctl enable sslocal
设置开机自启。
执行reboot
重启系统,然后使用systemctl status sslocal
查看启动情况,如有异常请根据日志提示解决。
这样我们就能很方便的通过系统命令systemctl
来管理ss进程了。
2.2 privoxy配置
$ sudo vi /etc/privoxy/config
在文件末尾输入:forward-socks5 / 127.0.0.1:1080 .
启动privoxy$ sudo service privoxy restart
同样的,执行systemctl enable privoxy
设置开机启动privoxy
3. 测试
参照Mac下的配置设置开关函数。
使用Telnet测试shadowsocks和privoxy是否正常telnet 127.0.0.1 1080
telnet 127.0.0.1 8118
可以连接成功说明正常运行。
执行以下命令查看实际效果
1 | ~ proxy_on |
原理解析
我们终端中的http和https请求通过开关函数转发到了privoxy的8118端口,然后被privoxy转换为socks5协议转发到shadowsocks的1080或1086端口,最后本地运行的shadowsocks客户端与远程shadowsocks服务器通信,从而实现命令下的代理功能。
参考文章: