FRP内网穿透
发表于|更新于|Linux
|浏览量:
企业级内网穿透实战:frp 深度部署、域名映射与 TLS 安全全解
1. 深度架构:为什么 frp 是穿透之王?
frp (Fast Reverse Proxy) 是一款专注于高性能、跨平台的反向代理应用。相比于传统的 DDNS(受限于公网 IP)或 VPN(配置臃肿),frp 的优势在于:
- 协议丰富:支持 TCP, UDP, HTTP, HTTPS, STCP, KCP 等。
- 配置极简:通过简单的
.toml配置文件即可实现复杂的端口映射。 - 安全性高:原生支持 TLS 加密传输,适配 Let’s Encrypt 证书。
2. 基础设施准备
- 公网服务端 (frps):一台具备公网 IP 的 Linux 云服务器(推荐 Ubuntu 22.04 LTS 或 Debian 11+)。
- 内网客户端 (frpc):你的 NAS、个人 PC 或内网服务器。
- 域名资源:一个已备案(或境外)的域名,并完成 A 记录解析到公网服务器 IP。
- TLS 证书:申请好的 SSL/TLS 证书(.crt 和 .key 文件),用于 HTTPS 映射。
3. 服务器底层优化:开启 BBR 加速
在进行内网穿透前,必须开启 Google BBR 拥塞控制算法,以大幅提升在高延迟或丢包环境下的传输吞吐量。
- 检查内核版本:需在 4.9 以上。
- 开启 BBR:
1
2
3echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p - 验证结果:
1
2sysctl net.ipv4.tcp_available_congestion_control
# 输出应包含 bbr
4. 服务端部署 (frps) — 进阶配置
4.1 安装与目录规范
1 | # 下载最新版 (以 v0.54.0 为例) |
4.2 配置 frps.toml (多业务支持)
1 | bindPort = 7000 # frp 通讯主端口 |
5. 域名与 SSL 证书实战 (HTTPS 穿透)
这是 frp 最核心的进阶用法:将内网 Web 服务映射到公网域名的 443 端口。
5.1 客户端 frpc.toml 配置
在内网机器上,我们将内网的 80 端口服务通过公网服务器的 TLS 证书包装后发布。
1 | serverAddr = "x.x.x.x" |
5.2 泛域名支持
如果你有多个服务,建议配置泛域名(如 *.yourdomain.com),在 frps.toml 中增加:
1 | subDomainHost = "yourdomain.com" |
这样客户端只需配置 subdomain = "nas" 即可通过 nas.yourdomain.com 访问。
6. 高安全性模式:STCP 与 P2P (XTCP)
6.1 STCP (Secret TCP)
不暴露公网端口,只有持有相同 Token 的客户端才能建立连接。
- 服务端:无需额外配置。
- 内网端:配置为
type = "stcp"并设置secretKey。 - 访问端:也需运行 frpc,配置
type = "stcp"的 visitor。
6.2 XTCP (P2P 穿透)
尝试打洞实现点对点传输,流量不经过服务器中转,适合大文件传输。(XTCP(P2P)打洞的成功率极度依赖于两端的 NAT 类型,如果两端都是 Symmetric NAT(对称型 NAT),XTCP 几乎 100% 失败。此时必须依赖 frp 的 Server Helper 角色或回退到 STCP 模式)
1 | [[proxies]] |
7. 生产环境运维:Systemd 自启动
为了保证服务 24/7 不间断,必须配置守护进程。
1 | # /etc/systemd/system/frps.service |
启动命令:systemctl daemon-reload && systemctl enable frps --now
8. 适用场景与风险控制
适用人群
- 私有云存储:Nextcloud/群晖 NAS 远程访问。
- DevOps:本地 Webhook 回调调试、微信开发环境。
- 远程管理:全平台 RDP/SSH/VNC 远程控制。
风险防范 (Risk Management)
- DDoS 风险:公网服务器建议开启防火墙(ufw/iptables),仅开放必要端口。
- 弱密码攻击:frp 本身不验证内网服务密码,请务必保证 SSH、RDP 等服务使用强密钥登录。
- 合规性:请确保映射的内容符合当地法律法规,避免映射敏感服务。
9. 总结:性能调优建议
- 压缩:在
proxies中开启transport.useCompression = true可减少 30% 以上带宽消耗。 - KCP 协议:在网络环境极差(如移动网络)下,配置
transport.protocol = "kcp"能显著降低卡顿。 - 多用户:通过
common配置中的user字段区分多个客户端,方便在 Dashboard 查看。
文章作者: diaopanda
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 diaopanda!
