使用Shadowsocks客户端和Privoxy让所有CentOS 7命令行工具通过代理访问互联网

2018-09-17|Categories: Anti-GFW, Linux|

最近在试用腾讯云的CentOS 7云服务器,期间免不了要从GitHub克隆常用配置文件,在不翻墙的情况下,下载速度慢得让人绝望,无奈之下只能通过Shadowsocks客户端连接到服务器来翻墙,以下是具体步骤。

安装Shadowsocks

首先安装pip:

curl -LO "https://bootstrap.pypa.io/get-pip.py"
python get-pip.py

通过pip安装Shadowsocks:

$ pip install shadowsocks

$ vi /etc/shadowsocks.json
# 添加以下内容
{
  "server":        "123.45.67.89",    # Shadowsocks服务器的IP
  "server_port":   "1234",            # Shadowsocks服务器的端口
  "local_address": "127.0.0.1",       # 本机监听地址,不需要修改
  "local_port":    "5678",            # 本机监听端口,可以指定1024到65535之间的数字,和正在监听的端口不冲突即可
  "password":      "your_password",   # Shadowsocks服务器的密码
  "method":        "aes-256-cfb",     # Shadowsocks服务器的加密方式
  "timeout":       "300",
  "workers":       "1"
}

启动Shadowsocks:

# 以 daemon 模式启动 sslocal
sslocal -c /etc/shadowsocks.json -d start

# 确认 sslocal 已监听在预设端口
lsof -i | grep sslocal

# 开机启动
sh -c 'echo "sudo /usr/bin/sslocal -c /etc/shadowsocks.json -d start" >> /etc/rc.d/rc.local'

# 如果 rc.local 没有可执行权限就给它加上
if [ ! -x '/etc/rc.d/rc.local' ]; then 
  chmod +x '/etc/rc.d/rc.local'
else 
  echo 'rc.local already is executable!'
fi

测试Shadowsocks代理

Shadowsocks提供的代理是socks5类型,使用curl来测试代理是否生效:

$ curl --socks5 127.0.0.1:5678 http://httpbin.org/ip
{
  "origin": "123.45.67.89"       # 必须与 /etc/shadowsocks.json 中 server 字段的值相同
}

把socks5代理转换为http/https代理

许多命令仅支持http/https代理,不支持socks5代理,此时需要使用Privoxy把socks5代理转换为http/https代理。

安装Privoxy

# EPEL仓库已收录Privoxy
yum install -y privoxy

配置Privoxy

$ vi /etc/privoxy/config

# 确认下面这一行没有被注释掉
listen-address  127.0.0.1:8118
## 默认端口是8118,不需要修改

# 新增一行
forward-socks5t / 127.0.0.1:5678 .
## 端口必须与 /etc/shadowsocks.json 中 local_port 字段的值相同,
## 注意:行尾有一个英文句号(.)

启动Privoxy

systemctl start privoxy
ss -tnlp | grep :8118

# 开机启动
systemctl enable privoxy

测试Privoxy代理

$ curl --proxy https://127.0.0.1:8118 -Is https://google.com | grep -w 200
HTTP/1.1 200 Connection established

访问Google,返回的HTTP状态码是200,说明可以正常访问,证明https代理已经生效。

更方便的使用代理

并不是所有命令都像curl这样包含了设置代理的选项,即使有代理选项,每次执行命令都要输入也非常麻烦,其实还有更简单方便的用法。

临时启用代理

export http_proxy='127.0.0.1:8118'
export https_proxy='127.0.0.1:8118'

# 停用代理
export http_proxy=''
export https_proxy=''

设置shell函数快速启用代理

vi /etc/profile.d/vm-proxy.sh

粘贴以下内容:

function vm-proxy-on {
  export no_proxy="127.0.0.1,localhost,localaddress,.localdomain.com,tencentyun.com";
  export http_proxy='127.0.0.1:8118';
  export https_proxy=$http_proxy;
  echo 'HTTP proxy started.'
}
export -f vm-proxy-on

# 第二种声明函数的方式
vm-proxy-off() {
  unset http_proxy;
  unset https_proxy;
  echo 'HTTP proxy stopped.'
}
export -f vm-proxy-off

然后source文件:

chmod +x /etc/profile.d/vm-proxy.sh
source /etc/profile.d/vm-proxy.sh

此时就可以非常方便的启用或停用代理了:

$ vm-proxy-on
HTTP proxy started.

$ echo $https_proxy
127.0.0.1:8118

$ vm-proxy-off
HTTP proxy stopped.

Leave A Comment