1.
准备与环境检查
在
香港VPS(推荐Debian/Ubuntu 20.04)上执行:apt update && apt upgrade -y;检查内核版本 uname -r;确认防火墙(ufw/iptables)状态。开启必要工具:apt install git curl wget python3-pip net-tools -y。准备一个绑定的域名(可选但强烈建议),并在域名解析里添加A记录指向VPS。
2.
下载并配置SSR服务端
克隆常用SSR服务端仓库:git clone https://github.com/shadowsocksrr/shadowsocksr.git /opt/shadowsocksr;进入目录修改config.json,示例关键字段:
{"server":"0.0.0.0","server_port":443,"password":"强密码","method":"aes-256-cfb","protocol":"auth_sha1_v4","obfs":"tls1.2_ticket_auth","timeout":300,"fast_open":true}
说明:使用高强度密码、协议选auth_sha1_v4、混淆选tls等更易躲避简单识别。
3.
开启系统级优化
编辑/etc/sysctl.conf,加入或修改:
net.ipv4.tcp_fastopen=3
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
保存后执行 sysctl -p。启用BBR(若内核支持):echo "tcp_bbr" > /etc/modules-load.d/bbr.conf。
4.
防火墙与端口策略
用iptables允许SSR端口并限制扫描:
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
保存规则:apt install iptables-persistent -y && netfilter-persistent save。
建议用多端口、端口轮换或端口伪装(例如同时开启一个常见端口80/443和一个随机高位端口)。
5.
TLS伪装与域名+CDN策略
使用域名并申请Let's Encrypt证书(acme.sh或certbot)。可使用stunnel把SSR流量包裹在TLS里,或用Cloudflare的Full (strict) + proxied 模式(注意Cloudflare仅对HTTP/HTTPS有效)。stunnel基本步骤:apt install stunnel4,生成证书,配置/etc/stunnel/stunnel.conf,监听443并转发到SSR本地端口。
6.
进程守护与自动重启
推荐使用systemd单元文件来守护SSR,示例:
[Unit] Description=ssr
[Service] ExecStart=/usr/bin/python3 /opt/shadowsocksr/shadowsocks/server.py -c /opt/shadowsocksr/config.json Restart=always RestartSec=5
[Install] WantedBy=multi-user.target
保存为/etc/systemd/system/ssr.service,执行 systemctl daemon-reload && systemctl enable --now ssr.service。再写 cron 或小脚本定期检查进程并重启。
7.
日志、监控与健康检查
把日志输出到单独文件并用logrotate轮转。安装mtr、iftop、vnstat用于网络诊断。编写健康脚本 /usr/local/bin/ssr-check.sh:
#!/bin/bash
ss -ltnp | grep server.py || systemctl restart ssr
并在crontab里每5分钟运行一次以自动恢复。
8.
防封策略与混淆细节
实战建议:使用混淆(obfs)+协议混淆,限制每连接速率,启用timeout与连接复用限制;定期更换端口与密码;结合stunnel或nginx+TLS伪装HTTP/WS;使用真实域名和证书,设置合理SNI;避免使用明显的SSR默认指纹。
9.
负载与多节点冗余
若对稳定性要求更高,部署至少两个香港或邻近地区节点,客户端配置多个服务器条目并启用自动切换(客户端支持)。同时用脚本定期快照VPS(VPS提供商API),以便节点被封后快速恢复。
10.
流量控制与节省
在config.json设置speed_limit_per_connetion与timeout以防单连接占满带宽;启用TCP Fast Open(见第3条)可降低握手延迟;为防DDOS,限制每IP并配合fail2ban规则。
11.
常用排错命令与定位方法
netstat -ltnp 或 ss -ltnp :查看监听端口;tcpdump -i eth0 port 443 :抓包分析;mtr
:检测路由与丢包;tail -f /var/log/ssr.log:查看服务端错误。
12.
运维自动化示例脚本(端口轮换)
示例cron脚本每周切换端口与密码并reload:
newport=$((RANDOM%50000+10000))
newpwd=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c16)
sed -i "s/\"server_port\":.*/\"server_port\": ${newport},/" /opt/shadowsocksr/config.json
sed -i "s/\"password\":.*/\"password\": \"${newpwd}\",/" /opt/shadowsocksr/config.json
systemctl restart ssr
并通过邮件/IM通知用户新端口和密码(注意分发安全)。
13.
问:被动检测频繁导致连接不稳定,如何快速定位是哪一环节被封或限速?
答:先用mtr从客户端到服务器测路由丢包,再在服务器用tcpdump抓包看SYN/ACK是否正常;检查iptables和云厂商控制台是否有流量限制或异常拒绝;若仅TLS握手失败,排查证书和SNI;若ICMP和TCP均丢包,可能是上游链路或被流量清洗。
14.
问:开启混淆和TLS伪装后,如何确保兼容大多数客户端且不降低性能?
答:选择客户端/服务端都支持的混淆(如tls1.2_ticket_auth)并测试多种传输参数;使用stunnel或nginx做TLS终端可以兼容性最好,性能上保证开启TCP Fast Open与BBR,并用合理MTU和并发限制来避免CPU瓶颈。
15.
问:如果香港节点被封,最稳妥的应急恢复流程是什么?
答:第一步启用备用节点(事先准备好);第二步从快照恢复或启用预置脚本替换端口与证书;第三步在客户端侧切换到备用节点并发布必要的密码/端口更新;最后对被封节点做取证(抓包、路由、告警)并评估是否继续替换IP/域名。
来源:如何保障香港vps搭建ssr后的连接稳定性与防止被封锁的实用策略