在内网穿透的场景中,大家最熟悉的可能是 frp 的 TCP 模式:在公网服务器开一个端口(例如 6000),直接映射到家里的 RDP(3389)或者SSH(22)。
虽然方便,但 可能会有点不够安全 。这意味着任何扫描公网 IP 的黑客都能直接触达你的 RDP 登录界面,暴力破解随之而来。
今天我们介绍一种更高级、更安全的架构: FRP STCP (Secret TCP) 模式 。它不需要在公网防火墙开放业务端口,让你的内网服务在互联网上“隐身”。
1. 核心原理与架构图 1.1 什么是 STCP? STCP 模式采用了“双端验证”机制。它引入了一个 Visitor(访问者) 的角色。
• 传统 TCP 模式 :公网服务器开窗户,谁都能看。 • STCP 模式 :公网服务器不开窗。如果你想连接,必须在你的 本地电脑 上也运行一个 frp 客户端(Visitor),并持有正确的 密钥 (sk) 。 所有流量通过 frp 的主通信端口(通常是 7000)进行 封装 和 多路复用 传输,外部看起来只有一条普通的 TCP 长连接。
1.2 流量架构图 下图展示了当你执行 SSH 连接时的流量走向:
流程解析:
1. 本地请求 :你在本机访问 127.0.0.1:33389 。 2. 加密封装 :本机的 frpc (Visitor) 拦截请求,验证密钥,将数据打包。 3. 隧道传输 :数据包通过公网 7000 端口传给服务器,frps 不感知具体业务协议(如 RDP/SSH),仅作为 frp 隧道的转发节点。 4. 内网解包 :内网 frpc 收到数据,解包后转发给真实的 RDP 服务。 2. 环境准备 1. 公网服务器 (VPS) :拥有公网 IP (例如 1.1.1.1 )。 3. 搭建步骤 第一步:配置公网服务器 (frps) 在 VPS 上修改 frps.toml ,配置如下。
[common] bind_addr = 0.0.0.0 bind_port = 7000 bind_udp_port = 7001 log_file = /usr/frp/frps.log # trace, debug, info, warn, error log_level = info log_max_days = 3 # set dashboard_addr and dashboard_port to view dashboard of frps # dashboard_addr's default value is same with bind_addr # dashboard is available only if dashboard_port is set dashboard_addr = 0.0.0.0 dashboard_port = 7500 # dashboard user and pwd for basic auth protect, if not set, both default value is admin dashboard_user = admin dashboard_pwd = dashbord_password # auth authentication_method = token 启动服务端:
Bash
./frps -c frps.toml 第二步:配置内网服务提供者 (frpc Provider) 在内网机器(NAS/Linux)上修改 frpc.toml 。这里我们定义一个 暗号 (密钥)。
# frpc.toml (内网机器) [common] server_addr = 1.1.1.1 server_port = 7000 token = MySecretToken123 login_fail_exit = false # 定义一个 stcp 规则 [secret_rdp] type = stcp use_encryption = true use_compression = true sk = abcdefg_123456 local_ip = 127.0.0.1 local_port = 3389 启动内网客户端:
Bash
./frpc -c frpc.toml 注意:此时公网服务器上 不会 开启任何新的端口。
第三步:配置访问者 (frpc Visitor) 这是最关键的一步。在你 随身携带的笔记本 上,也需要运行一个 frpc 。
# frpc_visitor.toml (笔记本电脑) [common] server_addr = 1.1.1.1 server_port = 7000 token = MySecretToken123 # 这里的名字随便起,但要标识这是 visitor [secret_rdp_visitor] type = stcp role = visitor # server_name 必须与内网机器配置的中括号名称一致! server_name = secret_rdp use_encryption = true use_compression = true # sk 必须与内网一致 sk = abcdefg_123456 # 绑定到笔记本本地的端口 bind_addr = 127.0.0.1 bind_port = 33389 在笔记本上启动:
Bash
./frpc -c frpc_visitor.toml 4. 如何连接? 现在,你的笔记本上的 33389 端口就是通往家里的传送门。
打开远程桌面输入,用户名、密码即可访问家里的远程桌面。
5. 深度分析:为什么这比普通模式好? 你可能会问:“都要装客户端,为什么不直接用 TCP 模式开个 6000 端口?”
我们可以对比一下优劣:
特性 普通 TCP 模式 STCP 安全模式 公网端口 暴露 隐藏 被扫描风险 攻击面 访问控制 适用场景
总结 STCP 模式的核心在于**“收敛”。
它将原本暴露在公网的高风险端口(22, 3389 等),收敛到了你完全可控的本地环回地址 (127.0.0.1)**。对于运维管理、远程办公等私密需求,强烈建议使用 STCP 模式替代传统的 TCP 端口映射。
阅读原文:原文链接
该文章在 2026/2/10 16:36:25 编辑过