内网穿透场景下 SSH 隧道与 Frp 性能及配置复杂度对比分析?

文章导读
临时调试直接用 SSH 反向隧道,长期稳定服务建议用 Frp,两者在加密开销和管理便利性上有明显区别。
📋 目录
  1. A 命令速用版
  2. B 性能基准测试方法
  3. C 生产环境配置加固
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

内网穿透场景下 SSH 隧道与 Frp 性能及配置复杂度对比分析

临时调试直接用 SSH 反向隧道,长期稳定服务建议用 Frp,两者在加密开销和管理便利性上有明显区别。

先说结论:SSH 适合运维人员临时救急,Frp 适合需要多端口、长期运行的业务场景。

  • 适合:SSH 无需额外安装,Frp 需部署服务端和客户端。
  • 重点看:SSH 默认加密消耗 CPU,Frp 支持 KCP 等协议适应弱网。
  • 别忽略:SSH 暴露端口需加固密钥,Frp 配置令牌防止未授权访问。

命令速用版

SSH 反向隧道一条命令即可打通,Frp 需要编辑配置文件后启动。以下示例均将本地 8080 服务映射到服务器 7080 端口。

# SSH 反向隧道:将本地 8080 映射到服务器 7080
ssh -N -R 7080:localhost:8080 -o ServerAliveInterval=60 user@server_ip

# Frp 客户端配置片段 (frpc.ini)
[common]
server_addr = server_ip
server_port = 7000
token = your_token

[web]
type = tcp
local_port = 8080
remote_port = 7080

性能基准测试方法

SSH 协议设计初衷是安全远程登录,默认开启高强度加密,这在低配服务器上会带来可观的 CPU 占用。Frp 专为内网穿透设计,支持 TCP、KCP 等多种传输协议。若需量化差异,可使用 iperf3 进行基准测试。

# 服务端启动 iperf3
iperf3 -s

# 客户端通过隧道测试带宽
iperf3 -c localhost -p 7080

通常 SSH 的加密开销大于 Frp 的默认 TCP 模式,具体吞吐量取决于服务器 CPU 性能及网络质量。

生产环境配置加固

1. SSH 保持连接配置

长时间无操作 SSH 可能自动断开,建议在命令中添加保持活跃参数,或写入 ~/.ssh/config。

# 命令行临时添加
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=3 ...

# 或写入配置文件 (~/.ssh/config)
Host server_ip
    ServerAliveInterval 60
    ServerAliveCountMax 3

2. Frp systemd 托管配置

Frp 建议使用 systemd 托管以便开机自启,创建 /etc/systemd/system/frpc.service 文件:

内网穿透场景下 SSH 隧道与 Frp 性能及配置复杂度对比分析?
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/path/to/frpc -c /path/to/frpc.ini

[Install]
WantedBy=multi-user.target

启用并启动服务:

systemctl daemon-reload
systemctl enable frpc
systemctl start frpc

怎么验证是否生效

在公网服务器上使用 netstat 查看端口监听状态,或在另一台机器尝试连接映射后的端口。

# 检查端口监听
netstat -tlnp | grep 7080

# 测试连通性 (假设本地 8080 为 HTTP 服务)
curl -v http://localhost:7080

查看 Frp 服务端日志,确认 client 连接状态为 online。

常见坑

1. 会话断开:SSH 需配置 ServerAliveInterval 保持连接,Frp 需配置 systemd 自动重启。

2. 端口冲突:确保公网服务器上的映射端口未被其他程序占用,防火墙需放行对应端口。

3. 版本匹配:Frp 服务端和客户端版本最好保持一致,避免协议不兼容。

4. 验证协议不一致:若映射的是 SSH 端口,验证时应使用 ssh 命令而非 curl;若映射 Web 服务,则使用 curl。

参考来源

  • OpenSSH 官方文档:Secure Shell Protocol
  • Frp 官方 GitHub 仓库:fatedier/frp