近期开会导致墙越来越高,迫不得已升级自建的 ss 服务,由于 shadowsocks 原版已经停更,shadowsocksR 也已经删库,所以就锁定 libev 版本。 注:以下服务器端内容请切换到 root 操作

1. 升级 Debian

在升级之前,我需要先把服务器从 Debian 8 升级到 Debian 9,如果不是 Debian 用户,或者不想升级的可以跳过,这一步不影响后续操作,但是部分代码可能需要修改。

首先要把 Debian 8 升级到最新版本

apt update
apt upgrade

备份源列表

cp /etc/apt/sources.list /etc/apt/sources.list-jessie

修改源列表,把 jessie 替换为 stretch

vim /etc/apt/sources.list
:s/jessie/stretch/g

再次更新升级

 apt update
 apt upgrade
 apt dist-upgrade
 apt autoremove

2. 开启 BBR

使用一键脚本安装并开启 bbr,此步除 OpenVZ 以外的服务器都可以开启,跳过不影响后续内容。

wget --no-check-certificate https://raw.githubusercontent.com/princelai/across/master/bbr.sh
chmod +x bbr.sh
./bbr.sh
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
lsmod | grep bbr

3. 安装 shadowsocks-libev 和 simple-obfs 混淆

需要从 stretch-backports 库中安装,非 Debian 9 用户请参考文档

sh -c 'printf "deb http://deb.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/stretch-backports.list'
apt update
apt -t stretch-backports install shadowsocks-libev simple-obfs

4. 优化 TCP 网络

编辑 sysctl 文件,把下面的内容复制过去, 如果第二步中没有开启 bbr,那么请删除前两行。

vim /etc/sysctl.conf

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_fastopen = 3
fs.file-max = 1024000
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.netdev_max_backlog = 4096
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 = 4096
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.ipv4.tcp_mtu_probing = 1
net.ipv4.ip_forward = 1

更改保存后执行

sysctl -p

5. 配置服务端

修改配置

编辑配置文件,填上自己的密码,端口建议使用 443,别的端口封杀的太严重。 关于加密方式,现在新版都支持 AEAD 加密方式,详细内容请点这里

vim /etc/shadowsocks-libev/config.json

{
  "server": "0.0.0.0",
  "server_port": 443,
  "local_port": 1080,
  "password": "",
  "timeout": 100,
  "method": "chacha20-ietf-poly1305",
  "mode": "tcp_and_udp",
  "fast_open": true,
  "plugin": "obfs-server",
  "plugin_opts": "obfs=tls"
}

启动服务器端服务

如果已经按照上面编辑好配置文件,那么就可以直接用文件模式启动服务。

ss-server -c config.json #测试模式
systemctl start shadowsocks-libev #后台启动
systemctl enable shadowsocks-libev #开机启动

6. 配置客户端

Windows

下载shadowsocks-windows解压缩, 下载simple-obfs中的 obfs-local.exe 和 msys-2.0.dll 放到 shadowsocks-windows 目录中,obfs-host 随意写一个中国可以访问的网站。 shadowsocks-windows

Linux

安装客户端和 obfs

sudo pacman -Syu
sudo pacman -S shadowsocks-libev simple-obfs

开启本地服务

nohup ss-local -c config.json --plugin obfs-local --plugin-opts "obfs=tls;obfs-host=cn.bing.com"

开机启动,编辑启动文件 ,添加 obfs 混淆

vim /usr/lib/systemd/system/[email protected]

[Unit]
Description=Shadowsocks-Libev Client Service
After=network.target

[Service]
Type=simple
User=nobody
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=/usr/bin/ss-local -c /etc/shadowsocks/%i.json --plugin obfs-local --plugin-opts "obfs=tls;obfs-host=cn.bing.com"

[Install]
WantedBy=multi-user.target

编辑配置文件 vim /etc/shadowsocks/libev.json

{
  "server": "你的服务器IP",
  "server_port": 443,
  "local_address": "127.0.0.1",
  "local_port": 65509,
  "password": "你的密码",
  "timeout": 300,
  "method": "chacha20-ietf-poly1305",
  "fast_open": true,
  "workers": 1,
  "prefer_ipv6": false
}

开启服务,@后面要和 json 文件同名

sudo systemctl start [email protected]
sudo systemctl enable  [email protected]

其他内容请参考Archlinux Wiki shadowsocks-qt5 目前功能严重缺失,不建议使用,Linux 平台最好是命令行模式

SwitchyOmega是目前 Chome 最好的代理插件,可以在官网下载最新版本安装。

7.Android 客户端配置

如果 Android 手机可以访问 Google Play,则可以直接在上面搜 shadowsocks 和 obfs 分别安装后再配置即可。

如果当前手机不能访问 Play,可以在 github releases 上分别下载shadowsocks-androidsimple-obfs-android,安装后再配置自己的服务端信息。

8.socks5 转 http/https

实际使用中,经常会遇到命令行终端或本地程序需要代理,但是他们只支持 http 或 https 协议,所以就需要把 socks5 协议的代理转换协议,以 Archlinux 为例,方法也很简单。

安装 privoxy

sudo pacman -S privoxy

修改配置,找到如下两行打开注释,注意 listen 后的端口是未来我们要使用的端口,默认为 8118,forward 后的端口是 shadowsocks 使用的本地端口,这个依据自己的配置修改,不要忘了最后的”.”。 sudo vim /etc/privoxy/config

listen-address  127.0.0.1:8118
forward-socks5t   /   127.0.0.1:65509 .

保存配置后,启动或重启服务

sudo systemctl start privoxy
sudo systemctl restart privoxy

以后需要使用时,修改两个本地变量即可

echo https_proxy=127.0.0.1:8118
echo http_proxy=127.0.0.1:8118

9. 服务器端常用的命令

#测试ss+obfs是否正常启动
ss-server -c config.json --plugin obfs-server --plugin-opts "obfs=http"
#查看obfs的进程编号
ps ax|grep obfs
#查看ss的进程编号
ps ax|grep ss-server
#查看ss监听端口
netstat -nlp |grep ss-server