顺序不是随手排的,是先能连、再测、再调、最后才建服务:
| 阶段 | 内容 | 为什么必须在这 |
|---|---|---|
| 0 | 公钥 + 改端口 + 关密码 | 一切的前提;先放行再改端口,先验证再关密码 |
| 1 | TCP 质量检测 | 机器不行就不用往下折腾了 |
| 2 | 综合跑分留档 | 趁环境干净记录基线,调优后能对比 |
| 3 | TCP 调优 | 要等检测有结论再动参数,否则测的是调优后的假象 |
| 4 | Reality 目标筛选 | 建节点前先有候选,别建完再找 SNI |
| 5 | 建节点 | 前面都确认过才暴露服务 |
阶段 0 · SSH 加固
三条铁律,顺序错了就锁死自己:
- 先放行端口,再改端口。
- 先确认公钥能登,再关密码。
- 改配置前备份,改完
sshd -t校验,别带着坏配置 reload。
0.1 云厂商安全组先放行
控制台网络/防火墙里放行 TCP 30000。这一步只能手工做,脚本管不到。
Debian 13 最小安装默认不装 ufw 也不带 iptables 规则,能拦你的基本只有云安全组,所以这一步是唯一必做项。要上本机防火墙,装完 ufw 后先把 30000 放行、再把 22 关掉,顺序反了就断:ufw allow 30000/tcp && ufw allow 22/tcp && ufw enable && ufw delete allow 22/tcp。
0.2 装公钥
本地复制公钥内容(~/.ssh/id_ed25519.pub 全文),在 VPS 上粘进去:
mkdir -p /root/.ssh && chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys
echo 'ssh-ed25519 AAAA...你的公钥... me@pc' >> /root/.ssh/authorized_keys改完确认行数对得上,别粘成两截:
awk '{print $1, $3}' /root/.ssh/authorized_keys0.3 改端口
Debian 13 的 sshd 是普通 systemd 服务,端口直接改 /etc/ssh/sshd_config 就生效,没有 socket 激活那些绕路。
主配置里 Port 默认是注释掉的,先删干净再在文件头写一条:
cp -a /etc/ssh/sshd_config /root/sshd_config.bak
sed -i -E '/^[[:space:]]*#?[[:space:]]*Port[[:space:]]+[0-9]+/d' /etc/ssh/sshd_config
sed -i '1i Port 30000' /etc/ssh/sshd_config
sshd -t && systemctl reload sshPort 插在文件头,正好排在 Include /etc/ssh/sshd_config.d/*.conf 前面,不会被 drop-in 顶掉。
校验失败就写回去:cp -a /root/sshd_config.bak /etc/ssh/sshd_config && systemctl reload ssh。
只有换到 Ubuntu 23.04+ 才需要处理 socket 激活:
systemctl is-enabled ssh.socket有输出就别改sshd_config,端口要写进/etc/systemd/system/ssh.socket.d/10-port.conf(一行空ListenStream=清默认值 + 一行ListenStream=30000),再systemctl daemon-reload && systemctl restart ssh.socket。
0.4 验证再往下
ss 先看端口在听:
ss -lntp | grep 30000当前会话别关,本地另开终端:
ssh -p 30000 root@<VPS_IP>登进去了,才继续 0.5。登不进去就查安全组,然后用老端口回去改。
0.5 关密码登录
坑:云镜像常把 PasswordAuthentication yes 写在 /etc/ssh/sshd_config.d/*.conf 里,而 sshd 是「首次出现生效」,只改主配置会被 drop-in 覆盖,白改。 主配置和所有 drop-in 一起处理:
mkdir -p /root/sshd-bak
cp -a /etc/ssh/sshd_config /root/sshd-bak/
for f in /etc/ssh/sshd_config.d/*.conf; do
[ -e "$f" ] || continue
cp -a "$f" /root/sshd-bak/
sed -i -E 's/^([[:space:]]*PasswordAuthentication[[:space:]]+).*/\1no/' "$f"
sed -i -E 's/^([[:space:]]*KbdInteractiveAuthentication[[:space:]]+).*/\1no/' "$f"
grep -qi '^[[:space:]]*PasswordAuthentication' "$f" || echo 'PasswordAuthentication no' >>"$f"
done
sed -i -E 's/^([[:space:]]*#?[[:space:]]*PasswordAuthentication[[:space:]]+).*/\1no/' /etc/ssh/sshd_config
grep -qi '^[[:space:]]*PasswordAuthentication' /etc/ssh/sshd_config || echo 'PasswordAuthentication no' >>/etc/ssh/sshd_config
sed -i -E 's/^([[:space:]]*#?[[:space:]]*PermitRootLogin[[:space:]]+).*/\1prohibit-password/' /etc/ssh/sshd_config
sshd -t && systemctl reload sshKbdInteractiveAuthentication 必须一起关,否则 PAM 那条路还能用密码进。
查实际生效值,有 passwordauthentication no 才算成功:
sshd -T | grep -iE '^(passwordauthentication|permitrootlogin|kbdinteractive)'sshd -T 里还有 yes 就说明有 drop-in 在覆盖,grep -ri passwordauthentication /etc/ssh/sshd_config.d/ 揪出来改掉。
阶段 1 · TCP 质量检测
全国三网回程、大包、单线程测速,出图。跑得久,放 tmux 里,掉线不丢结果:
bash <(curl -fsSL https://raw.githubusercontent.com/ibsgss/TcpQuality/main/runTcpQuality.sh)国内机换成加速入口:bash <(curl -fsSL https://tcpquality.ibsgss.uk/run)。
要打全量报告加 --all;只想看 IPv4 大包回程用 --only-large -v4。完整参数 --help。
阶段 2 · 综合跑分留档
在临时系统里跑,结束自己清理,不脏本机:
bash <(curl -sL https://run.NodeQuality.com)出的分享链接存一份到本地笔记,阶段 3 调完再跑一次对比,别凭感觉判断有没有变好。
阶段 3 · TCP 调优
按每台机器实测推 BDP 和限速拐点,不套固定参数:
bash <(curl -fsSL https://raw.githubusercontent.com/Kylin010/tcpfit/main/tcpfit.sh)装完弹菜单,1 全自动(会问带宽、测速对端、用途,之后跑到底)。只有 1G 小机顺手用菜单 4 加 swap 更稳。
坑:
- 菜单需要 TTY,远程用
ssh -t <host> tcpfit,脚本里用子命令tcpfit tune --role proxy --bw 500。 - OpenVZ/LXC 上
tc、initcwnd可能受限,跑完看tcpfit status对不对。 - 首次改动前自动存快照,玩砸了
tcpfit rollback原样写回;加过 swap 要连 swap 一起撤就tcpfit rollback --purge-swap。 - 只改
/etc/sysctl.d/99-tcpfit.conf等自己的文件,不碰/etc/sysctl.conf。
阶段 4 · Reality 目标筛选
先筛掉 CDN、热门大站、握手慢的,只留真能用的:
curl -fsSL https://raw.githubusercontent.com/G1oow/reality-checker-main/main/install.sh | bash新版安装器自己探测出口 IP:单栈直接采用,双栈会让你选 1) IPv4 / 2) IPv6,选 IPv6 会自动附加 -6;探测不到才让你手输。装完打印完整命令并问「现在开始扫描?」,直接回车不跑。
它读的是 /dev/tty,所以 curl | bash 这种管道里也会正常提问,不用先落盘。
装完自己再跑一遍更省心(IP 和参数都在手上):
cd /root/rc-new && ./reality-checker-main auto <VPS_IP> --limit 5双栈机只扫 IPv6 段就把 IP 换成 IPv6 并加 -6。
只认星级列:能 5 星就 5 星,同星级取握手最低的,取前 2~3 个各试连一次再定。结果恒为 0 就先 ./reality-checker-main check xtom.com.hk 自检,全 CDN 机房加 --allow-cdn。
详细用法和星级解读见同目录 Reality目标检测-小白教程.md。
阶段 5 · 建节点
(curl -LfsS https://raw.githubusercontent.com/G1oow/singbox-lite/main/singbox.sh -o /usr/local/bin/sb || wget -q https://raw.githubusercontent.com/G1oow/singbox-lite/main/singbox.sh -O /usr/local/bin/sb) && chmod +x /usr/local/bin/sb && sb之后敲 sb 就进面板。首次要手动 [15] 装 sing-box 或 [16] 装 Xray,脚本不替你做主。
- 主节点用
1,协议选 VLESS + TCP + Reality + Vision,SNI 填阶段 4 挑出来的。 - 落地/中转/端口转发在
[18]。 - 改完配置用
[12]检查,服务挂了看[9]日志。
坑: 节点定义的分享链接和 clash.yaml 都在 /usr/local/etc/sing-box/,里面有 UUID、私钥、密码,别整目录往外传。
想省事:直接跑脚本
上面每步都有等价阶段,脚本做了备份、幂等、失败回滚和 sshd -t 校验:
scp -P 22 vps-init.sh root@<VPS_IP>:/root/
ssh root@<VPS_IP>
SSH_PUBKEY='ssh-ed25519 AAAA...' ./vps-init.sh 0 # 公钥 + 端口 + 放行
# 另开终端 ssh -p 30000 验证通过后:
./vps-init.sh 0b # 关密码
./vps-init.sh 1 && ./vps-init.sh 2 # 检测 + 跑分
./vps-init.sh 3 # 调优
./vps-init.sh 4 # 选 SNI
./vps-init.sh 5 # 建节点DRY_RUN=1 只打印不动手,./vps-init.sh rollback 把 sshd 配置写回备份。
收尾检查
ss -lntp | grep 30000 # 端口在听
sshd -T | grep -iE '^(passwordauth|permitroot)' # 密码已关、root 仅密钥
tcpfit status # 调优生效
systemctl status sing-box # 服务在跑顺手做掉:时区 timedatectl set-timezone Asia/Shanghai、unattended-upgrades 开自动安全更新、journalctl --vacuum-size=200M 限制日志。
常见故障
| 现象 | 处理 |
|---|---|
| 改完端口连不上 | 安全组没放行 / sshd 没重载;用旧端口或控制台 VNC 进 |
| 公钥登不进,密码也被关了 | 控制台进,临时 PasswordAuthentication yes 后 reload,查 authorized_keys 权限和内容 |
sshd -T 还是 passwordauthentication yes |
有 drop-in 覆盖,改 /etc/ssh/sshd_config.d/*.conf |
Permission denied (publickey) |
多了换行、粘了半截、或者粘成了私钥 |
socket 模式改了 sshd_config 没反应 |
端口得写 ssh.socket drop-in |
| reality-checker 全是 0 分 | 机房全 CDN,加 --allow-cdn,或换 --min-stars 3 |
工具出处:TcpQuality · NodeQuality · tcpfit · reality-checker-main · singbox-lite
测速报告示例
TcpQuality(TQ)报告:下面的七节图为功能演示,使用保留地址与示意数值,不是原报告的测试结果。点击「原报告」可查看原始数据;点击示意图可放大。
NodeQuality(NQ)报告可通过卡片前往原站查看:
NodeQuality 报告在浏览器中渲染,构建期无法生成预览,点击上方链接查看。