配置shadowsocks服务端

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u011054333/article/details/52496303

首先需要一台服务器,我用的是搬瓦工VPS。搬瓦工默认支持shadowsocks一键配置,但是需要CentOS6的系统。在这里我准备使用Ubuntu16.04来手动配置shadowsocks服务器。

安装shadowsocks

首先是安装。Ubuntu的软件仓库中已经包含了shadowsocks软件包,因此安装只需要一条命令就可以了:

apt install shadowsocks

当然,shadowsocks有各种版本。如果系统的软件仓库中没有shadowsocks,可以转而使用其他版本的。例如,使用pip安装python版本的shadowsocks:

pip install shadowsocks

shadowsocks软件包附带两个命令,ssserversslocal。一个用于服务端配置,一个用于客户端配置。详细情况可以运行man shadowsocks来查看。

配置shadowsocks

shadowsocks有两种配置方法,一种是命令行参数配置,一种是配置文件。先来说说命令行配置吧。

命令行参数配置

命令行参数如下:

参数名 参数意义
-s 服务器地址
-p 服务器端口号
-k 服务器密码
-m 服务器加密方式
-t 服务器超时时间
-c 配置文件路径
–fast-open 快速打开模式,仅Unix/Linux系统可用
–workers 工作者数量

每次运行shadowsocks都将一大堆参数传进去是件很麻烦的事情。所以一般情况下都是采用配置文件的方式来配置的。然后通过-c参数将配置文件路径传入。

配置文件

shadowsocks的配置文件是一个json形式的文件,各参数的意义和命令行参数意义相同。

{
    "server":"my_server_ip",
    "server_port":8388,
    "local_address": "127.0.0.1",
    "local_port":1080,
    "password":"mypassword",
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}

服务器地址就写服务器的ip地址,不要写127.0.0.1。端口号可以自己写,但是不要占用其他服务的端口。本地地址和本地端口是客户端使用的,服务端可以不用理会。密码尽量采用复杂一点的密码,以保证安全性。加密方式使用aes-256-cfb就可以了。如果服务器是Linux系统的话,打开fast_open。

配置文件编辑完毕之后,就可以运行shadowsocks了。前台运行:

ssserver -c /etc/shadowsocks/config.json

后台运行和停止:

ssserver -c /etc/shadowsocks.json -d start
ssserver -c /etc/shadowsocks.json -d stop

以上都是在root用户下运行的。以root方式运行可能会有一些安全问题。所以一般都是使用普通用户运行:

ssserver -c /etc/shadowsocks.json --user nobody -d start

以上都需要自己手动运行命令来启动shadowsocks。要让shadowsocks在系统启动时自动运行,需要在/etc/rc.local中添加命令。

sudo ssserver -c /etc/shadowsocks.json --user nobody -d start

shadowsocks优化

需要服务器是Linux 3.5及以上。

提高最大连接数

编辑/etc/security/limits.conf文件,添加以下两行:

* soft nofile 51200
* hard nofile 51200

然后,在启动shadowsocks服务器之前,先设置一下ulimit:

ulimit -n 51200

调整内核参数

调整内核参数的目标是:

  • 尽可能重用连接和端口号
  • 尽可能增大队列和缓冲区
  • 为高延迟和高流量选择合适的TCP拥塞算法

下面是一个生产服务器的配置(/etc/sysctl.conf),在我的搬瓦工服务器上有些不能使用,可能需要自己编译内核模块。

fs.file-max = 51200

net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.netdev_max_backlog = 250000
net.core.somaxconn = 4096

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_mem = 25600 51200 102400
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.tcp_congestion_control = hybla

修改之后需要运行sysctl -p来重载配置。

参考资料

阅读更多

扫码向博主提问

过了即是客

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • java
去开通我的Chat快问
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页