SS:服务端

来自Wikioe
跳到导航 跳到搜索


关于

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

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

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

安装

服务端的安装也有不同方式:自动脚本、仓库、snap、docker、编译安装 等等。

推荐使用可用的仓库,或 snap 来安装。
(网上的自动脚本都很老,基本不再维护。已下载的脚本可以继续使用)
(编译安装很麻烦,其实没必要)

当前使用了:

  • 【shadowsocks-libev.sh 的一键安装脚本】
  • 【仓库安装】(2021/12/02 02:59:53)(修改配置文件之后遇到启动问题)

自动脚本


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

参见:
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 服务端
2、适用于小内存vps的Shadowsocks-libev
  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、CentOS 7 编译安装 ss-libev
2、CentOS7下手动编译安装Shadowsocks-libev最新版
3、安装并配置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
    
    • 获取源码,可以通过:git 克隆项目、wget 下载、直接上传,都可以。
    • 比如:(wget 下载源码包)
      wget https://github.com/shadowsocks/shadowsocks-libev/releases/download/v3.3.5/shadowsocks-libev-3.3.5.tar.gz
      
      tar -xzf shadowsocks-libev-3.3.5.tar.gz
      
      mv shadowsocks-libev-3.3.5 shadowsocks-libev
      
  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 文件),看它把什么文件拷到哪,一一删除。
    • 所以,即使安装完成,其源码文件最好也不要轻易删除

配置

(以 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"
}
  • ss 使用的配置文件路径,可以在其“启动文件”(“shadowsocks”,位于“/etc/rc.d/init.d”)或“服务文件”(“Shadowsocks-libev.service”,位于“/usr/lib/systemd/system/”)中找到。
    如,“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.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
    

日志

日志查看:

# 查看 ss-server 相关的日志内容
journalctl | grep ss-server

# 查看 unit 为 shadowsocks-libev 的日志(如果没有相关 unit,即,没有“shadowsocks-libev.service”,则提示“-- No entries --”)
journalctl  -u shadowsocks-libev

其他步骤

  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
    
  2. SS:服务端(加速)
  3. SS:服务端(插件)