1. 项目概述
每个月花几百块钱租云服务器?其实你家里那台吃灰的旧电脑完全可以胜任大多数轻量级服务需求。作为一名折腾过各种自建方案的运维老兵,我发现用FRP内网穿透工具配合闲置电脑搭建公网服务,不仅能省下大笔服务器租赁费用,还能获得更高的硬件自主权。
FRP(Fast Reverse Proxy)是一款开源的内网穿透工具,它通过具有公网IP的中转服务器建立隧道,将内网服务暴露到公网。相比传统方案,它的优势在于:
- 支持TCP/UDP/HTTP/HTTPS全协议栈
- 配置简单,单文件即可运行
- 资源占用极低(内存<10MB)
- 跨平台支持(Windows/Linux/macOS)
我去年用一台2015年的联想笔记本(i5-5200U/8GB)搭建了以下服务:
- 个人博客(Hugo+nginx)
- 代码仓库(Gitea)
- 文件同步(Nextcloud)
- 远程开发环境(VS Code Server) 至今稳定运行11个月,电费增加约15元/月,相比阿里云最便宜2核4G实例(约200元/月)节省了超过2000元。
2. 核心原理与技术选型
2.1 FRP工作原理详解
FRP采用C/S架构,由以下组件构成:
[公网服务器] frps(服务端) ↑↓ [内网主机] frpc(客户端)数据流向示例(以Web服务为例):
- 用户访问公网服务器IP:8080
- frps接收请求并通过已建立的隧道转发到内网
- frpc将请求递交给本地的nginx(127.0.0.1:80)
- 响应数据沿原路返回给用户
2.2 与同类方案对比
| 方案 | 配置复杂度 | 稳定性 | 成本 | 适用场景 |
|---|---|---|---|---|
| FRP | 中等 | ★★★★☆ | 低 | 长期稳定服务 |
| Ngrok | 简单 | ★★★☆☆ | 高 | 临时测试 |
| DDNS+端口映射 | 复杂 | ★★☆☆☆ | 免费 | 有公网IP的家庭宽带 |
| ZeroTier | 中等 | ★★★★☆ | 免费 | 点对点组网 |
实测建议:需要7x24小时服务的选FRP,临时演示用Ngrok,有动态公网IP的可以尝试DDNS
3. 详细搭建指南
3.1 硬件准备
推荐配置下限:
- CPU:Intel i3 4代以上(或同级AMD)
- 内存:4GB(运行服务需额外计算)
- 存储:64GB SSD
- 网络:上行带宽≥10Mbps(实测5Mbps可流畅运行WordPress)
我的设备实测数据(ThinkPad T450):
$ uptime 14:30:01 up 45 days, 3:21, 1 user, load average: 0.12, 0.08, 0.05 $ free -h total used free shared buff/cache available Mem: 7.7G 1.2G 5.8G 123M 687M 6.1G3.2 服务端配置(以Ubuntu为例)
- 下载最新release(当前0.52.3):
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz tar zxvf frp_0.52.3_linux_amd64.tar.gz- 编辑frps.ini:
[common] bind_port = 7000 vhost_http_port = 8080 token = your_secure_token_here # 启用Dashboard dashboard_port = 7500 dashboard_user = admin dashboard_pwd = admin@123- 设置系统服务:
sudo cp systemd/frps.service /etc/systemd/system/ sudo systemctl enable frps sudo systemctl start frps3.3 客户端配置(Windows示例)
- 创建frpc.ini:
[common] server_addr = your_server_ip server_port = 7000 token = your_secure_token_here [web] type = http local_ip = 127.0.0.1 local_port = 80 custom_domains = your.domain.com [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000- 创建启动脚本start.bat:
@echo off :start frpc -c frpc.ini timeout /t 5 goto start4. 性能优化与安全加固
4.1 网络调优参数
在frps.ini中添加:
# TCP连接保活 tcp_mux = true max_pool_count = 5 # 流量限制 bandwidth_limit = 10MB bandwidth_limit_mode = client4.2 安全防护措施
- 防火墙规则(ufw示例):
sudo ufw allow 7000/tcp # frp主端口 sudo ufw allow 8080/tcp # HTTP服务 sudo ufw allow 7500/tcp # 仪表盘 sudo ufw enable- 定期更换token:
# 使用openssl生成随机token openssl rand -base64 32- 禁用未使用的协议:
[common] allow_ports = 6000-6010,80805. 典型应用场景实现
5.1 远程开发环境搭建
VSCode远程配置:
{ "name": "Home Server", "host": "your_server_ip", "port": 6000, "username": "devuser", "remotePath": "/projects" }5.2 家庭NAS外网访问
Nextcloud配置要点:
- 修改config.php中的信任域名
- 设置HTTPS反向代理
- 启用双因素认证
5.3 游戏服务器部署
幻兽帕鲁服务器示例:
[palworld] type = udp local_port = 8211 remote_port = 82116. 故障排查手册
6.1 连接问题诊断流程
- 检查基础连通性:
telnet your_server_ip 7000- 查看服务端日志:
journalctl -u frps -f- 客户端调试模式:
frpc -c frpc.ini --log_level=debug6.2 常见错误解决方案
| 错误现象 | 可能原因 | 解决方法 |
|---|---|---|
| 连接超时 | 防火墙拦截/端口未开放 | 检查安全组和iptables规则 |
| 认证失败 | token不匹配 | 同步两端token |
| 带宽波动大 | 运营商QoS限速 | 启用tcp_mux减少连接数 |
| 服务间歇性不可用 | 家庭网络IP变化 | 客户端添加自动重连机制 |
7. 进阶技巧与成本分析
7.1 多设备负载均衡
使用nginx反向代理多个frpc:
upstream frp_nodes { server 192.168.1.100:8080; server 192.168.1.101:8080; } server { listen 80; location / { proxy_pass http://frp_nodes; } }7.2 年度成本对比
| 项目 | 自建方案 | 云服务器(2C4G) |
|---|---|---|
| 硬件成本 | 闲置设备0元 | 0元 |
| 软件成本 | 开源免费 | 开源免费 |
| 服务器租赁 | 低配VPS 60元/年 | 2400元/年 |
| 电费增加 | 约180元/年 | 0元 |
| 总成本 | 240元/年 | 2400元/年 |
实测数据:我的笔记本在运行服务时整机功耗约35W,按0.6元/度电计算