有些场景下需要为系统设置代理,比如OpenCV3在进行cmake编译时需要在线从amazon下载一些第三方包。现在多数同学采用的代理方案应该都是基于socks5协议,而默认的终端工具支持的代理类型都是http或https,所以这里需要socks协议到http协议的转换,转换之后采用终端的代理变量设置http代理即可。
我的系统环境为ubuntu 16.04,其他系统类似
两种方案,一种是采用polipo
将socks代理转为http,然后为相应命令指定http代理。另一种方案是采用proxychains
重定向连接来解决。两种方案看个人喜好,个人倾向于proxychains的方式
proxychains进行代理重定向
安装
1 | sudo apt-get install proxychains |
配置
proxychains
会从以下文件中加载配置:
1 | ./proxychains.conf |
本文以修改$(HOME)/.proxychains/proxychains.conf
为例
修改其内容如下(如果没有该文件,则创建):
1 | trict_chain |
其中[ProxyList]
字段中添加你的代理,由于采用shadowsocks的方式进行代理,并且监听的本地端口为1081,所以最后一行为socks5 127.0.0.1 1081
使用
1 | proxychains [command] |
例如:proxychains
后面直接跟需要走代理的命令
1 | $ proxychains curl ip.gs |
或者直接让整个bash下的命令都走代理:
1 | $ proxychains bash |
polipo转socks为http
依赖
默认你使用的是SS方式进行代理上网,并且已经有了SS账号。
安装ss客户端
1 | sudo apt-get update |
安装polipo
polipo是一个web代理缓存工具,可以转发web请求到指定的服务器和端口,它本身支持socks协议,所以可以把它当成可以进行socks协议与http协议转换的工具。
1 | sudo apt-get install polipo |
配置
配置并启动ss客户端
为了避免系统中配置的多个ss客户端监听端口冲突,可以修改ss监听端口,这里指定监听端口为1081,下面是我的ss配置:
config.json
1 | { |
启动ss客户端:
1 | sslocal -c config.json |
可以让它在后台运行,如果只是临时用,可以另开一个terminal进行其他操作
配置并启动polipo
修改polipo配置文件如下:
配置文件路径/etc/polipo/config
1 | logSyslog = true |
启动polipo服务:
1 | sudo systemctl start polipo |
此时polipo已经开始监听本地的8123端口,并将请求通过socks5协议转发到127.0.0.1的1081端口,如果需要修改默认的8123端口,可以查看man手册
验证
在需要使用代理的命令前面加上http_proxy=http://127.0.0.1:8123 https_proxy=http://127.0.0.1:8123
,如果只需要使用http,可以只设置http代理,如下验证代理后的ip:
1 | http_proxy=http://127.0.0.1:8123 curl ip.gs |
验证google的https访问:
1 | https_proxy=http://127.0.0.1:8123 curl https://google.com |
使用技巧
如果想让整个当前会话都走代理,可以直接设置环境变量:
1 | export http_proxy=http://127.0.0.1:8123 https_proxy=http://127.0.0.1:8123 |
取消代理的环境变量:
1 | unset http_proxy |
如果想让用户登录后自动进行代理设置,可以直接将export http_proxy=http://127.0.0.1:8123/ https_proxy=http://127.0.0.1:8123/
放在~/.bashrc
中。
可以为命令设置别名,以减少输入,在~/.bashrc
中增加如下内容:
1 | alias hp="http_proxy=http://127.0.0.1:8123 https_proxy=http://127.0.0.1:8123" |
执行source ~/.bashrc
使其生效,然后可以如下执行需要代理的命令:
1 | hp curl ip.gs |