linux 下配置 shadowsocks 服务

Posted on Posted in proxy
Tips: 本文创建于2016年5月29日,已超过 2 年,内容或图片可能已经失效!

shadowsocks 服务器

## hadowsocks-libev

- ss-server : 服务端,部署在远程服务器,提供 shadowsocks 服务
- ss-local:客户端,提供本地socks5协议。
- ss-redir:客户端,提供本地透明功能。

## 目的

用一台国外VPS服务器,安装部署hadowsocks-libev软件,让国内用户通过这台VPS服务器能够访问国外网站。

## 开启防火墙端口

> TCP 8388端口为hadowsocks-libev服务端默认端口

  1. vi /etc/sysconfig/iptables #编辑防火墙配置文件  
  2.   
  3. # Firewall configuration written by system-config-securitylevel  
  4.   
  5. # Manual customization of this file is not recommended.  
  6.   
  7. *filter  
  8.   
  9. :INPUT ACCEPT [0:0]  
  10.   
  11. :FORWARD ACCEPT [0:0]  
  12.   
  13. :OUTPUT ACCEPT [0:0]  
  14.   
  15. :RH-Firewall-1-INPUT - [0:0]  
  16.   
  17. -A INPUT -j RH-Firewall-1-INPUT  
  18.   
  19. -A FORWARD -j RH-Firewall-1-INPUT  
  20.   
  21. -A RH-Firewall-1-INPUT -i lo -j ACCEPT  
  22.   
  23. -A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT  
  24.   
  25. -A RH-Firewall-1-INPUT -p 50 -j ACCEPT  
  26.   
  27. -A RH-Firewall-1-INPUT -p 51 -j ACCEPT  
  28.   
  29. -A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT  
  30.   
  31. -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT  
  32.   
  33. -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT  
  34.   
  35. -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  
  36.   
  37. -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT  
  38.   
  39. -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8388 -j ACCEPT  
  40.   
  41. -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited  
  42.   
  43. COMMIT  

## 可能依赖

  1. yum install wget curl curl-devel zlib-devel openssl-devel perl perl-devel cpio expat-devel gettext-devel autoconf libtool openssl-devel gcc swig python-devel  

## 安装 shadowsocks-libev

  1. cd /usr/local/src  
  2. git clone https://github.com/madeye/shadowsocks-libev.git #使用git下载  
  3. cd shadowsocks-libev #进入安装目录  
  4. ./configure #配置  
  5. make #编译  
  6. make install #安装  
  7. cd /usr/local/bin/ #安装好之后,会在此目录生成以下文件  
  8. ss-server  
  9. ss-local  
  10. ss-redir  

## 配置shadowsocks-libev服务端

  1. mkdir /etc/shadowsocks-libev #创建配置文件存放目录  
  2. vi /etc/shadowsocks-libev/config.json #编辑,添加以下内容  
  3. {  
  4. "server":"192.168.1.161"#服务端监听的IP地址  
  5. "server_port":8388, #服务端端口  
  6. "local_address":"127.0.0.1"#本地监听的IP地址  
  7. "local_port":1080, #本地端端口  
  8. "password":"123456"#用来加密的密码  
  9. "timeout":60, #超时时间(秒)  
  10. "method":"aes-256-cfb"#加密方法,推荐用 "aes-256-cfb"  
  11. }  
  12. :wq! #保存退出  

## 运行shadowsocks-libev服务端

  1. nohup /usr/local/bin/ss-server -u -c /etc/shadowsocks-libev/config.json -f /var/run/shadowsocks-server/pid &  

## 关闭shadowsocks-libev服务端

  1. ps -ef|grep ss-server #查看进程ID  
  2. kill -9 进程ID #结束shadowsocks-libev服务端  

## 设置shadowsocks-libev服务端开机启动

  1. vi /etc/init.d/ss-server #编辑,添加以下代码  
  2.   
  3. #!/bin/bash  
  4.   
  5. # Run level information:  
  6.   
  7. # chkconfig: 2345 77 88  
  8.   
  9. # Description: lightweight secured socks5 proxy  
  10.   
  11. # processname: ss-server  
  12.   
  13. # Paths and variables and system checks.  
  14.   
  15. # Source function library  
  16.   
  17. . /etc/rc.d/init.d/functions  
  18.   
  19. # Check that networking is up.  
  20.   
  21. #  
  22.   
  23. [ ${NETWORKING} ="yes" ] || exit 0  
  24.   
  25. # Daemon  
  26.   
  27. NAME=shadowsocks-server  
  28.   
  29. DAEMON=/usr/local/bin/ss-server  
  30.   
  31. # Path to the configuration file.  
  32.   
  33. #  
  34.   
  35. CONF=/etc/shadowsocks-libev/config.json  
  36.   
  37. #USER="nobody"  
  38.   
  39. #GROUP="nobody"  
  40.   
  41. # Take care of pidfile permissions  
  42.   
  43. mkdir /var/run/$NAME 2>/dev/null || true  
  44.   
  45. #chown "$USER:$GROUP" /var/run/$NAME  
  46.   
  47. # Check the configuration file exists.  
  48.   
  49. #  
  50.   
  51. if [ ! -f $CONF ] ; then  
  52.   
  53. echo "The configuration file cannot be found!"  
  54.   
  55. exit 0  
  56.   
  57. fi  
  58.   
  59. # Path to the lock file.  
  60.   
  61. #  
  62.   
  63. LOCK_FILE=/var/lock/subsys/shadowsocks  
  64.   
  65. # Path to the pid file.  
  66.   
  67. #  
  68.   
  69. PID=/var/run/$NAME/pid  
  70.   
  71. #====================================================================  
  72.   
  73. #====================================================================  
  74.   
  75. # Run controls:  
  76.   
  77. RETVAL=0  
  78.   
  79. # Start shadowsocks as daemon.  
  80.   
  81. #  
  82.   
  83. start() {  
  84.   
  85. if [ -f $LOCK_FILE ]; then  
  86.   
  87. echo "$NAME is already running!"  
  88.   
  89. exit 0  
  90.   
  91. else  
  92.   
  93. echo -n $"Starting ${NAME}: "  
  94.   
  95. #daemon --check $DAEMON --user $USER "$DAEMON -f $PID -c $CONF > /dev/null"  
  96.   
  97. daemon $DAEMON -u -c $CONF -f $PID  
  98.   
  99. fi  
  100.   
  101. RETVAL=$?  
  102.   
  103. $RETVAL -eq 0 ] && success  
  104.   
  105. echo  
  106.   
  107. $RETVAL -eq 0 ] && touch $LOCK_FILE  
  108.   
  109. return $RETVAL  
  110.   
  111. }  
  112.   
  113. # Stop shadowsocks.  
  114.   
  115. #  
  116.   
  117. stop() {  
  118.   
  119. echo -n $"Shutting down ${NAME}: "  
  120.   
  121. killproc -p ${PID}  
  122.   
  123. RETVAL=$?  
  124.   
  125. $RETVAL -eq 0 ]  
  126.   
  127. rm -f $LOCK_FILE  
  128.   
  129. rm -f ${PID}  
  130.   
  131. echo  
  132.   
  133. return $RETVAL  
  134.   
  135. }  
  136.   
  137. # See how we were called.  
  138.   
  139. case "$1" in  
  140.   
  141. start)  
  142.   
  143. start  
  144.   
  145. ;;  
  146.   
  147. stop)  
  148.   
  149. stop  
  150.   
  151. ;;  
  152.   
  153. restart)  
  154.   
  155. stop  
  156.   
  157. start  
  158.   
  159. ;;  
  160.   
  161. condrestart)  
  162.   
  163. if [ -f $LOCK_FILE ]; then  
  164.   
  165. stop  
  166.   
  167. start  
  168.   
  169. RETVAL=$?  
  170.   
  171. fi  
  172.   
  173. ;;  
  174.   
  175. status)  
  176.   
  177. status $DAEMON  
  178.   
  179. RETVAL=$?  
  180.   
  181. ;;  
  182.   
  183. *)  
  184.   
  185. echo $"Usage: $0 {start|stop|restart|condrestart|status}"  
  186.   
  187. RETVAL=1  
  188.   
  189. esac  
  190.   
  191. exit $RETVAL  
  192.   
  193. :wq! #保存退出  
  194.   
  195. chmod +x /etc/init.d/ss-server #添加脚本执行权限  
  196.   
  197. chkconfig --add ss-server #添加到开机启动  
  198.   
  199. chkconfig ss-server on #设置开机启动  
  200.   
  201. 相关命令:  
  202.   
  203. 启动:/etc/init.d/ss-server start  
  204.   
  205. 停止:/etc/init.d/ss-server stop  
  206.   
  207. 重启:/etc/init.d/ss-server restart  
  208.   
  209. 查看状态:/etc/init.d/ss-server status  

## 配置shadowsocks-libev客户端

> 打开 socks 客户端

[下载地址] [1]

服务器IP:192.168.1.161

服务器端口:8388

密码:123456

加密:aes-256-cfb

备注:

代理端口:1080

[1]: https://github.com/shadowsocks/shadowsocks-gui

> 打开浏览器设置代理

选项-高级-网络-设置-连接设置-手动配置代理

SOCKS主机:192.168.1.161

端口:1080

选择SOCKS v5

设置好之后,点确定。

## 把Shadowsocks客户端配置在Shadowsocks服务器上面,让用户不需要安装Shadowsocks客户端,直接设置浏览器代理就能访问国外网站。

> 以下在Shadowsocks服务器上操作

需要在服务器上开放Shadowsocks客户端端口TCP 1080(开放端口方法同上面一样)

> 设置配置文件

  1. vi /etc/shadowsocks-libev/shadowsocks.json #编辑,添加以下代码  
  2.   
  3. {  
  4.   
  5. "server":"192.168.1.161",  
  6.   
  7. "server_port":8388,  
  8.   
  9. "local_address":"127.0.0.1",  
  10.   
  11. "local_port":1080,  
  12.   
  13. "password":"123456",  
  14.   
  15. "timeout":60,  
  16.   
  17. "method":"aes-256-cfb",  
  18.   
  19. }  
  20.   
  21. :wq! #保存退出  

> 启动Shadowsocks客户端

  1. nohup /usr/local/bin/ss-local -u -c /etc/shadowsocks-libev/shadowsocks.json -f /var/run/shadowsocks-local/pid -b 0.0.0.0 &  

> 关闭shadowsocks-libev客户端

  1. ps -ef|grep ss-local #查看进程ID  
  2.   
  3. kill -9 进程ID #结束shadowsocks-libev客户端  

> 设置shadowsocks-libev客户端开机启动

  1. vi /etc/init.d/ss-local #编辑,添加以下文件  
  2.   
  3. #!/bin/bash  
  4.   
  5. # Run level information:  
  6.   
  7. # chkconfig: 2345 88 77  
  8.   
  9. # Description: lightweight secured socks5 proxy  
  10.   
  11. # processname: ss-local  
  12.   
  13. # Paths and variables and system checks.  
  14.   
  15. # Source function library  
  16.   
  17. . /etc/rc.d/init.d/functions  
  18.   
  19. # Check that networking is up.  
  20.   
  21. #  
  22.   
  23. [ ${NETWORKING} ="yes" ] || exit 0  
  24.   
  25. # Daemon  
  26.   
  27. NAME=shadowsocks-local  
  28.   
  29. DAEMON=/usr/local/bin/ss-local  
  30.   
  31. # Path to the configuration file.  
  32.   
  33. #  
  34.   
  35. CONF=/etc/shadowsocks-libev/shadowsocks.json  
  36.   
  37. #USER="nobody"  
  38.   
  39. #GROUP="nobody"  
  40.   
  41. # Take care of pidfile permissions  
  42.   
  43. mkdir /var/run/$NAME 2>/dev/null || true  
  44.   
  45. #chown "$USER:$GROUP" /var/run/$NAME  
  46.   
  47. # Check the configuration file exists.  
  48.   
  49. #  
  50.   
  51. if [ ! -f $CONF ] ; then  
  52.   
  53. echo "The configuration file cannot be found!"  
  54.   
  55. exit 0  
  56.   
  57. fi  
  58.   
  59. # Path to the lock file.  
  60.   
  61. #  
  62.   
  63. LOCK_FILE=/var/lock/subsys/shadowsocks  
  64.   
  65. # Path to the pid file.  
  66.   
  67. #  
  68.   
  69. PID=/var/run/$NAME/pid  
  70.   
  71. #====================================================================  
  72.   
  73. #====================================================================  
  74.   
  75. # Run controls:  
  76.   
  77. RETVAL=0  
  78.   
  79. # Start shadowsocks as daemon.  
  80.   
  81. #  
  82.   
  83. start() {  
  84.   
  85. if [ -f $LOCK_FILE ]; then  
  86.   
  87. echo "$NAME is already running!"  
  88.   
  89. exit 0  
  90.   
  91. else  
  92.   
  93. echo -n $"Starting ${NAME}: "  
  94.   
  95. #daemon --check $DAEMON --user $USER "$DAEMON -f $PID -c $CONF > /dev/null"  
  96.   
  97. daemon $DAEMON -u -c $CONF -f $PID -b 0.0.0.0  
  98.   
  99. fi  
  100.   
  101. RETVAL=$?  
  102.   
  103. $RETVAL -eq 0 ] && success  
  104.   
  105. echo  
  106.   
  107. $RETVAL -eq 0 ] && touch $LOCK_FILE  
  108.   
  109. return $RETVAL  
  110.   
  111. }  
  112.   
  113. # Stop shadowsocks.  
  114.   
  115. #  
  116.   
  117. stop() {  
  118.   
  119. echo -n $"Shutting down ${NAME}: "  
  120.   
  121. killproc -p ${PID}  
  122.   
  123. RETVAL=$?  
  124.   
  125. $RETVAL -eq 0 ]  
  126.   
  127. rm -f $LOCK_FILE  
  128.   
  129. rm -f ${PID}  
  130.   
  131. echo  
  132.   
  133. return $RETVAL  
  134.   
  135. }  
  136.   
  137. # See how we were called.  
  138.   
  139. case "$1" in  
  140.   
  141. start)  
  142.   
  143. start  
  144.   
  145. ;;  
  146.   
  147. stop)  
  148.   
  149. stop  
  150.   
  151. ;;  
  152.   
  153. restart)  
  154.   
  155. stop  
  156.   
  157. start  
  158.   
  159. ;;  
  160.   
  161. condrestart)  
  162.   
  163. if [ -f $LOCK_FILE ]; then  
  164.   
  165. stop  
  166.   
  167. start  
  168.   
  169. RETVAL=$?  
  170.   
  171. fi  
  172.   
  173. ;;  
  174.   
  175. status)  
  176.   
  177. status $DAEMON  
  178.   
  179. RETVAL=$?  
  180.   
  181. ;;  
  182.   
  183. *)  
  184.   
  185. echo $"Usage: $0 {start|stop|restart|condrestart|status}"  
  186.   
  187. RETVAL=1  
  188.   
  189. esac  
  190.   
  191. exit $RETVAL  
  192.   
  193. :wq! #保存退出  
  194.   
  195. chmod +x /etc/init.d/ss-local #添加脚本执行权限  
  196.   
  197. chkconfig --add ss-local #添加开机启动  
  198.   
  199. chkconfig ss-local on #设置开机启动  
  200.   
  201. 启动:/etc/init.d/ss-local start  
  202.   
  203. 停止:/etc/init.d/ss-local stop  
  204.   
  205. 重启:/etc/init.d/ss-local restart  
  206.   
  207. 查看状态:/etc/init.d/ss-local status  

> 设置完成之后,用户直接在浏览器里面设置代理(步骤同上面一样)即可访问国外网站。

扩展阅读:

1、可以专门用一台国内服务器当做Shadowsocks客户端服务器,用来连接国外的Shadowsocks服务器,然后,用户浏览器里面直接设置国内服务器为代理IP。

2、用户浏览器端还能设置自动代理配置,在google浏览器里面先把配置好的文件导出为.pac,然后把这个.pac文件放到网站上,最后给用户提供一个.pac的url地址,用户在浏览器中只需要把这个url地址填写到自动代理配置中即可。

至此,Linux下配置Shadowsocks代理服务器浏览国外网站教程完成。

转自 [osyunwei][2]

[2]: http://www.osyunwei.com/archives/9308.html

» 转载请注明来源:若我若鱼 » linux 下配置 shadowsocks 服务

Leave a Reply

Your email address will not be published. Required fields are marked *

2 + eighteen =