CentOS 7安装配置Shadowsocks客户端

摘要

最近由于在阿里云从 GitHub 拖代码非常困难,因此萌生了在服务器上使用 shadowsocks 的念头。本文记录了我在 CentOS 7 上成功安装运行 shadowsocks 客户端的过程。

CentOS 7安装配置

Linux


客户端为CentOS(一般Linux环境)时,(尤其是命令行里的命令)使用shadowsocks搭配Privoxy上网的方法。

关于Shadowsocks Python版一键安装脚本 可以参考我之前的文章

一、安装

1.安装客户端shadowsocks

  1. $ yum install python-pip
  2. $ pip install shadowsocks
  3. Pip Python 的包管理工具,这里我们用 pip 安装 shadowsocks

2.编辑配置文件

  1. $ mkdir -p /etc/shadowsocks
  2. $ vim /etc/shadowsocks/shadowsocks.json
  3. 添加以下内容
  4. {
  5. "server":"XXXXX",
  6. "server_port":1300,
  7. "local_address": "127.0.0.1",
  8. "local_port":1080,
  9. "password":"123456",
  10. "timeout":300,
  11. "method":"aes-256-cfb",
  12. "fast_open": false,
  13. "workers": 1
  14. }
  15. 参数说明:
  16. serverShadowsocks服务器地址
  17. server_portShadowsocks服务器端口
  18. local_address:本地IP
  19. local_port:本地端口
  20. passwordShadowsocks连接密码
  21. timeout:等待超时时间
  22. method:加密方式
  23. 可选aes-128-cfb, aes-192-cfb, aes-256-cfb, bf-cfb, cast5-cfb, des-cfb, rc4-md5, chacha20, salsa20, rc4, table
  24. workers:工作线程数
  25. fast_opentruefalse。开启fast_open以降低延迟,但要求Linux内核在3.7+。
  26. 开启方法 echo 3 > /proc/sys/net/ipv4/tcp_fastopen

3.配置自启动

  1. 新建启动脚本/usr/lib/systemd/system/shadowsocks,内容如下
  2. [Unit]
  3. Description=Shadowsocks
  4. [Service]
  5. TimeoutStartSec=0
  6. ExecStart=/usr/bin/sslocal -c /etc/shadowsocks/shadowsocks.json
  7. [Install] WantedBy=multi-user.target
  8. 使用脚本启动
  9. systemctl enable shadowsocks
  10. systemctl start shadowsocks
  11. systemctl status shadowsocks
  12. 也可以s执行命令
  13. $ nohup sslocal -c /etc/shadowsocks.json /dev/null 2>&1 &

4.验证Shadowsocks客户端是否正常运行

  1. curl --socks5 127.0.0.1:1080 http://httpbin.org/ip
  2. #这里的配置地址就是我们上面配置客户端的IP和端口
  3. Shadowsock客户端已正常运行,则结果如下:
  4. {
  5. "origin": "x.x.x.x" #你的Shadowsock服务器IP
  6. }

如下图演示
image_1cgbra99c1sjn7992j1ndfodl9.png-173.6kB

5. 安装配置Privoxy
Shadowsocks是一个 socket5 服务,我们需要使用 Privoxy 把流量转到 http/https 上。
虽然socks代理起来了,但是还不能直接用,需要privoxy转发一下

  1. 安装Privoxy
  2. $ yum -y install privoxy
  3. 启动Privoxy
  4. $ systemctl enable privoxy
  5. $ systemctl start privoxy
  6. $ systemctl status privoxy
  7. 配置Privoxy
  8. 修改配置文件/etc/privoxy/config
  9. $ vim /etc/privoxy/config
  10. listen-address 127.0.0.1:8118 #8118 是默认端口
  11. forward-socks5t / 127.0.0.1:1080 #转发到本地端口
  12. #我们打开注释就可以,要确保只有一个!

6.配置环境变量

  1. $ vim /etc/profile
  2. export http_proxy=http://127.0.0.1:8118 #这里的端口和上面 privoxy 中的保持一致
  3. export https_proxy=http://127.0.0.1:8118
  4. $ source /etc/profile

二、验证

验证是否可以翻墙

  1. $ curl ip.gs

显示为本地IP信息则是没有开启代理

未开启
image_1cgbsvdrtmd11s7s1kqt1i5f15e5m.png-593.1kB

已开启
image_1cgbsvtjnful1q6m1pvg1jsr76n13.png-1507.5kB

9.启动脚本
启动脚本是关闭ss,关闭Privoxy,注销/etc/profile
11111.jpg-534kB

温馨提示:如果我们脚本出现如下问题,请执行执行以下命令即可恢复

image_1cgbu59eu1emu545okfu8nr7v2c.png-1164.6kB

  1. source /etc/profile
  2. 或者
  3. unset http_proxy
  4. unset https_proxy

脚本内容如下,放到/etc/init.d/下就可以

  1. #!/bin/bash
  2. ##############################################
  3. #date:2018-06-19
  4. #blog www.abcdocker.com######################
  5. ## SS ####################
  6. source /etc/profile && . /etc/init.d/functions
  7. stop(){
  8. sed -i 's#export http_proxy=http://127.0.0.1:8118##g' /etc/profile &&
  9. sed -i 's#export https_proxy=http://127.0.0.1:8118##g' /etc/profile
  10. if [ $? -eq 0 ];then
  11. action "/etc/profile is stop" /bin/true
  12. else
  13. action "/etc/profile is error" /bin/false
  14. fi
  15. sleep 3
  16. `ps -ef |grep "privoxy" |grep -v "grep" |awk '{print $2}'|xargs kill -9 &>/dev/null`
  17. if [ $? -eq 0 ];then
  18. action "privoxy is stop" /bin/true
  19. else
  20. action "privoxy is error" /bin/false
  21. fi
  22. `ps -ef |grep "shadowsocks" |grep -v "grep" |awk '{print $2}'|xargs kill -9 &>/dev/null`
  23. if [ $? -eq 0 ];then
  24. action "shadowsocks is stop" /bin/true
  25. else
  26. action "shadowsocks is error" /bin/false
  27. fi
  28. unset http_proxy
  29. unset https_proxy
  30. source /etc/profile
  31. }
  32. start(){
  33. echo "export http_proxy=http://127.0.0.1:8118" >>/etc/profile
  34. echo "export https_proxy=http://127.0.0.1:8118" >>/etc/profile
  35. source /etc/profile
  36. source /etc/profile
  37. if [ $? -eq 0 ];then
  38. action "/etc/profile is start" /bin/true
  39. else
  40. action "/etc/profile is error" /bin/false
  41. fi
  42. systemctl restart privoxy
  43. if [ $? -eq 0 ];then
  44. action "privoxy is start" /bin/true
  45. else
  46. action "privoxy is error" /bin/false
  47. fi
  48. systemctl start shadowsocks
  49. if [ $? -eq 0 ];then
  50. action "shadowsocks is stop" /bin/true
  51. else
  52. action "shadowsocks is error" /bin/false
  53. fi
  54. }
  55. case "$1" in
  56. start)
  57. start
  58. ;;
  59. stop)
  60. stop
  61. ;;
  62. restart)
  63. stop
  64. start
  65. source /etc/profile
  66. source /etc/profile
  67. source /etc/profile
  68. ;;
  69. *)
  70. echo "Please input [start|stop] thanks"
  71. ;;
  72. esac

参考链接:
centos7 安装shadowsocks客户端
在 CentOS 7 下安装配置 shadowsocks
CentOS使用Privoxy上网设置shadowsocks代理的方法