Skip to content

Instantly share code, notes, and snippets.

@simonchen
Created August 17, 2018 12:49
Show Gist options
  • Save simonchen/030f79f2ba5ed91a7ab3eb63d64b8a60 to your computer and use it in GitHub Desktop.
Save simonchen/030f79f2ba5ed91a7ab3eb63d64b8a60 to your computer and use it in GitHub Desktop.
shadowsocks & chacha20 & kcptun Setup on Ubuntu 14.04 x86_64
  • Ubuntu 14.04 64位环境部署多端口 shadowsocks 服务端

  • 启用相对更节约资源的 CHACHA20 加密

  • 部署更快速的 kcptun 服务端

  • 在 Android 和 Windows 环境下 kcptun 客户端 的配置


  1. 安装必要组件

    • 更新系统,安装可以直接从 apt 更新的软件:

      apt-get update
      apt-get upgrade
      apt-get install build-essential python-pip m2crypto supervisor
    • 安装 shadowsocks:

      pip install shadowsocks
    • 安装加密用软件 libsodium:

      wget https://github.com/jedisct1/libsodium/releases/download/1.0.11/libsodium-1.0.11.tar.gz
      tar zxvf libsodium-1.0.11.tar.gz
      cd libsodium-1.0.11
      ./configure
      make && make check
      make install
      echo /usr/local/lib > /etc/ld.so.conf.d/usr_local_lib.conf
      ldconfig
  2. 部署 shadowsocks 服务端

    • 编辑 shadowsocks 配置文件:

      vi /etc/shadowsocks.json

      I进入插入模式,粘贴后按Esc退出,

      光标选中需要修改的位置按X删除,再进入插入模式修改。

      最后按Esc退出,再输入:wq保存退出。

    • 下面配置文件中1080和8080为服务端口号,后面为对应的密码,可以不同。

      {
      "server":"0.0.0.0",
      "port_password":
      {
      "1080":"password1",
      "8080":"password2"
      },
      "timeout":600,
      "method":"chacha20",
      "auth": true
      }
    • 编辑 supervisor 的配置文件:

      vi /etc/supervisor/conf.d/shadowsocks.conf

      如果需要选定1024内的端口号,可能必须用root用户。

      [program:shadowsocks]
      command=ssserver -c /etc/shadowsocks.json
      autorestart=true
      user=root
    • 现在即可通过下面的命令启动 shadowsocks 服务端,并检查其状态:

      supervisorctl reload
      supervisorctl status
    • 在 shadowsocks 客户端检查连接无误后再进入下一步。

  3. kcptun 服务端的部署

    • 下载安装 kcptun:

      mkdir /root/kcptun
      cd /root/kcptun
      ln -sf /bin/bash /bin/sh
      wget https://github.com/xtaci/kcptun/releases/download/v20161118/kcptun-linux-amd64-20161118.tar.gz
      tar -zxf kcptun-linux-amd64-*.tar.gz
    • 配置 kcptun 启动和停止文件:

      启动文件无需任何修改,通过配置文件控制 kcptun 服务参数。

      vi /root/kcptun/start.sh
      #!/bin/bash
      cd /root/kcptun/
      ./server_linux_amd64 -c /root/kcptun/server-config.json > kcptun.log 2>&1 &
      echo "Kcptun started."
      vi /root/kcptun/stop.sh
      #!/bin/bash
      echo "Stopping Kcptun..."
      PID=`ps -ef | grep server_linux_amd64 | grep -v grep | awk '{print $2}'`
      if [ "" !=  "$PID" ]; then
      echo "killing $PID"
      kill -9 $PID
      fi
      echo "Kcptun stoped."
    • 编辑 kcptun 的配置文件:

      vi /root/kcptun/server-config.json
    • 下面的配置文件中,需要注意以下参数:

      listen 参数为 kcptun 服务的端口; target 参数必须为本地 shadowsocks 使用的端口之一,也就是通过 kcptun 加速的端口; key 参数为 kcptun 使用的密码,自行设定。其他参数参考项目介绍

      {
      "listen": ":443",
      "target": "127.0.0.1:1080",
      "key": "password3",
      "crypt": "salsa20",
      "mode": "fast",
      "mtu": 1350,
      "sndwnd": 1024,
      "rcvwnd": 1024,
      "datashard": 5,
      "parityshard": 5,
      "dscp": 46,
      "nocomp": true,
      "acknodelay": false,
      "nodelay": 0,
      "interval": 40,
      "resend": 0,
      "nc": 0,
      "sockbuf": 4194304,
      "keepalive": 10
      }
    • 现在可以通过sh /root/kcptun/start.sh命令启动 kcptun 服务,通过sh /root/kcptun/stop.sh停止。

    • 将 kcptun 服务设为开机启动:

      echo "sh /root/kcptun/start.sh" >> /etc/rc.local
  4. kcptun 在 Windows 客户端上的启用与配置

    • 项目发布页下载 Windows 版 kcptun 并解压缩。注意最好将 client_windows_amd64.exe 文件放在全英文路径的单独文件夹中。

    • 在上述文件夹中新建文本文档 run.vbs:

      Dim RunKcptun
      Set fso = CreateObject("Scripting.FileSystemObject")
      Set WshShell = WScript.CreateObject("WScript.Shell")
      currentPath = fso.GetFile(Wscript.ScriptFullName).ParentFolder.Path & "\"
      configFile = currentPath & "client-config.json"
      logFile = currentPath & "kcptun.log"
      exeConfig = currentPath & "client_windows_amd64.exe -c " & configFile
      cmdLine = "cmd /c " & exeConfig & " > " & logFile & " 2>&1"
      WshShell.Run cmdLine, 0, False
      'WScript.Sleep 1000
      'Wscript.echo cmdLine
      Set WshShell = Nothing
      Set fso = Nothing
      WScript.quit
    • 在同一文件夹中新建客户端配置文件 client-config.json:

      注意配置文件中的以下参数必须与上面服务端的配置文件参数完全一致: key, crypt, mode, mtu, datashard, parityshard, nocomp

      localaddr 参数为本地服务的端口号,亦即 shadowsocks 客户端中填写的端口号; remoteaddr 参数为 shadowsocks 服务器的 IP 地址和其 kcptun 服务的端口号。

      其他设置事项请参考项目介绍

      {
      "localaddr": ":12345",
      "remoteaddr": "10.10.10.10:443",
      "key": "password3",
      "crypt": "salsa20",
      "mode": "fast",
      "conn": 1,
      "autoexpire": 60,
      "mtu": 1350,
      "sndwnd": 128,
      "rcvwnd": 1024,
      "datashard": 5,
      "parityshard": 5,
      "dscp": 46,
      "nocomp": true,
      "acknodelay": false,
      "nodelay": 0,
      "interval": 40,
      "resend": 0,
      "nc": 0,
      "sockbuf": 4194304,
      "keepalive": 10
      }
    • 新建stop.bat文件,用于停止 kcptun 客户端。

      taskkill /f /im client_windows_amd64.exe
    • 现在即可双击run.vbs运行 kcptun 服务,同时打开 shadowsocks 客户端,服务器地址填写 localhost,服务器端口为上述 kcptun 客户端配置文件中 localaddr 参数的数值,密码为服务器上 shadowsocks 配置文件中设置的密码,加密方式为 CHACHA20

  5. 在 shadowsocks Android 客户端配置 kcptun

    目前 shadowsocks Android 客户端已经集成了对 kcptun 的支持。

    • 在 shadowsocks Android 客户端的配置中启用 KCP 协议,在 KCP端口 中填写 kcptun 服务的端口号。

    • KCP 参数中填写参数,除最后一项外其他参数必须与服务端配置文件中的参数一致

      --key password3 --crypt salsa20 --mode fast --datashard 5 --parityshard 5 --nocomp --dscp 46
      
    • 启动 shadowsocks 客户端服务即可。


  • 使用的项目的Github地址:

shadowsocks: https://github.com/shadowsocks/shadowsocks

kcptun: https://github.com/xtaci/kcptun

supervisor: https://github.com/Supervisor/supervisor

libsodium: https://github.com/jedisct1/libsodium

shadowsocks Android: https://github.com/shadowsocks/shadowsocks-android

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment