本文主要详细讲述了Shadowsocks节点的服务器的选择、性能优化、多线路部署、多协议支持和安装配置等信息,无论是老手还是新手小白,都可以轻松了解更多指南内容,从而完成科学上网。
Shadowsocks是一种轻量级的代理软件,而且非常的高效和安全,使用起来也非常的简单,在全球范围内深受广大用户的好评。接下来我们就从零开始,为大家详细阐述如何才能配置Shadowsocks节点,从而更好的帮助大家搭建起属于自己的高性能代理服务。
Shadowsocks通常情况下会采用客户端到服务器的模式,通过加密通信来保证数据传输的安全性,接下来就是其基本的工作流程。
本地客户端将请求加密,然后将其发送到远程的服务器当中。
服务器接收到并解密请求,然后访问目标网站或者是服务。
服务器将会获取的内容进行加密,然后再回传给客户端。
客户端解密数据,将内容呈现给用户。
这与传统的VPN相比,更加具有轻量化,而且更难以被检测,毕竟它的流程特征更接近于普通的HTTPS流量。
如果大家能够正确的配置Shadowsocks节点,就可以更好的获取稳定且高速的网络体验,而且良好的节点配置能够拥有很多优点,主要包含以下几个方面。
首先可以提供更加稳定的连接,大大减少了断线的情况发生。
还能够获得更快的网络速度。
也可以更好的规避网络方面的封锁。
大大提升了整体的安全性。
甚至还能够降低资源的消耗,大大节约成本。
服务器提供商的选择
建议大家能够选择优质的服务器,这样才能够搭建起高性能的Shadowsocks节点,接下来就为大家推荐几个好用的vps提供商。
Vultr 。这是全球17个数据中心,拥有SSD储存,价格非常的实惠,价格在五美元每月起。
DigitalOcean 。知名度相对比较高,而且能够提供稳定的使用环境,适合大家长期使用。
Linode 。这个性能还是非常不错的,而且技术支持响应特别快。
Bandwagon Host 。这款的性价比还是非常高的,特别适合那些预算有限的用户。
AWS Lightsail。这个是属于亚马逊旗下的产品,可靠性相对比较高,而且有免费的试用期。
服务器区域的选择
建议大家一定要选择适合的服务区地区,这样对于连接速度和稳定性都会有直接的影响,直接影响到大家是否能够拥有良好的科学上网环境。
香港地区,优势是距离近,延迟低,适用的用途包括日常网页浏览和视频观看。
日本地区,优势是速度较快,稳定性较高,适用用途包括游戏和视频流媒体。
美国地区,优势是稳定性比较高,而且资源比较丰富,适合用途是长期稳定的使用,而且对延迟不敏感的场景进行使用。
新加坡地区,这是一个亚洲节点,优点是延迟适中,综合用途比较多,适合用途,亚洲地区进行访问。
系统环境的准备
如果想要拥有更好的科学上网环境,推荐大家使用的操作系统及特点主要包含以下几个方面。
CentOS7/8,稳定性比较好,特别适合长期运行。
Debian10/11,轻量且高效,资源的占用相对比较少。
Ubuntu20.04/22.04,更新比较及时,而且软件包比较丰富。
接下来就以Ubuntu 22.04为例子,然后进行基本环境的配置,内容主要如下:
hljs bash
# 更新系统
sudo apt update && sudo apt upgrade -y
# 必要工具的安装
sudo apt install -y vim wget unzip curl git net-tools
# 配置防火墙开放SSH和Shadowsocks端口
sudo apt install -y ufw
sudo ufw allow ssh
sudo ufw allow 8388/tcp # Shadowsocks默认端口
sudo ufw allow 8388/udp # 如需UDP转发
sudo ufw enable
安全方面的建议
大家在开始安装Shadowsocks之前,为了能够保证安全性,建议大家能够进行以下安全方面的设置。
首先需要修改默认的ssh端口,可以选择,但是比较推荐:
hljs bash
sudo vim /etc/ssh/sshd_config
# 找到Port 22这一行,改为其他端口如Port 2222
sudo systemctl restart sshd
建议设置一个强密码,或者是使用ssh密钥登录。
禁用密码进行登录,然后开启密钥登录,这样做的目的是为了提高安全性。
同时还需要安装Fail2ban,目的是为了防止暴力破解。
Shadowsocks服务端的安装
其实在现实生活中Shadowsocks具体有很多个版本,主要包含以下几个版本。
Shadowsocks-libev,主要是c语言的编程,性能非常的不错,而且占用资源也比较少。
Shadowsocks-rust,主要是Rust语言的重写,大大提高了安全性能,性能也比较好。
Shadowsocks-python,是最原始的版本,已经不再积极维护了。
ShadowsocksR,是ss的增强版本,已经增加了功能强大的混淆功能。
然而本文主要为大家介绍性能比较好的Shadowsocks-libev和最近比较流行的Shadowsocks-rust,及其相关的安装方法。
第一种方法,使用包管理安装的Shadowsocks-libev
首先需要在Ubuntu/Debian系统的上:
hljs bash
# 安装过程当中所需要的库
sudo apt install -y build-essential autoconf libtool libssl-dev libpcre3-dev libc-ares-dev libev-dev asciidoc xmlto automake
# 添加PPA源并安装
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:max-c-lv/shadowsocks-libev -y
sudo apt update
sudo apt install -y shadowsocks-libev
在CentOS系统上面:
hljs bash
# 安装EPEL
sudo yum install epel-release -y
# shadowsocks-libev的安装
sudo yum install shadowsocks-libev -y
第二种方法,Shadowsocks-rust的安装
hljs bash
# (以x86_64架构为例)下载预编制的二进制文件
wget https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.15.2/shadowsocks-v1.15.2.x86_64-unknown-linux-gnu.tar.xz
# 解压
tar -xf shadowsocks-v1.15.2.x86_64-unknown-linux-gnu.tar.xz
# 移动到bin目录
sudo mv ssserver sslocal ssurl ssmanager /usr/local/bin/
# 权限的设置
sudo chmod +x /usr/local/bin/ss*
第三种方法,使用一键安装脚本
对于很多新手来说,以上两种配置相对来说比较复杂,我们就可以使用一键安装脚本来简化整个安装流程。
hljs bash
# 脚本的下载
wget –no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.sh
# 执行权限的添加
chmod +x shadowsocks-all.sh
# 安装脚本的运行
sudo ./shadowsocks-all.sh
脚本运行之后,就可以根据提示选择Shadowsocks版本、加密方式、设置密码和端口等了。
服务端配置的详细信息
基本配置文件
Shadowsocks通常情况下会使用JSON格式的配置文件,而对于Shadowsocks-libev本来说,我们需要在/etc/shadowsocks-libev/目录下面来创建配置文件:
hljs bash
sudo vim /etc/shadowsocks-libev/config.json
然后就是填入以下的基本配置信息:
hljs json
{
“server”:”0.0.0.0″,
“server_port”:8388,
“password”:”your_password”,
“timeout”:300,
“method”:”aes-256-gcm”,
“fast_open”:true,
“mode”:”tcp_and_udp”
}
以下是关于详细参数的解释
参数名称为Server,就是监听地址,推荐值为0.0.0.0表示所在的地址。
参数名称为Server_port,就是监听端口,推荐值为非常用的端口,比如8388,8989等。
参数名称为Password,就是连接密码,推荐值为复杂的随机密码,最少8位数。
参数名称为Timeout ,就是只连接超时的时间,以秒为单位,推荐值为300~600之间。
参数名称为Method,就是加密方式,推荐值为ase-256-gcm(比较推荐这个)或者chacha20-ietf-poly1305。
参数名称为fast-open,主要是指tcp快速打开,推荐值为true(这个需要Linux 内核3.7+的支持)。
参数名称为mode,主要是指转发模式,推荐值为tcp_and_udp(同时支持tcp和udp)。
一些高级配置选项
接下来就为大家简单介绍一下一些高级配置参数,具体可以根据实际需要进行添加:
hljs json
{
“server”:”0.0.0.0″,
“server_port”:8388,
“password”:”your_password”,
“timeout”:300,
“method”:”aes-256-gcm”,
“fast_open”:true,
“mode”:”tcp_and_udp”,
“nameserver”:”8.8.8.8″,
“ipv6_first”:false,
“no_delay”:true,
“workers”:2,
“mtu”:1400
}
关于这些高级参数的解释
nameserver:主要是DNC服务器,可以使用Google的8.8.8.8,或者是Cloudflare的1.1.1.1。
ipv6_first,:主要是指是否优先使用ipv6。
no_delay:主要是否禁用Nagle 算了,开启之后就可以减少延迟了。
workers:主要是指工作进程数,一般情况下设置为CPU核心数。
mtu:主要是指最大的传输单元,网络条件不佳的时候可以调低。
服务的启动
那么对于Shadowsocks-libev,可以这样启动:
hljs bash
# 启动使用配置文件
sudo systemctl start shadowsocks-libev
# 开机自己的设置
sudo systemctl enable shadowsocks-libev
# 查看服务状态
sudo systemctl status shadowsocks-libev
对于Shadowsocks-rust,可以这样完成启动:
首先需要创建systemd服务文件:
hljs bash
sudo vim /etc/systemd/system/shadowsocks-rust.service
然后添加以下内容:
[Unit]
Description=Shadowsocks-rust Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks-rust/config.json
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
最后启动服务
hljs bash
sudo systemctl daemon-reload
sudo systemctl start shadowsocks-rust
sudo systemctl enable shadowsocks-rust
各个平台客户端有哪些推荐呢?
Windows平台,推荐的客户端是shadowsocks-windows ,下载地址为GitHub。
macOS平台,推荐的客户端为shadowsocksX-NG,下载地址为GitHub 。
iOS平台,推荐的客户端为shadowrocket,下载地址为APP Store,这个是需要付费的。
安卓平台,推荐的客户端是shadowsocks-Android ,下载地址为GitHub 。
Linux平台,推荐的客户端为shadowsocks-libev,下载地址为包管理器安装。
客户端的配置方法
一定要记住客户端的配置需要与服务端保持一致, 这其中主要包括加密方式、端口、服务器地址和密码等信息。
接下来就以Windows的客户端为例子,为大家讲述详细的过程。
首先需要大家下载并安装好shadowsocks-windows。
右键点击托盘图标,然后选择服务器按钮,再点击编辑服务器。
接下来就是填入配置信息。在这其中服务器地址可以填写自己的vps ip地址,服务器端口添加8388,或者也可以设置其他端口,密码就是设置成为自己的密码,加密要与服务端一致,备注方面可以自定义名称,比如填写美国节点等。
填写完成之后,点击确认保存。
然后右键点击托盘的图标,并选择启用系统代理。
比较相关配置方法
其实我们除了进行手动配置之外,还有以下几种好用的配置方法。
第一种是二维码的配置方法
首先需要在服务器端生成配置好的二维码。
hljs bash
echo -n “ss://$(echo -n aes-256-gcm:your_password@your_server_ip:8388 | base64 | tr -d ‘\n’)” | qrencode -o ss-qr.png。
然后客户端扫描二维码就可以成功的导入。
第二种方法是url导入
首先需要生成配置url。
hljs bash
echo “ss://$(echo -n aes-256-gcm:your_password@your_server_ip:8388 | base64 | tr -d ‘\n’)”
接下来就可以在客户端当中复制url并导入。
第三种方法是订阅链接
这种方法特别适合多节点进行管理,可能需要自建订阅服务器或者是使用第三方的服务。
代理模式该如何选择呢?
其实对于大多数的shadowsocks客户端来说都支持以下几种代理模式:
Pac模式。可以根据pac的规则智能化的进行分流,国内网站一般采用直连的方式,国外网站则直接走代理。
全局模式。这种模式下所有的流量都会经过代理服务器。
直连模式。这种模式不需要使用代理,可以直接连接。
其实我们完全可以根据使用场景的不同,来选择适合于自己的模式。
普通的浏览模式可以选择pac模式,这种方法比较推荐,而且还能节省流量。
特殊应用的需求还是建议大家选择全局模式。
对于临时不需要代理的情况,可以选择直连模式。
进阶配置与性能的优化
内核方面的优化
如果能够更好的优化Linux 内核参数,其实就可以更好的且显著的提升shadowsocks性能:
hljs bash
sudo vim /etc/sysctl.conf
添加以下配置:
# 开启TCP BBR拥塞控制算法
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
# 提高系统对TCP连接的处理能力
net.core.somaxconn=32768
net.ipv4.tcp_max_syn_backlog=16384
net.ipv4.tcp_max_tw_buckets=5000
net.ipv4.tcp_fin_timeout=30
# 开启TCP Fast Open
net.ipv4.tcp_fastopen=3
# 提高最大文件打开数量
fs.file-max=1000000
应用配置:
hljs bash
sudo sysctl -p
这个时候需要增加最大可以打开文件的数量,具体操作是
hljs bash
sudo vim /etc/security/limits.conf
然后添加以下内容:
* soft nofile 51200
* hard nofile 51200
接下来修改shadowsocks服务配置:
hljs bash
sudo mkdir -p /etc/systemd/system/shadowsocks-libev.service.d/
sudo vim /etc/systemd/system/shadowsocks-libev.service.d/nofile.conf
添加:
[Service]
LimitNOFILE=51200
重新加载配置:
hljs bash
sudo systemctl daemon-reload
sudo systemctl restart shadowsocks-libev
shadowsocks其实拥有很多可以支持的插件,使用之后就可以更好的增强其功能。
simple-obfs:一个轻量级可以混淆插件,可以伪装流量为HTTP或TLS
hljs bash
# 安装simple-obfs
sudo apt install -y –no-install-recommends build-essential autoconf libtool libssl-dev libpcre3-dev libev-dev asciidoc xmlto automake
git clone https://github.com/shadowsocks/simple-obfs.git
cd simple-obfs
git submodule update –init –recursive
./autogen.sh
./configure && make
sudo make install
v2ray-plugin:这是一款功能更强大的插件,支持WebSocket和TLS
hljs bash
# 下载预编译文件
wget https://github.com/shadowsocks/v2ray-plugin/releases/download/v1.3.1/v2ray-plugin-linux-amd64-v1.3.1.tar.gz
tar -xf v2ray-plugin-linux-amd64-v1.3.1.tar.gz
sudo mv v2ray-plugin_linux_amd64 /usr/local/bin/v2ray-plugin
sudo chmod +x /usr/local/bin/v2ray-plugin
使用插件配置的相关例子为:
hljs json
{
“server”:”0.0.0.0″,
“server_port”:8388,
“password”:”your_password”,
“timeout”:300,
“method”:”aes-256-gcm”,
“fast_open”:true,
“plugin”:”v2ray-plugin”,
“plugin_opts”:”server;tls;host=your.domain.com”
}
如果用户能够进行多个节点的部署,这样就可以大大提高其可用性和性能,是一个非常不错的方法,通过在不同地域部署多个服务器,我们就可以轻松实现以下几个方面:
优化地域接入,可以根据用户的位置选择最佳的节点。
可用的高性能,当某个节点出现问题的时候,可以自由的进行切换。
负载分散。可以有效的进行分散流量负载,从而大大提高了整体性能。
负载均衡如何设置呢?
这就需要大家使用HAProxy,从而实现非常简单的负载均衡,具体操作步骤如下:
首先需要安装这个软件
hljs bash
sudo apt install -y haproxy
配置HAProxy:
hljs bash
sudo vim /etc/haproxy/haproxy.cfg
添加以下配置(假设有两个Shadowsocks节点):
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend ss-in
bind *:8388
default_backend ss-out
backend ss-out
balance roundrobin
server server1 your_server1_ip:8388 check
server server2 your_server2_ip:8388 check
最后重启HAProxy:
hljs bash
sudo systemctl restart haproxy
用户使用Shadowsocks-manager可以实现多用户管理:
安装Node.js和Shadowsocks-manager:
hljs bash
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash –
sudo apt install -y nodejs
sudo npm install -g shadowsocks-manager
创建配置文件:
hljs bash
mkdir -p ~/.ssmgr
vim ~/.ssmgr/ss.yml
添加以下内容:
hljs yaml
type: s
shadowsocks:
address: 127.0.0.1:6001
manager:
address: 0.0.0.0:6002
password: your_manager_password
db: ~/.ssmgr/ss.sqlite
启动服务:
hljs bash
screen -S ssmgr
ssmgr -c ~/.ssmgr/ss.yml
选择相应的加密方式
Shadowsocks目前有多种加密方式,在这里还是建议大家选择AEAD加密:
aes-256-gcm,安全性能比较高性能良好,强烈推荐给大家。
chacha20-ietf-poly1305,安全性比较高,性能方面在ARM设备上能更好一些,强烈推荐给大家。
aes-128-gcm,安全性中高,性能极好,推荐大家。
xchacha20-ietf-poly1305,安全性极好,性能良好,推荐大家。
端口的伪装
为了避免使用常见端口
不推荐的端口有:22,443,80,8080,8388,1080
推荐的端口:10000~60000范围内的随机端口都可以
建议使用混淆插件
推荐使用前面提到的simple-obfs或者是v2ray-plugin插件来伪装流量,具体为:
hljs json
{
“server”:”0.0.0.0″,
“server_port”:8388,
“password”:”your_password”,
“timeout”:300,
“method”:”aes-256-gcm”,
“fast_open”:true,
“plugin”:”simple-obfs”,
“plugin_opts”:”obfs=http;obfs-host=www.bing.com”
}
建议可以创建一个简单的更新脚本,具体为:
hljs bash
vim /usr/local/bin/update-ss.sh
接下来就可以填写以下内容:
hljs bash
#!/bin/bash
# 生成随机端口(推荐数量在10000-60000之内的端口)
NEW_PORT=$((RANDOM % 50000 + 10000))
# 接下来生成随机密码
NEW_PASSWORD=$(openssl rand -base64 12)
# 更新配置文件
sed -i “s/\”server_port\”:[0-9]*/\”server_port\”:$NEW_PORT/” /etc/shadowsocks-libev/config.json
sed -i “s/\”password\”:\”[^\”]*\”/\”password\”:\”$NEW_PASSWORD\”/” /etc/shadowsocks-libev/config.json
# 重启服务
systemctl restart shadowsocks-libev
# 打印新配置
echo “Shadowsocks配置已更新:”
echo “端口: $NEW_PORT”
echo “密码: $NEW_PASSWORD”
# 生成分享链接
METHOD=$(grep -o ‘”method”:”[^”]*”‘ /etc/shadowsocks-libev/config.json | cut -d'”‘ -f4)
SERVER_IP=$(curl -s ifconfig.me)
SS_URL=”ss://$(echo -n “${METHOD}:${NEW_PASSWORD}@${SERVER_IP}:${NEW_PORT}” | base64 | tr -d ‘\n’)”
echo “分享链接: $SS_URL”
然后执行和设置权限,同时还需要添加定时任务
hljs bash
chmod +x /usr/local/bin/update-ss.sh
crontab -e
在这里面建议添加每月更新一次:
0 0 1 * * /usr/local/bin/update-ss.sh > /root/ss-update.log 2>&1
连接问题排查的流程是什么呢?
首先需要检查服务端的状态,具体为:
hljs bash
sudo systemctl status shadowsocks-libev
查看服务的日志,具体为:
hljs bash
sudo journalctl -u shadowsocks-libev
检查防火墙的设置,具体为:
hljs bash
sudo ufw status
测试端口的可达性,具体为:
hljs bash
nc -zv your_server_ip your_server_port
检查配置文件的语法,具体为:
hljs bash
jq . /etc/shadowsocks-libev/config.json
常见的问题和解决方法
连接超时的问题
首先需要检查防火墙的相关规则。
验证服务是否能够正常的运行。
测试tcp端口是否已经开放。
尝试更换其他端口。
速度变缓慢了
开始启用bbr拥堵控制算法。
调整mtu的大小,建议尝试1400或者是1500。
更换加密方式,比较建议尝试aes-128-gcm。
检查服务器的负载情况和宽带的使用情况。
频繁的断线问题
可以增加Timeout 就是,比如600秒。
检查服务器的负载情况。
可能需要更换相关的IP和服务商
端口无连接的问题
确认客户端配置与服务器端是否保持一致。
检查密码当中是否有特殊符号。
验证加密方法是否兼容。
都有哪些性能测试的方法呢?
网络速度测试的方法
hljs bash
wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
chmod +x speedtest-cli
./speedtest-cli
宽带占用的测试方法
hljs bash
apt install -y vnstat
vnstat -l -i eth0
延迟的测量方法
hljs bash
ping -c 10 google.com
在本篇文章当中主要为大家详细介绍了shadowsocks节点的配置过程,不仅教会了大家如何选择服务器,也教会了大家如何进行高级的优化,这样大家就可以从入门到精通,全面的了解一下。相信通过合理的配置就可以获得更加安全、高效且稳定的代理服务。