SS:服务端

来自Wikioe
Eijux讨论 | 贡献2021年11月30日 (二) 03:00的版本 (建立内容为“category:Shadowsocks == 关于 == 一般安装在 Linux 中,也有各个不同的实现版本,还有不同的混淆方式,插件等。 推荐使用…”的新页面)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索


关于

一般安装在 Linux 中,也有各个不同的实现版本,还有不同的混淆方式,插件等。

推荐使用:
   Shadowsocks-libev 是用纯C编写的,依赖于libev。它被设计为shadowsocks协议的轻量级实现,以尽可能降低资源使用率。

参考:
1、shadowsocks-libev GitHub页面【有关于各个版本、各个安装方式的说明】

安装

服务端的安装也有不同方式:一件安装脚本、编译安装、snap 等等。

【当前使用了 shadowsocks-libev.sh 的一键安装脚本】

一键安装脚本

【以下使用“秋水逸冰”的脚本(多个可选的脚本)】

参见:
1、 科学上网1:shadowsocks 全系列配置总结
2、 CentOS下shadowsocks-libev一键安装脚本
3、 shadowsocks-libev个人自用版v3.3.5
  1. 安装:
    # 获取脚本:(四合一脚本)
    wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh
    
    # 脚本可执行权限:
    chmod +x shadowsocks-all.sh
    
    # Shadowsocks-libev 脚本:
    ./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log
    
    • wget 默认下载到当前目录。
    • 安装位置:“/usr/local/bin”。(ss-local、ss-manager、ss-nat、ss-redir、ss-server、ss-tunnel 等都位于此处)
    • 安装日志位于:“/var/log/shadowsocks-all.log”
    • 本脚本安装完成后,会将 shadowsocks-libev 加入开机自启动。
  2. 配置:
    vi /etc/shadowsocks-libev/config.json
    
    ...
    
  3. 操作:
    # 启动|停止|重启|状态
    # 等效于:
    # /etc/init.d/shadowsocks start|stop|restart|status
    systemctl start|stop|restart|status shadowsocks
    
  4. 更新:
    先:卸载旧版本;再:重新执行如上安装步骤;
  5. 卸载:
    # 四合一脚本
    ./shadowsocks-all.sh uninstall
    


  • 如果使用其他脚本,也类似:
    # Shadowsocks-python 脚本:
    # 安装
    wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks.sh
    chmod +x shadowsocks.sh
    ./shadowsocks.sh 2>&1 | tee shadowsocks.log
    # 卸载
    ./shadowsocks.sh uninstall
    
    # Shadowsocks-libev 脚本:
    # 安装
    wget --no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-libev.sh
    chmod +x shadowsocks-libev.sh
    ./shadowsocks-libev.sh 2>&1 | tee shadowsocks-libev.log
    # 卸载
    ./shadowsocks-libev.sh uninstall
    

仓库安装

由于在 COPR (Cool Other Package Repo) 中已经有打包好的 shadowsocks-libev,因此我们只需几条命令便能完成安装。

参考:
1、CentOS/RHEL 7 下安装 Shadowsocks 服务端
  1. 安装:
    cd /etc/yum.repos.d/
    curl -O https://copr.fedorainfracloud.org/coprs/librehat/shadowsocks/repo/epel-7/librehat-shadowsocks-epel-7.repo
    yum install -y shadowsocks-libev
    
    • 安装完成后,会有 ss-local, ss-manager, ss-nat, ss-redir, ss-server, ss-tunnel 命令可用。
      其中,作为服务器,我们需要的是 ss-server,不过后文中我们将通过服务文件启动 Shadowsocks,而不会直接与 ss-server 命令打交道。
    • 如果安装报类似如下错误:
      Error: Package: shadowsocks-libev-3.1.3-1.el7.centos.x86_64 (librehat-shadowsocks)
                 Requires: libsodium >= 1.0.4
      Error: Package: shadowsocks-libev-3.1.3-1.el7.centos.x86_64 (librehat-shadowsocks)
                 Requires: mbedtls
      
      说明系统没有启用 EPEL (Extra Packages for Entreprise Linux)。那么我们需要首先启用 EPEL,再安装 shadowsocks-libev:
      yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
      yum install -y shadowsocks-libev
      
  2. 验证安装:
    在继续后文的配置之前,我们先在命令行中执行一次 ss-server 命令,以确认 shadowsocks 及其依赖已正确安装。
    ss-server
    
    • 如果执行 ss-server 报错:“ss-server: error while loading shared libraries: libmbedcrypto.so.0: cannot open shared object file: No such file or directory”,
      使用 root 身份执行以下命令即可:
      cd /usr/lib64
      ln -s libmbedcrypto.so.1 libmbedcrypto.so.0
      
  3. 配置:
    vi /etc/shadowsocks-libev/config.json
    
    ...
    
  4. 操作:
    # 启动|停止|重启|状态
    systemctl start|stop|restart|status shadowsocks-libev
    
    # 开机启动
    systemctl enable shadowsocks-libev
    
    # 查看 Shadowsocks 服务的全部日志:
    journalctl -u shadowsocks-libev
    
  5. 更新:
    yum update shadowsocks-libev
    
  6. 卸载:
    yum erase shadowsocks-libev
    

snap

通过 Snap 应用商店安装 Shadowsocks-libev 是官方推荐的方式。【Snap 是安装最新二进制文件的推荐方法。】


Snap 是 Canonical 推出的一种新的软件打包格式,彻底解决linux依赖性的问题,Snap 软件包拥有更加稳定和安全的特性。snap也就是安装snap软件包的命令。

Note:Snap 适用于 CentOS 7.6+、Red Hat Enterprise Linux 7.6+,可从企业 Linux 额外软件包(EPEL)存储库获得。

参考:
1、Snap 参考:Snap 官网
2、如何部署一台抗封锁的Shadowsocks-libev服务器
3、如何在CentOS上设置Shadowsocks-libev代理服务器

安装:

  1. 安装 snap:
    1. Enable snapd:
      # 将 EPEL 存储库添加到系统中
      sudo yum install epel-release
      
      # 安装 snap
      sudo yum install snapd
      
      # 安装后,需要启用管理主 snap 通信套接字的 systemd 单元:
      sudo systemctl enable --now snapd.socket
      
      # 要启用 Classic snap 支持,需要在 /var/lib/snapd/snap 和 /snap 之间创建符号链接:
      sudo ln -s /var/lib/snapd/snap /snap
      
      # 请注销并重新登录,或重新启动系统,以确保 snap 的路径得到正确更新。
      systemctl reboot
      
    2. Install core:
      sudo snap install core
      
  2. 从 snap 安装 Shadowsocks:
    # Stable channel
    sudo snap install shadowsocks-libev
    
    # Edge channel:
    sudo snap install shadowsocks-libev --edge
    
    • snap 软件包一般安装在 /snap 目录下;
    • 安装完成,显示有关 shadowsocks-libev:
      snap info shadowsocks-libev
      
  3. 配置:
    sudo vim /var/snap/shadowsocks-libev/common/server-config.json
    # sudo vim /var/snap/shadowsocks-libev/common/etc/shadowsocks-libev/config.json
    
    ...
    
    • 配置文件位置变了,不同于直接安装时的 /etc/shadowsocks/config.json;
  4. 操作:
    # 启动|停止|重启|状态
    sudo systemctl start|stop|restart|status snap.shadowsocks-libev.ss-server-daemon.service
    
    # 开机启动
    sudo systemctl enable snap.shadowsocks-libev.ss-server-daemon.service
    
  5. 更新:
    • Snap 会每天自动更新通过其安装的软件,因此通常情况下你不需要手动更新。
    • 如若需要手动更新:
      sudo snap refresh
      
  6. 卸载:
    sudo snap remove shadowsocks-libev
    
    • 可能还需要手工清理相关配置文件??
  • 将 Shadowsocks-libev 服务器作为系统服务运行
    我们可以手动运行Shadowsocks-libev服务器,但是为它创建一个 systemd 服务单元更为方便,因此可以在启动时自动启动它:
    sudo vim /etc/systemd/system/shadowsocks-libev.service
    
    
    # 在此文件中添加以下行
    [Unit]
    Description=Shadowsocks-Libev Server
    After=network-online.target
        
    [Service]
    Type=simple
    ExecStart=/usr/bin/snap run shadowsocks-libev.ss-server -c /var/snap/shadowsocks-libev/common/server-config.json
    Restart=always
    RestartSec=2
        
    [Install]
    WantedBy=multi-user.target
    
    则可更方便地进行服务单元管理:
# 启动|停止|重启|状态
sudo systemctl start|stop|restart|status shadowsocks-libev.service

# 开机启动
sudo systemctl enable shadowsocks-libev.service

编译安装

如果您使用的是 CentOS 7,则需要安装预要求才能从源代码生成。

In general, you need the following build dependencies:
   autotools (autoconf, automake, libtool)
   gettext
   pkg-config
   libmbedtls
   libsodium
   libpcre3 (old pcre library)
   libev
   libc-ares
   asciidoc (for documentation only)
   xmlto (for documentation only)

参考:
1、CentOS7下手动编译安装Shadowsocks-libev最新版
2、安装并配置shadowsocks-libev(yum源方式)
  1. 安装要求:
    # 安装 epel 源
    yum install epel-release -y
    
    # 安装编译工具
    yum install gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y
    
    # 还需要使用到 git
    yum install git
    
  2. 下载源码:
    git clone https://github.com/shadowsocks/shadowsocks-libev.git
    
    cd shadowsocks-libev
    
    git submodule update --init --recursive
    
  3. 编译源码并安装:
    # 确保是在 ss 目录中执行
    cd shadowsocks-libev
    
    # 编译
    ./autogen.sh && ./configure && make
    
    # 安装(root 权限下)
    sudo make install
    
    • 程序默认安装到 /usr/local 下面(./autogen.sh 脚本指定了安装路径),如果需要覆盖安装目录,请使用“./configure --prefix=<路径>”。
  4. 创建配置文件:
    mkdir -p /etc/shadowsocks-libev
    
    vim /etc/shadowsocks-libev/config.json
    
    ...
    
  5. 操作:
    # 启动|停止|重启|状态
    systemctl start|stop|restart|status shadowsocks-libev
    
    # 开机启动
    systemctl enable shadowsocks-libev
    
    • 安装过程中,如果对配置有任何更改,只要重启下服务就行了。
  6. 更新:
    • 获取新的源码重新编译。
  7. 卸载:(两种情况)
    1. 如果 Makefile 文件有 uninstall 命令:安装目录中执行“make uninstall”:
      # 确保是在 ss 目录中执行
      cd shadowsocks-libev
      
      # 安装(root 权限下)
      sudo make uninstall
      
    2. 如果 Makefile 文件没有 uninstall 命令:需要删除软件相关的目录、文件:
      1. 如果在“./configure”的时候加了“--prefix=<路径>”参数:将改路径文件(安装目录)删除即可;
      2. 否则,只能根据 make install 中的步骤(或查看 makefile 文件),看它把什么文件拷到哪,一一删除。
    • 所以,即使安装完成,其源码文件最好也不要轻易删除

配置

ss 使用的配置文件路径,可以在其 ss 服务配置文件(位于“/usr/lib/systemd/system/”或“/etc/rc.d/init.d”)中找到。

如,“shadowsocks”:
==============================================================
...
# Author: Teddysun <i@teddysun.com>
if [ -f /usr/local/bin/ss-server ]; then
   DAEMON=/usr/local/bin/ss-server
elif [ -f /usr/bin/ss-server ]; then
   DAEMON=/usr/bin/ss-server
fi
NAME=Shadowsocks-libev
CONF=/etc/shadowsocks-libev/config.json     【!】
...
==============================================================


(以 Shadowsocks-libev 为例:)

vi /etc/shadowsocks-libev/config.json

{
    "server":"0.0.0.0",
    "server_port":*****,
    "password":"***************",
    "timeout":300,
    "user":"nobody",
    "method":"********-****-********",
    "fast_open":true,
    "nameserver":"8.8.8.8",
    "mode":"tcp_and_udp"
}

加速

安装锐速需要降级系统内核,而安装 Google BBR 则需要升级系统内核,故两者不能同时安装。

锐速

BBR、BBR PLUS、魔改BBR、锐速的脚本安装要求:
   1、适用架构:KVM / Xen,不支持OpenVZ(OVZ)。
   2、适用系统:CentOS 7、Debian 8、Debian 9、Ubuntu 16.04、Ubuntu 18.04。

锐速安装一键包

安装:(现在不知道哪一个可以用)

# 使用一键安装脚本
wget -N --no-check-certificate https://raw.githubusercontent.com/91yun/serverspeeder/master/serverspeeder-all.sh && bash serverspeeder-all.sh

# 或:
wget -N --no-check-certificate https://github.com/91yun/serverspeeder/raw/master/serverspeeder.sh && bash serverspeeder.sh
  • 不需要任何配置。“vi /serverspeeder/etc/config”

卸载:

chattr -i /serverspeeder/etc/apx* && /serverspeeder/bin/serverSpeeder.sh uninstall -f

操作:

service serverSpeeder start|stop|restart|status

# 或

/serverspeeder/bin/serverSpeeder.sh start|stop|restart|status

BBR

TCP BBR 是一种 TCP 拥塞控制算法,可以大大提高连接速度。

Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经用上了该算法。根据以往的传统,Google 总是先在自家的生产环境上线运用后,才会将代码开源,此次也不例外。

安装/开启:【两种情况】

  1. (如果 Linux 内核在 4.9 以下)需要安装并开启 BBR:(可使用一键安装脚本)
    # 安装并开启 BBR(同样是使用脚本)
    wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh
    
  2. (如果 Linux 内核在 4.9 及以上)只需开启 BBR 即可:
    1. 修改配置文件:
      vim /etc/sysctl.conf
      
      # 添加如下内容
      net.core.default_qdisc = fq
      net.ipv4.tcp_congestion_control = bbr
      
    2. 加载系统参数:
      sysctl -p
      

验证 BBR 是否已经开启:

  1. # 检查使用中的拥塞控制算法
    sysctl net.ipv4.tcp_available_congestion_control
    
    若返回如下信息则说明已开启:
    net.ipv4.tcp_available_congestion_control = bbr
    
  2. lsmod | grep bbr
    
    若返回如下信息则说明已开启:
    tcp_bbr                16384  1
    tcp_bbr                20480  0
    

TFO

您可以通过启用 TCP 快速打开(fast_open)来加快 Shadowsocks 的速度。 TCP 是面向连接的协议,这意味着只能在建立连接后才能交换数据,这是通过三向握手完成的。换句话说,传统上,数据只能在三向握手完成后才能交换。

TCP 快速打开(TFO)是一种机制,它允许在三向握手完成之前交换数据,最多可节省 1 个往返时间(RTT)。

从 3.7 版开始,TCP 快速打开支持已合并到 Linux 内核,从 3.13 版开始默认启用。

检查服务器的 TFO 配置:(从 3.13 版内核开始默认启用)

cat /proc/sys/net/ipv4/tcp_fastopen
  • 0:表示禁用。
  • 1:表示已启用传出连接(作为客户端)。
  • 2:表示已启用传入连接(作为服务器)。
  • 3:表示已启用传出和传入连接。


启用 TCP 的“fast_open”:

  1. 修改配置文件:
    sudo vi /etc/sysctl.conf
    
    net.ipv4.tcp_fastopen=3     # 插入内容
    
  2. 重新加载 sysctl 设置以使更改生效:
    sudo sysctl -p
    
  3. 在 Shadowsocks 服务器配置文件中启用 TFO:
    vi /etc/shadowsocks-libev/config.json
    
    "fast_open": true     # 插入内容
    

混淆插件

参考:
1、配置 shadowsocks-libev 加 v2ray-plugin
2、添加混淆: simple-obfs + shadowsocks for Windows

??????????????????

其他步骤

  1. 开放端口:
    # 添加防火墙规则
    firewall-cmd --permanent --zone=public --add-port=39451/tcp
    firewall-cmd --permanent --zone=public --add-port=39451/udp
    
    # 更新防火墙规则
    firewall-cmd --reload
    
    # 启动|关闭|重新启动 防火墙  (有上一步则不需要)
    systemctl [start|stop|restart] firewalld.service