🌉 家里的服务器如何上外网?FRP 内网穿透实战指南
🌉 家里的服务器如何上外网?FRP 内网穿透实战指南
你有一台旧电脑放在家里跑着博客,很自豪对吧?但是... 只有你能访问 😢
今天我们来解决这个问题,让你的家庭服务器"重见天日"!🌍
🏠 场景说明
你有
- ✅ 一台 24 小时开着的电脑/服务器
- ✅ 上面跑了很棒的服务(博客、网站等)
- ✅ 本地访问正常
http://localhost:5000
但是
- ❌ 没有公网 IP(家庭宽带)
- ❌ 路由器不能做端口映射
- ❌ 外面的朋友访问不了
怎么办?
答案:内网穿透! 🚇
🎯 什么是内网穿透?
想象一下:
text
1你家(内网) 2 ↓ 有围墙 3外面的世界(互联网) 4 ↓ 进不去
内网穿透就像打隧道:
text
1外面的世界 🌍 2 ↓ 3[云服务器 - 有公网 IP] 🏢 4 ↓ 🚇 隧道 5你的电脑(内网)🏠
🛠️ 方案对比
| 方案 | 难度 | 成本 | 速度 | 推荐度 |
|---|---|---|---|---|
| FRP | ⭐⭐ | 💰💰 | 🚀🚀🚀 | ⭐⭐⭐⭐⭐ |
| Ngrok | ⭐ | 💰💰💰 | 🚀🚀 | ⭐⭐⭐⭐ |
| Cloudflare Tunnel | ⭐⭐ | 🆓 | 🚀🚀🚀 | ⭐⭐⭐⭐⭐ |
| 花生壳 | ⭐ | 💰💰💰💰 | 🚀 | ⭐⭐ |
本文重点:FRP(Fast Reverse Proxy)
📦 准备工作
需要
一台云服务器(VPS)
- 阿里云、腾讯云、搬瓦工等
- 最便宜的配置就够(1 核 1G)
- 必须有公网 IP
一个域名(可选但推荐)
- 可以不要,用 IP 也能访问
- 有域名更专业
家庭服务器
- 你的博客运行在这里
🚀 第一步:配置 FRP 服务器
下载 FRP
去 GitHub Releases 下载:
bash
1# 服务器端(云服务器) 2wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz 3 4# 解压 5tar xzf frp_0.52.3_linux_amd64.tar.gz 6cd frp_0.52.3_linux_amd64
配置服务器
frps.toml
toml
1[common] 2# 监听端口 3bindPort = 7000 4 5# Dashboard(可选,管理界面) 6webServer.addr = "0.0.0.0" 7webServer.port = 7500 8webServer.user = "admin" 9webServer.password = "设置强密码" 10 11# 认证 Token 12auth.token = "生成一个随机字符串"
生成 Token:
bash
1openssl rand -hex 32
启动服务器
bash
1# 测试启动 2./frps -c frps.toml 3 4# 看到 "start frps success" 就成功了
配置 Systemd 服务
/etc/systemd/system/frps.service
ini
1[Unit] 2Description=FRP Server 3After=network.target 4 5[Service] 6Type=simple 7User=root 8ExecStart=/opt/frp/frps -c /opt/frp/frps.toml 9Restart=always 10 11[Install] 12WantedBy=multi-user.target
bash
1# 启动服务 2sudo systemctl enable frps 3sudo systemctl start frps 4sudo systemctl status frps
🏠 第二步:配置 FRP 客户端
在家庭服务器上操作
bash
1# 下载同样的 FRP 程序 2wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz 3tar xzf frp_0.52.3_linux_amd64.tar.gz 4cd frp_0.52.3_linux_amd64
配置客户端
frpc.toml
toml
1[common] 2# 服务器地址 3serverAddr = "你的云服务器IP" 4serverPort = 7000 5 6# 认证 Token(和服务器一样) 7auth.token = "和服务器相同的token" 8 9[[proxies]] 10# 隧道名称 11name = "blog" 12 13# 类型:http 14type = "http" 15 16# 本地服务地址 17localIP = "127.0.0.1" 18localPort = 5000 19 20# 域名(如果有) 21customDomains = ["blog.yourdomain.com"]
启动客户端
bash
1# 测试启动 2./frpc -c frpc.toml 3 4# 看到 "start proxy success" 就成功了
配置 Systemd 服务
/etc/systemd/system/frpc.service
ini
1[Unit] 2Description=FRP Client 3After=network.target 4 5[Service] 6Type=simple 7User=你的用户名 8ExecStart=/opt/frp/frpc -c /opt/frp/frpc.toml 9Restart=always 10RestartSec=5 11 12[Install] 13WantedBy=multi-user.target
bash
1# 启动服务 2sudo systemctl daemon-reload 3sudo systemctl enable frpc 4sudo systemctl start frpc 5sudo systemctl status frpc
🌐 第三步:配置域名(可选)
如果有域名
在域名 DNS 设置中添加:
text
1类型: CNAME 2名称: blog 3值: 你的云服务器IP
或者 A 记录直接指向 IP。
如果没有域名
直接用 IP 访问:http://云服务器IP
✅ 第四步:测试访问
1. 检查 FRP 状态
服务器端:
bash
1# 查看 FRP 日志 2sudo journalctl -u frps -f 3 4# 或查看 Dashboard 5http://云服务器IP:7500
客户端:
bash
1# 查看 FRP 日志 2sudo journalctl -u frpc -f 3 4# 应该看到 "login to server success"
2. 测试访问
bash
1# 从外网测试 2curl http://blog.yourdomain.com 3 4# 或 5curl http://云服务器IP
3. 浏览器访问
text
1http://blog.yourdomain.com
成功的话,你的博客就能从外网访问了! 🎉
🔒 安全加固
1. 修改端口
toml
1# 不要用默认端口 2serverPort = 7000 # 改成其他端口
2. 启用加密
toml
1[common] 2# 传输加密 3use_encryption = true 4 5# 压缩传输 6use_compression = true
3. 访问控制
toml
1[[proxies]] 2name = "blog" 3type = "http" 4# 只允许特定域名访问 5customDomains = ["blog.yourdomain.com"] 6# HTTP 用户验证 7httpUser = "username" 8httpPassword = "password"
📊 监控和管理
FRP Dashboard
访问:http://云服务器IP:7500
可以查看: - 连接状态 - 流量统计 - 代理信息 - 客户端列表
命令行查看
bash
1# 查看连接 2sudo netstat -anp | grep frp 3 4# 查看进程 5ps aux | grep frp 6 7# 查看日志 8tail -f /var/log/frp.log
🚨 常见问题
问题 1:无法连接到服务器
检查:
bash
1# 1. 服务器防火墙 2sudo ufw allow 7000/tcp 3 4# 2. 云服务器安全组 5# 在云控制台添加 7000 端口规则 6 7# 3. 测试连通性 8telnet 服务器IP 7000
问题 2:连接成功但访问不了
检查:
bash
1# 1. 本地服务是否运行 2curl http://localhost:5000 3 4# 2. 客户端日志 5sudo journalctl -u frpc -n 50 6 7# 3. 代理配置 8# 确认 localIP 和 localPort 正确
问题 3:连接经常断开
原因:网络不稳定
解决:
toml
1[common] 2# 心跳间隔 3heartbeatInterval = 10 4 5# 超时时间 6heartbeatTimeout = 90
💡 进阶用法
1. 多个服务
toml
1# 博客 2[[proxies]] 3name = "blog" 4type = "http" 5localPort = 5000 6customDomains = ["blog.yourdomain.com"] 7 8# 另一个服务 9[[proxies]] 10name = "app" 11type = "http" 12localPort = 8000 13customDomains = ["app.yourdomain.com"]
2. TCP 隧道(SSH)
toml
1[[proxies]] 2name = "ssh" 3type = "tcp" 4localIP = "127.0.0.1" 5localPort = 22 6remotePort = 6000
然后可以从外网 SSH:
bash
1ssh -p 6000 用户@云服务器IP
3. HTTPS
如果你有 SSL 证书,可以在 FRP 层面启用:
toml
1[[proxies]] 2name = "blog" 3type = "https" 4localIP = "127.0.0.1" 5localPort = 5000 6customDomains = ["blog.yourdomain.com"]
🎉 成功案例
我的配置
text
1云服务器:阿里云 1 核 1G 2 - IP:X.X.X.X 3 - 带宽:1 Mbps 4 - 成本:60 元/年 5 6家庭服务器: 7 - 旧电脑(i3-4130,8G 内存) 8 - 运行:Flask 博客 + 其他服务 9 - 成本:0 元(本来就闲置) 10 11域名: 12 - .top 域名 13 - 成本:10 元/年 14 15总成本:70 元/年 ≈ 6 元/月 ☕
性能表现
| 指标 | 数值 |
|---|---|
| 访问速度 | 1-2 秒 |
| 并发能力 | 10+ 并发 |
| 可用性 | 99%+ |
| 流量限制 | 取决于云服务器带宽 |
📚 总结
优点
✅ 成本低(云服务器便宜) ✅ 配置简单(一条命令搞定) ✅ 性能稳定(速度快) ✅ 功能强大(支持多种协议)
缺点
❌ 需要云服务器 ❌ 依赖服务器稳定性 ❌ 安全需要注意
适用场景
- 家庭服务器对外提供服务
- 开发环境临时测试
- 小型个人项目
- 学习网络知识
🔗 相关资源
💬 互动
你有什么内网穿透的经验吗?
- 用过哪些工具?
- 遇到过什么坑?
- 有什么心得体会?
欢迎在评论区分享!🎤
下一篇预告:如何用 Cloudflare Tunnel 免费(0 元)做内网穿透!💰
0 人点赞
评论 (0)
暂无评论,快来抢沙发吧~
发表评论