从零到一:Frp服务端与客户端的实战配置与部署

张开发
2026/4/12 9:31:31 15 分钟阅读

分享文章

从零到一:Frp服务端与客户端的实战配置与部署
1. 为什么你需要Frp内网穿透想象一下这个场景你家里有一台NAS服务器存满了工作文档和家庭照片或者你在办公室搭建了一个开发测试环境需要随时随地访问。但问题来了——这些设备都在内网中没有公网IP就像被关在笼子里的鸟飞不出去。这时候Frp就是帮你打开笼子的钥匙。FrpFast Reverse Proxy是一款开源的内网穿透工具它通过公网服务器作为跳板把内网服务安全地暴露到外网。我三年前第一次用它把树莓派上的网站暴露到公网时只花了15分钟就搞定了配置比传统方案简单太多。最让我惊喜的是它的稳定性——连续运行半年都没掉过线实测上传速度能跑满家庭宽带的上限。与传统方案相比Frp有三大杀手锏零成本不需要购买昂贵的企业级硬件配置简单一个配置文件搞定所有设置协议全面支持TCP/UDP/HTTP/HTTPS等多种协议2. 环境准备与Frp安装2.1 选择适合的Frp版本首先访问Frp的GitHub发布页注意替换版本号wget https://github.com/fatedier/frp/releases/download/v0.65.0/frp_0.65.0_linux_amd64.tar.gz下载后解压到本地目录我习惯放在用户目录下tar -zxvf frp_0.65.0_linux_amd64.tar.gz -C ~/ cd ~/frp_0.65.0_linux_amd64这里有个新手常踩的坑一定要根据CPU架构选择正确版本。比如树莓派需要arm64版本普通PC用amd64。用错版本会导致运行时出现exec format error错误。我曾在客户现场调试时因为这个错误浪费了两小时。2.2 防火墙设置要点在正式配置前务必检查防火墙规则。以Ubuntu为例sudo ufw allow 7000/tcp # Frp服务端端口 sudo ufw allow 7500/tcp # 仪表盘端口 sudo ufw allow 6000/tcp # 示例中的SSH映射端口如果是云服务器还需要在安全组中放行这些端口。去年我帮一个客户排查连接问题发现就是阿里云安全组没配置导致的。记住Frp连接需要双向通行既要保证服务端能收到请求也要确保客户端能连出来。3. 服务端配置详解3.1 基础认证配置编辑frps.toml文件时建议使用nano这类简单编辑器nano frps.toml基础配置模板如下bindPort 7000 [auth] token your_secure_token_here [webServer] addr 0.0.0.0 port 7500 user admin password strong_password123这里有几个安全建议token要足够复杂建议用openssl rand -hex 16生成随机字符串仪表盘密码不要用默认值且要包含大小写字母和特殊字符生产环境建议把webServer的addr改为127.0.0.1通过Nginx反向代理访问3.2 高级功能配置如果需要限制客户端数量或设置速率限制可以添加[transport] maxPoolCount 10 [rateLimit] limit 10MB我曾经用这个功能帮一家电商限制测试环境的带宽占用效果立竿见影。他们的开发人员再也不能用内网环境疯狂下载docker镜像了。4. 客户端配置实战4.1 SSH穿透配置示例这是最常用的场景把内网SSH服务暴露到公网serverAddr your_server_ip serverPort 7000 [auth] token your_secure_token_here [[proxies]] name ssh_tunnel type tcp localIP 127.0.0.1 localPort 22 remotePort 6000启动客户端时加-v参数可以看到详细日志./frpc -c frpc.toml -v如果看到login to server success就说明连接成功了。我第一次配置时犯了个低级错误——把serverAddr写成了localhost结果客户端拼命连自己还以为是防火墙问题。4.2 HTTP服务暴露技巧暴露Web服务更简单[[proxies]] name web_app type http localIP 127.0.0.1 localPort 8080 customDomains [app.yourdomain.com]记得在DNS解析里把域名指向服务端IP。有个实用技巧用subdomain配置可以自动分配二级域名[subdomainHost] domain yourdomain.com5. 系统服务与自动化5.1 systemd服务配置创建/etc/systemd/system/frpc.service文件[Unit] DescriptionFrp Client Service Afternetwork.target [Service] Typesimple Usernobody Restarton-failure RestartSec5s ExecStart/path/to/frpc -c /path/to/frpc.toml [Install] WantedBymulti-user.target启用服务并检查状态sudo systemctl enable frpc sudo systemctl start frpc sudo systemctl status frpc5.2 日志排查技巧查看实时日志journalctl -u frpc -f常见错误及解决方案connection refused检查服务端端口是否开放auth failed确认token是否一致port already in use更换remotePort值6. 安全加固方案6.1 TLS加密传输在服务端配置[transport] tls.enable true客户端对应配置[transport] tls.enable true tls.serverName your_domain.com6.2 访问控制列表限制允许连接的客户端IP[allowPorts] allowUsers [192.168.1.100, 10.0.0.*]我帮一个金融客户部署时他们要求必须启用IP白名单双因素认证。虽然配置麻烦些但安全性确实大幅提升。7. 性能调优经验7.1 连接池优化高并发场景下调整这些参数[transport] maxPoolCount 50 tcpKeepAlive 607.2 多路复用配置启用mux能显著提升性能[transport] useEncryption true useCompression true去年双十一期间我们用这些配置支撑了某电商每分钟上万次的内网API调用CPU占用率始终低于30%。

更多文章