配置 WebSocket over TLS 的 Shadowsocks 代理
在Ubuntu服务器上配置WebSocket over TLS的shadowsocks代理。以下是详细的步骤:
1. 安装必要的软件包
sudo apt update
sudo apt install -y shadowsocks-libev nginx certbot python3-certbot-nginx
2. 安装v2ray-plugin插件(提供WebSocket支持)
# 下载最新的v2ray-plugin
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
3. 配置shadowsocks-libev
sudo nano /etc/shadowsocks-libev/config.json
填入以下内容(请修改密码):
{
"server":"0.0.0.0",
"server_port":8388,
"password":"设置一个强密码",
"timeout":300,
"method":"chacha20-ietf-poly1305",
"plugin":"v2ray-plugin",
"plugin_opts":"server;path=/ws"
}
配置修改完成后,需要重启服务:
sudo systemctl restart shadowsocks-libev
确认服务状态:
sudo systemctl status shadowsocks-libev
4. 申请SSL证书
确保您的域名已正确指向服务器IP(通过A记录)。
替换下面的yourdomain.com
为您的实际域名:
sudo certbot --nginx -d yourdomain.com
5. 配置Nginx反向代理
sudo nano /etc/nginx/sites-available/default
填入以下内容(注意将配置中的yourdomain.com
替换为您的实际域名):
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
#ssl_protocols TLSv1.2 TLSv1.3;
#ssl_prefer_server_ciphers on;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256;
location /ws {
proxy_pass http://127.0.0.1:8388;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
# 模拟常见网站的缓存控制头
proxy_set_header Cache-Control no-store;
proxy_set_header Pragma no-cache;
}
# 添加假网站内容增加真实性
location / {
root /var/www/html;
index index.html;
}
}
6. 启用配置并重启服务
验证配置是否有效:
sudo nginx -t
如果测试通过,重启Nginx服务:
sudo systemctl restart nginx
7. 客户端配置
在客户端上,您需要安装shadowsocks客户端和v2ray-plugin插件,配置如下:
{
"server":"your.domain.com",
"server_port":443,
"password":"您设置的强密码",
"method":"chacha20-ietf-poly1305",
"plugin":"v2ray-plugin",
"plugin_opts":"tls;host=your.domain.com;path=/ws"
}
下是在Shadowrocket中配置您新设置的代理服务的步骤:
添加服务器配置
- 打开Shadowrocket应用
- 点击右上角的"+"号添加新服务器
- 填写基本信息:
- 类型:选择"Shadowsocks"
- 地址:输入您的域名(如
yourdomain.com
) - 端口:443
- 密码:输入您在服务器配置中设置的密码
- 加密方法:选择"chacha20-ietf-poly1305"(与服务器匹配)
- 配置插件:
- 插件:选择"v2ray-plugin"
- 插件选项:点击进入配置界面,设置以下参数:
- Transport Mode:选择"websocket"
- Transport Path:输入"/ws"(与Nginx配置中的路径匹配)
- TLS:启用
- Host:输入您的域名
- 允许不安全连接:关闭
- 其他设置:
- 备注(可选):输入易于识别的名称
- 勾选"通过代理方式验证"(推荐)
Windows客户端的Shadowsocks配置指南
要在Windows上配置Shadowsocks客户端连接到您的WebSocket over TLS服务器,请按照以下步骤操作:
1. 下载并安装Shadowsocks-Windows
- 访问Shadowsocks-Windows的GitHub发布页面
- 下载最新版本的
Shadowsocks-x.x.x.zip
- 解压到您喜欢的位置
2. 下载v2ray-plugin插件
- 访问v2ray-plugin的GitHub发布页面
- 下载适用于Windows的版本,如
v2ray-plugin-windows-amd64-v1.3.1.tar.gz
- 解压文件,得到
v2ray-plugin_windows_amd64.exe
- 将此文件放入Shadowsocks安装目录下
3. 配置Shadowsocks客户端
- 启动Shadowsocks客户端
- 右键点击系统托盘中的Shadowsocks图标,选择"服务器" -> "编辑服务器..."
- 点击"添加"按钮,填写以下信息:
- 服务器地址:
your.domain.com
(您的域名) - 服务器端口:
443
- 密码: 您在服务器上设置的密码
- 加密:
chacha20-ietf-poly1305
- 插件程序:
v2ray-plugin_windows_amd64.exe
或v2ray-plugin
(根据您放置的文件名) - 插件选项:
tls;host=your.domain.com;path=/ws
- 服务器地址:
- 点击"确定"保存配置
4. 连接到服务器
- 右键点击系统托盘中的Shadowsocks图标
- 在"服务器"菜单中选择您刚才配置的服务器
- 在主菜单中选择"启用系统代理"
在 Ubuntu 服务器上启用 BBR 加速
BBR (Bottleneck Bandwidth and RTT) 是 Google 开发的一种 TCP 拥塞控制算法,可以显著提高网络吞吐量和减少延迟。以下是在 Ubuntu 服务器上启用 BBR 的详细步骤:
1. 检查内核版本
BBR 需要 Linux 内核版本 4.9 或更高。首先检查您的内核版本:
uname -r
如果版本低于 4.9,需要先升级内核。但大多数现代 Ubuntu 发行版(18.04 及以上)已经满足要求。
2. 启用 BBR
方法一:使用 sysctl 命令(推荐)
# 修改系统配置
sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'
# 应用设置
sudo sysctl -p
# 重启系统(可选但推荐)
sudo reboot
方法二:使用命令行直接启用(无需重启)
sudo modprobe tcp_bbr
sudo sh -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'
sudo sysctl -p
3. 验证 BBR 是否已启用
重启后,执行以下命令验证 BBR 是否已成功启用:
# 检查 BBR 是否在可用的拥塞控制算法列表中
sysctl net.ipv4.tcp_available_congestion_control
# 检查当前使用的拥塞控制算法
sysctl net.ipv4.tcp_congestion_control
# 检查是否正在使用 fq 队列调度算法
sysctl net.core.default_qdisc
# 验证 BBR 模块是否已加载
lsmod | grep bbr
如果 BBR 已成功启用,您应该看到类似以下的输出:
net.ipv4.tcp_available_congestion_control = reno cubic bbr
net.ipv4.tcp_congestion_control = bbr
net.core.default_qdisc = fq
并且 lsmod | grep bbr
应该会显示 tcp_bbr
模块。
4. 调整系统参数(可选,用于进一步优化)
sudo bash -c 'cat >> /etc/sysctl.conf << EOF
# 增大最大打开文件数量
fs.file-max = 1000000
# 允许更多的 TIME_WAIT 状态连接
net.ipv4.tcp_max_tw_buckets = 6000000
# 提高 TCP 最大缓冲区大小
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
# 提高 TCP 自动调整缓冲区限制
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
EOF'
# 应用设置
sudo sysctl -p
启用 BBR 后,您的网络性能应该会有所提升,特别是在处理 Shadowsocks 等需要大量网络传输的应用时。这对于改善网络延迟和吞吐量特别有帮助。
故障排除
检查服务状态:
sudo systemctl status shadowsocks-libev
查看详细的日志来确定问题所在:
# 查看详细错误日志
sudo journalctl -u shadowsocks-libev -n 50
JSON格式中的语法错误是常见的问题。缺少逗号在JSON中会导致解析失败,从而使服务无法启动。
请修复您的config.json文件,确保每个键值对之间都有逗号分隔(最后一个键值对除外)。
例如,您的错误可能类似于:
{
"server":"0.0.0.0",
"server_port":8388,
"password":"您的密码",
"timeout":300,
"method":"chacha20-ietf-poly1305" // 这里缺少逗号
"plugin":"v2ray-plugin",
"plugin_opts":"server;tls;host=your.domain.com;path=/ws"
}
正确的格式应该是:
{
"server":"0.0.0.0",
"server_port":8388,
"password":"您的密码",
"timeout":300,
"method":"chacha20-ietf-poly1305", // 添加了逗号
"plugin":"v2ray-plugin",
"plugin_opts":"server;tls;host=your.domain.com;path=/ws"
}
修复后,请重新启动服务:
sudo systemctl restart shadowsocks-libev
然后检查服务状态:
sudo systemctl status shadowsocks-libev
(以上所有内容由 Claude AI 生成)